¿Cómo deshabilitar IPv6 cuando se conecta a un servidor OpenVPN usando Network Manager en un sistema de doble pila?

20

Estoy usando el cliente OpenVPN a través del complemento OpenVPN Network Manager en una pila dual (es decir, configurado para conectividad IPv4 e IPv6) Ubuntu 13.10 para redirigir todo el tráfico a través de la VPN (redirect-gateway). Generalmente funciona bien.

Sin embargo, debido a que el sistema prefiere IPv6, la VPN "pierde" y cuando se conecta a sitios que también están disponibles a través de IPv6 (como Google o Wikipedia), el navegador se conecta directamente.

Una solución sería configurar el servidor OpenVPN para proporcionar conectividad IPv6. Si bien es posible con OpenVPN, el complemento para Network Manager actualmente no lo admite.

Dado que la conectividad IPv6 a través de la VPN no es estrictamente necesaria, me gustaría simplemente deshabilitar IPv6 en el cliente cuando se conecta al servidor OpenVPN. ¿Es posible? Si es así, ¿cómo puedo hacerlo?

Maldita terminal
fuente
1
¿Tu VPN no está llevando tráfico IPv6 también?
Michael Hampton
Mi VPN bien podría estar llevando tráfico IPv6, pero Network Manager no admite la configuración de IPv6 actualmente para OpenVPN por lo que puedo decir.
Maldita Terminal el
1
Solo para el registro, si su proveedor de VPN tiene fugas como esta, necesita un nuevo proveedor. Hay muchos de ellos que hacen esto bien. IPv6 no va a desaparecer, y deshabilitarlo solo lo cortará de partes de Internet.
Michael Hampton
1
@MichaelHampton Lamentablemente, es mi servidor. Soy el proveedor en este caso. Es compatible con IPv6, pero solo viene con uno / 64, por lo que necesitaría unirlo primero, lo que es un poco molesto. Lo que es más importante (en ese momento, no lo he verificado desde entonces) el administrador de red tuvo algunos problemas para manejar las conexiones OpenVPN habilitadas para IPv6 (IPv6 a través de VPN sin embargo funciona con la configuración de red de puente y puente, que es lo que uso ahora).
Maldita Terminal

Respuestas:

15

Agregue esto a su línea de kernel en su gestor de arranque para deshabilitar por completo IPv6:

ipv6.disable=1

Si está utilizando Grub (si no ha instalado su propio gestor de arranque, entonces está utilizando Grub), la línea de su núcleo debería verse así:

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

El enfoque recomendado, para agregar algo a la línea del núcleo, es agregar el parámetro del núcleo deseado a la GRUB_CMDLINE_LINUX_DEFAULTvariable en el /etc/default/grubarchivo:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

Una vez que haya agregado eso /etc/default/grub, ejecute el siguiente comando para regenerar su grub.cfg:

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

Alternativamente, agregar en su ipv6.disable_ipv6=1lugar mantendrá la pila IPv6 funcional pero no asignará direcciones IPv6 a ninguno de sus dispositivos de red.

O

Para deshabilitar IPv6 a través de sysctl, coloque lo siguiente en su /etc/sysctl.confarchivo:

net.ipv6.conf.all.disable_ipv6 = 1

No olvide comentar los hosts IPv6 en su /etc/hostsarchivo:

#::1        localhost.localdomain   localhost

NOTA

puede ser necesario reiniciar para el método sysctl, y definitivamente es necesario reiniciar para el enfoque de línea del núcleo.

O

Para deshabilitar temporalmente ipv6:

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

Para habilitarlo temporalmente :

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

Entonces, si necesita deshabilitar ipv6 en una condición dada , escriba un script bash en alguna parte a lo largo de estas líneas:

#!/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

NOTA

Es posible que también necesite deshabilitar cualquier host ipv6 en su /etc/hostsarchivo para este método, tal como lo recomendé en el método anterior.

