Como desabilitar o IPv6 ao se conectar a um servidor OpenVPN usando o Network Manager em um sistema dual-stack?

13

Estou usando o cliente OpenVPN através do plug-in do Gerenciador de Rede OpenVPN em uma pilha dupla (ou seja, configurado para conectividade IPv4 e IPv6). O Ubuntu 13.10 redireciona todo o tráfego pela VPN (redirecionamento-gateway). Geralmente funciona bem.

No entanto, devido ao fato de o IPv6 ser preferido pelo sistema, a VPN "vaza" e ao se conectar a sites que também estão disponíveis em IPv6 (como o Google ou a Wikipedia), o navegador se conecta diretamente.

Uma solução seria configurar o servidor OpenVPN para fornecer conectividade IPv6. Embora seja possível com o OpenVPN, o plugin para o Network Manager atualmente não suporta isso.

Como a conectividade IPv6 sobre a VPN não é estritamente necessária, gostaria de simplesmente desabilitar o IPv6 no cliente ao conectar-se ao servidor OpenVPN. É possível? Se sim, como posso fazer isso?

    
por Damn Terminal 28.03.2014 / 14:02

3 respostas

13

Adicione isto à sua linha de kernel no seu gerenciador de partida para desativar o IPv6 completamente:

ipv6.disable=1

Se você estiver usando o Grub (se você não tiver instalado o seu próprio gerenciador de inicialização, então você está usando o Grub), sua linha do kernel deve ser algo como isto:

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

A abordagem recomendada, para adicionar algo à linha do kernel, é adicionar o parâmetro do kernel desejado à variável GRUB_CMDLINE_LINUX_DEFAULT no arquivo /etc/default/grub :

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

Depois de adicionar isso a /etc/default/grub , execute o seguinte comando para gerar novamente seu grub.cfg :

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

Como alternativa, adicionar ipv6.disable_ipv6=1 manterá a pilha IPv6 funcional, mas não atribuirá endereços IPv6 a nenhum de seus dispositivos de rede.

OU

Para desabilitar o IPv6 via sysctl, coloque o seguinte no seu arquivo /etc/sysctl.conf :

net.ipv6.conf.all.disable_ipv6 = 1

Não se esqueça de comentar os hosts IPv6 no seu arquivo /etc/hosts :

#::1        localhost.localdomain   localhost

OBSERVAÇÃO

uma reinicialização pode ser necessária para o método sysctl, e uma reinicialização é definitivamente necessária para a abordagem da linha do kernel.

OU

Para temporariamente desativar o ipv6:

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

Para temporariamente ativá-lo:

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

Portanto, se você precisar desativar o ipv6 em uma determinada condição , escreva um script em algum lugar ao longo destas linhas:

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

OBSERVAÇÃO

Você pode precisar desabilitar todos os hosts ipv6 em seu arquivo /etc/hosts para esse método também, assim como recomendei no método anterior.

    
por Alexej Magura 30.03.2014 / 16:39
4

Você pode desabilitar o ipv6 no nível do cliente para uma conexão específica do Network Manager configurando a opção IPv6 ipv6.method para "ignorar"

// SOP: Recrie minha conexão de LAN usando o IP FIXO 192.168.0.95 para 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

'' ''

    
por Rolf 01.02.2017 / 20:22
0

Estou no Ubuntu 16.04.03 LTS, conectando-me a um servidor Pi-Hole através do PiVPN.

Foi o que fiz para ativar e desativar automaticamente o IPv6 ao conectar-se a uma VPN por meio do Network Manager:

  1. Crie um script em /etc/NetworkManager/dispatcher.d :

    $ sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    
  2. Adicione o seguinte conteúdo ao arquivo (modifique o conteúdo para suas necessidades):

    #!/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=""
    ACTION=""
    
    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. Torne o script executável:

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

É isso. Eu tive que adicionar manualmente meu DNS Pi-Hole por causa de um bug dnsmasq que impede que resolv.conf seja atualizado corretamente, então modifique as linhas indicadas se você encontrar o seu DNS vazando.

    
por ooknosi 06.12.2017 / 06:10