Wie deaktiviere ich IPv6, wenn ich mit Network Manager auf einem Dual-Stack-System eine Verbindung zu einem OpenVPN-Server herstelle?


20

Ich verwende den OpenVPN-Client über das OpenVPN Network Manager-Plug-in auf einem Dual-Stack (dh für IPv4- und IPv6-Konnektivität konfiguriert). Ubuntu 13.10 leitet den gesamten Datenverkehr über das VPN um (Redirect-Gateway). Es funktioniert im Allgemeinen gut.

Aufgrund der Tatsache, dass IPv6 vom System bevorzugt wird, tritt eine "Undichtigkeit" des VPN auf. Wenn eine Verbindung zu Websites hergestellt wird, die auch über IPv6 verfügbar sind (z. B. Google oder Wikipedia), stellt der Browser eine direkte Verbindung her.

Eine Lösung wäre, den OpenVPN-Server für die Bereitstellung von IPv6-Konnektivität zu konfigurieren. Während dies mit OpenVPN möglich ist, wird es vom Plugin für Network Manager derzeit nicht unterstützt.

Da IPv6-Konnektivität über das VPN nicht unbedingt erforderlich ist, möchte ich IPv6 beim Herstellen einer Verbindung zum OpenVPN-Server einfach auf dem Client deaktivieren. Ist es möglich? Wenn ja, wie kann ich das machen?


1
Ihr VPN überträgt keinen IPv6-Verkehr?
Michael Hampton


Mein VPN könnte IPv6-Verkehr übertragen, aber Network Manager unterstützt derzeit keine IPv6-Konfiguration für OpenVPN, soweit ich das beurteilen kann.
Damn Terminal

1
Um es festzuhalten: Wenn Ihr VPN-Anbieter so leckt, benötigen Sie einen neuen Anbieter. Es gibt viele von ihnen, die das richtig machen. IPv6 verschwindet nicht und wenn Sie es deaktivieren, werden Sie nur von Teilen des Internets abgeschnitten.
Michael Hampton

1
@ MichaelHampton Leider ist es mein Server. Ich bin in diesem Fall der Anbieter. Es unterstützt IPv6, wird jedoch nur mit einer / 64-Version geliefert, sodass ich es zuerst verbinden müsste, was ein bisschen mühsam ist. Noch wichtiger ist, dass der Netzwerkmanager einige Probleme mit der Behandlung von IPv6-fähigen OpenVPN-Verbindungen hatte (IPv6 über VPN funktioniert jedoch mit Tap- und Bridged-Netzwerkeinstellungen, die ich jetzt verwende).
Damn Terminal

Antworten:


15

Fügen Sie dies zu Ihrer Kernel-Zeile in Ihrem Bootloader hinzu, um IPv6 insgesamt zu deaktivieren:

ipv6.disable=1

Wenn Sie Grub verwenden (wenn Sie keinen eigenen Bootloader installiert haben, dann verwenden Sie Grub), sollte Ihre Kernel-Zeile ungefähr so ​​aussehen:

linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff ipv6.disable=1

Der empfohlene Ansatz, um der Kernel-Zeile etwas hinzuzufügen, besteht darin, der GRUB_CMDLINE_LINUX_DEFAULTVariablen in der /etc/default/grubDatei den gewünschten Kernel-Parameter hinzuzufügen :

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

Sobald Sie dies hinzugefügt haben /etc/default/grub, führen Sie den folgenden Befehl aus, um Ihr System neu zu generieren grub.cfg:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Alternativ hinzufügen ipv6.disable_ipv6=1 stattdessen bleibt der IPv6-Stapel funktionsfähig, es werden jedoch keine IPv6-Adressen für Ihre Netzwerkgeräte zugewiesen.

ODER

Um IPv6 über sysctl zu deaktivieren, fügen Sie Folgendes in Ihre /etc/sysctl.confDatei ein:

net.ipv6.conf.all.disable_ipv6 = 1

Vergessen Sie nicht, alle IPv6-Hosts in Ihrer /etc/hostsDatei zu kommentieren :

#::1        localhost.localdomain   localhost

HINWEIS

Für die sysctl-Methode ist möglicherweise ein Neustart erforderlich, und für den Kernel-Line-Ansatz ist auf jeden Fall ein Neustart erforderlich.

ODER

Zu vorübergehend deaktivieren Sie ipv6 :

sysctl -w net.ipv6.conf.all.disable_ipv6 = 1

Zu vorübergehend aktivieren Sie es :

sysctl -w net.ipv6.conf.all.disable_ipv6 = 0