Alexej Magura
fuente
55
Sí, ok. Pero quiero deshabilitar IPv6 cuando me conecte a la VPN usando Network Manager, no matarlo por completo en mi sistema. Quizás debería haberlo dejado más claro.
Maldita Terminal el
@DamnTerminal, por lo que solo desea deshabilitarlo cuando está conectado a su VPN, ya que deshabilitarlo en todo el sistema está bien, siempre que solo ocurra mientras está conectado a su VPN.
Alexej Magura
@DamnTerminal Actualicé mi respuesta para incluir un ejemplo de cómo deshabilitar ipv6 usando un script bash que verificaría una condición. Probablemente podría usar la interfaz de línea de comandos de NetworkManager: nmclipara verificar si está conectado a su VPN; si eso no funciona, entonces estoy seguro de que hay una utilidad de red de línea de comandos que dará acceso a esa información.
Alexej Magura
¿Por qué el voto negativo?
Alexej Magura
Lamentablemente, esta solución ( sysctl) no vuelve a habilitar IPv6 para WiFi correctamente. Debe volver a conectarse al punto de acceso para habilitarlo.
Igor Mikushkin
5

Puede deshabilitar ipv6 en el nivel del cliente para una conexión específica de Network Manager configurando la opción ipv6.method IPv6 para "ignorar"

// SOP: recrear mi conexión LAN usando IP FIJA 192.168.0.95 a Ethernet. `` ``

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

`` ``

Rolf
fuente
1
Lamentablemente, no tiene ningún efecto para las conexiones VPN.
Igor Mikushkin
0

Estoy en Ubuntu 16.04.03 LTS, conectándome a un servidor Pi-Hole a través de PiVPN.

Esto es lo que hice para encender y apagar automáticamente IPv6 al conectarme a una VPN a través del Administrador de red:

  1. Crea un script en /etc/NetworkManager/dispatcher.d:

    $ sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    
  2. Agregue el siguiente contenido al archivo (modifique el contenido según sus requisitos):

    #!/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. Haga que el script sea ejecutable:

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

Eso es. Tuve que agregar manualmente mi DNS de Pi-Hole debido a un dnsmasqerror que impide que resolv.confse actualice correctamente, así que modifique las líneas indicadas si encuentra que su DNS tiene una fuga.

ooknosi
fuente
Lamentablemente, esta solución no vuelve a habilitar IPv6 para WiFi correctamente. Debe volver a conectarse al punto de acceso para habilitarlo.
Igor Mikushkin
0

Creo que es menos intrusivo deshabilitar ip6 en el archivo del cliente (editar client_conf_file.ovpn) que modifica la pila tcp del kernel.

Abra su conf_file.ovpn y agregue las siguientes líneas:

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

Lo probé y después de esto, el ipv6 desaparece.

Antes de. Corro ip a |grep globaly el resultado es:

    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

Después. Corro ip a |grep globaly el resultado es:

    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
Em50L
fuente
0

Edite el perfil de OpenVPN en NetworkManager, abra la pestaña IPv6 y agregue manualmente una ruta:

Dirección: 2000 Prefijo: 3 Puerta de enlace: 0100 :: 1

2000 :: / 3 captura todas las direcciones IPv6 enrutables públicamente. 0100 :: / 64 prefijo es un prefijo especial designado para descartar tráfico. Básicamente, enviará todo el tráfico IPv6 a una puerta de enlace que no existe.

Al revés: fácil y completamente automático.

Desventaja: algunas aplicaciones, es decir, herramientas de línea de comandos, pueden no recurrir a IPv4 tan rápido como a uno le gustaría cuando se usa este método.

Niels
fuente
0

Me gustaría simplemente deshabilitar IPv6 en el cliente cuando me conecte al servidor OpenVPN. ¿Es posible?

Prueba mi sencillo guión que acabo de hacer ahora, esto lo hará,

  • Tratar con todas las interfaces.
  • Deshabilite ipv6 cuando se inicie OpenVPN.
  • Habilite ipv6 cuando finalice OpenVPN.
  • Mejor compatibilidad con el argumento NetworkManager.

Si todavía hay una dirección ipv6 en ciertas interfaces, el cliente aún intenta el enrutamiento ipv6, pero como DNS usa UDP, hay posibilidades de fuga de DNS que TCPwrapper no puede desactivar.

Este script también funciona bien con otras interfaces porque ya no se basa en el argumento de NetworkManager, como vpn-up vpn-down.

crear un archivo ejecutable en /etc/NetworkManager/dispatcher.d/

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

pegue el código a continuación

#!/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

luego hazlo ejecutable

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

PS OpenVPN con Network Manager pierde muchas opciones de beneficios de OpenVPN de las versiones de línea de comandos.

Seandex
fuente