Wenn Sie also ipv6 unter bestimmten Bedingungen deaktivieren müssen , schreiben Sie ein Bash-Skript in diese Richtung:

#!/bin/bash
ipv6_disabled="$(sysctl net.ipv6.conf.all.disable_ipv6 | awk '{print $NF}')"
if (connected_to_vpn &> /dev/null); then
  (($ipv6_disabled)) || sysctl -w net.ipv6.conf.all.disable_ipv6=1
else
  (($ipv6_disabled)) && sysctl -w net.ipv6.conf.all.disable_ipv6=0
fi

HINWEIS

Möglicherweise müssen Sie auch /etc/hostsfür diese Methode alle IPv6-Hosts in Ihrer Datei deaktivieren , so wie ich es in der vorherigen Methode empfohlen habe.


5
Ja ok. Ich möchte IPv6 jedoch deaktivieren, wenn ich mit Network Manager eine Verbindung zum VPN herstelle, und es nicht vollständig auf meinem System beenden. Vielleicht hätte ich es klarer machen sollen.
Damn Terminal

@DamnTerminal, möchten Sie es also nur deaktivieren, wenn Sie mit Ihrem VPN verbunden sind, da das systemweite Deaktivieren in Ordnung ist, solange es nur geschieht, wenn Sie mit Ihrem VPN verbunden sind?
Alexej Magura

@DamnTerminal Ich habe meine Antwort so aktualisiert, dass sie ein Beispiel für die Deaktivierung von ipv6 mithilfe eines Bash-Skripts enthält, das eine Bedingung überprüft. Möglicherweise können Sie die Befehlszeilenschnittstelle von NetworkManager verwenden nmcli, um zu überprüfen, ob eine Verbindung zu Ihrem VPN besteht. Wenn das nicht funktioniert, gibt es sicher ein Befehlszeilen-Dienstprogramm, das Zugriff auf diese Informationen bietet.
Alexej Magura

Warum die Gegenstimme?
Alexej Magura

Leider sysctlaktiviert diese Lösung ( ) IPv6 für WiFi nicht richtig. Sie müssen erneut eine Verbindung zum Access Point herstellen, um ihn zu aktivieren.
Igor Mikushkin

5

Sie können ipv6 auf Clientebene für eine bestimmte Network Manager- Verbindung deaktivieren Clientebene indem Sie die IPv6-Option ipv6.method auf "Ignorieren" setzen.

// SOP: Stelle meine LAN-Verbindung mit der festen IP 192.168.0.95 zu Ethernet wieder her. `` ``

nmcli connection delete lan-ethernet
nmcli connection add con-name lan-ethernet \
    ifname enp0s31f6 \
    type ethernet \
    ip4 192.168.0.95/24  gw4 192.168.0.1

nmcli connection modify lan-ethernet  ipv6.method "ignore"
nmcli connection modify lan-ethernet  ipv4.dns "8.8.8.8 8.8.4.4"
nmcli connection up lan-ethernet
sleep 1
nmcli device status
nmcli connection show
ifconfig enp0s31f6

`` ``


1
Leider hat dies keine Auswirkung auf VPN-Verbindungen.
Igor Mikushkin

0

Ich bin auf Ubuntu 16.04.03 LTS und verbinde mich über PiVPN mit einem Pi-Hole-Server.

So habe ich IPv6 beim Herstellen einer VPN-Verbindung über den Network Manager automatisch ein- und ausgeschaltet:

  1. Erstellen Sie ein Skript in /etc/NetworkManager/dispatcher.d:

    $ sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    
  2. Fügen Sie der Datei den folgenden Inhalt hinzu (ändern Sie den Inhalt entsprechend Ihren Anforderungen):

    #!/bin/sh
    # Network Manager Dispatcher Hook:
    # enables/disables ipv6 on vpn-down/vpn-up respectively
    #
    # Copyright (c) 2017 ooknosi
    # Apache License 2.0
    
    # Args
    INTERFACE="$1"
    ACTION="$2"
    
    case $ACTION in
        vpn-up)
        # vpn connected; disable ipv6
        sysctl -w net.ipv6.conf.all.disable_ipv6=1
        ### UNCOMMENT AND EDIT BELOW IF NECESSARY
        ## add pi-hole nameserver
        #echo -n "nameserver 192.168.1.1" | /sbin/resolvconf -a "tun0.openvpn"
        ### UNCOMMENT AND EDIT ABOVE IF NECESSARY
        ;;
    
        vpn-down)
        # vpn disconnected; enable ipv6
        sysctl -w net.ipv6.conf.all.disable_ipv6=0
        ### UNCOMMENT AND EDIT BELOW IF NECESSARY
        ## remove pi-hole nameserver
        #/sbin/resolvconf -d "tun0.openvpn"
        ### UNCOMMENT AND EDIT ABOVE IF NECESSARY
        ;;
    esac
    
    exit 0
    
  3. Machen Sie das Skript ausführbar:

    $ sudo chmod 755 /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    

Das ist es. Ich musste mein Pi-Hole-DNS manuell hinzufügen, da ein dnsmasqFehler aufgetreten resolv.confist, der die ordnungsgemäße Aktualisierung verhindert. Ändern Sie daher die angezeigten Zeilen, wenn Sie feststellen, dass Ihr DNS leckt.


Leider aktiviert diese Lösung IPv6 für WLAN nicht ordnungsgemäß. Sie müssen erneut eine Verbindung zum Access Point herstellen, um ihn zu aktivieren.
Igor Mikushkin

0

Ich denke, es ist weniger aufdringlich, IP6 in der Client-Datei zu deaktivieren (edit client_conf_file.ovpn), die den Kernel-TCP-Stack modifiziert.

Öffne deine conf_file.ovpn und füge folgende Zeilen hinzu:

#disable ipv6
#https://community.openvpn.net/openvpn/ticket/849
pull-filter ignore "ifconfig-ipv6 "
pull-filter ignore "route-ipv6 "

Ich habe es versucht und danach verschwindet das ipv6.

Vor. Ich laufe ip a |grep globalund Ergebnis ist:

    inet 192.168.43.39/24 brd 192.168.43.255 scope global dynamic noprefixroute wlan0
    inet 10.8.0.6/24 brd 10.8.0.255 scope global tun0
    inet6 2a00:1630:66:16::1004/64 scope global

Nach. Ich laufe ip a |grep globalund Ergebnis ist:

    inet 192.168.1.14/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
    inet 10.8.0.7/24 brd 10.8.0.255 scope global tun0

0

Bearbeiten Sie das OpenVPN-Profil in NetworkManager, öffnen Sie die Registerkarte IPv6 und fügen Sie manuell eine Route hinzu:

Adresse: 2000 Präfix: 3 Gateway: 0100 :: 1

2000 :: / 3 erfasst alle öffentlich routbaren IPv6-Adressen. 0100 :: / 64-Präfix ist ein spezielles Präfix zum Verwerfen von Datenverkehr. Im Wesentlichen senden Sie den gesamten IPv6-Datenverkehr an ein nicht vorhandenes Gateway.

Vorteil: einfach und vollautomatisch.

Nachteil: Einige Apps, insbesondere Befehlszeilentools, greifen möglicherweise nicht so schnell auf IPv4 zurück, wie man es gerne möchte, wenn diese Methode verwendet wird.


0

Ich möchte IPv6 auf dem Client einfach deaktivieren, wenn ich eine Verbindung zum OpenVPN-Server herstelle. Ist es möglich?

Probieren Sie mein einfaches Skript aus, das ich gerade erstellt habe.

  • Beschäftige dich mit den gesamten Schnittstellen.
  • Deaktivieren Sie ipv6, wenn OpenVPN gestartet wird.
  • Aktivieren Sie ipv6, wenn OpenVPN beendet ist.
  • Bessere Kompatibilität mit dem NetworkManager-Argument.

Wenn auf bestimmten Schnittstellen immer noch eine IPv6-Adresse vorhanden ist, versucht der Client immer noch das IPv6-Routing, aber da DNS UDP verwendet, besteht die Möglichkeit eines DNS-Lecks, das TCPwrapper nicht deaktivieren kann.

Dieses Skript funktioniert auch gut mit anderen Schnittstellen, da es nicht mehr auf dem Argument von NetworkManager basiert, wie z. B. vpn-up vpn-down.

erstelle eine ausführbare Datei in /etc/NetworkManager/dispatcher.d/

sudo vim /etc/NetworkManager/dispatcher.d/v6d

Füge den Code unten ein

#!/bin/bash
IF=$1
STATUS=$2
if [ "$IF" = "tun0" ];
then
case "$2" in
up)
for v6 in $(sysctl -a |grep ipv6|grep disable|sed 's/ \= 0/=1/'); do
sysctl -w $v6
done
;;
down)
for v6 in $(sysctl -a |grep ipv6|grep disable|sed 's/ \= 1/\=0/'); do
sysctl -w $v6
done
;;
esac
fi

dann mach es ausführbar

sudo vim /etc/NetworkManager/dispatcher.d/v6d

PS OpenVPN mit Network Manager verliert viele OpenVPN-Vorteilsoptionen aus Befehlszeilenversionen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.