Como desativar o IPv6 ao conectar-se a um servidor OpenVPN usando o Network Manager em um sistema de pilha dupla?

20

Estou usando o cliente OpenVPN através do plug-in OpenVPN Network Manager em uma pilha dupla (ou seja, configurada para conectividade IPv4 e IPv6) Ubuntu 13.10 para redirecionar todo o tráfego através da VPN (redirecionar-gateway). Geralmente funciona bem.

No entanto, devido ao fato de o IPv6 ser preferido pelo sistema, a VPN "vaza" e, ao conectar-se a sites que também estão disponíveis pelo IPv6 (como Google ou 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 plug-in do Network Manager atualmente não o suporta.

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

Damn Terminal
fonte
11
Sua VPN também não está transportando tráfego IPv6?
Michael Hampton
Minha VPN pode estar transportando tráfego IPv6, mas o Network Manager não suporta atualmente a configuração IPv6 do OpenVPN, até onde eu sei.
Terminal Damn 31/03
11
Só para constar, se o seu provedor de VPN está vazando assim, você precisa de um novo provedor. Há muitos deles que acertam. O IPv6 não está desaparecendo, e desabilitá-lo apenas impedirá você de partes da Internet.
Michael Hampton
11
@ MichaelHampton Infelizmente, é o meu servidor. Eu sou o provedor neste caso. Ele suporta IPv6, mas só vem com um / 64, então eu precisaria uni-lo primeiro, o que é um pouco trabalhoso. Mais importante (na época, ainda não verifiquei) o gerente de rede teve alguns problemas ao lidar com conexões OpenVPN habilitadas para IPv6 (o IPv6 sobre VPN, no entanto, funciona com a configuração de rede com ponte e ponte que é o que eu uso agora).
Damn Terminal

Respostas:

15

Adicione isso à sua linha de kernel no seu gerenciador de inicialização para desativar completamente o IPv6:

ipv6.disable=1

Se você está usando o Grub (se você não instalou seu próprio gerenciador de inicialização, então está usando o Grub), sua linha de kernel deve se parecer com:

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 à GRUB_CMDLINE_LINUX_DEFAULTvariável no /etc/default/grubarquivo:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

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

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

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

OU

Para desativar o IPv6 via sysctl, coloque o seguinte no seu /etc/sysctl.confarquivo:

net.ipv6.conf.all.disable_ipv6 = 1

Não se esqueça de comentar qualquer host IPv6 no seu /etc/hostsarquivo:

#::1        localhost.localdomain   localhost

NOTA

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

OU

Para desativar temporariamente o ipv6:

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

Para habilitá-lo temporariamente :

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

Portanto, se você precisar desativar o ipv6 em uma determinada condição , escreva um script bash 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

NOTA

Pode ser necessário desativar qualquer host ipv6 no seu /etc/hostsarquivo para esse método também, assim como eu recomendei no método anterior.

Alexej Magura
fonte
5
Sim, ok. Mas quero desabilitar o IPv6 ao conectar-me à VPN usando o Network Manager, não matá-lo totalmente no meu sistema. Talvez eu devesse ter deixado isso mais claro.
Droga Terminal
@ DamnTerminal, então você só deseja desabilitá-lo quando estiver conectado à sua VPN, pois desabilitá-lo em todo o sistema é bom, desde que só aconteça enquanto você estiver conectado à sua VPN?
Alexej Magura
@DamnTerminal Atualizei minha resposta para incluir um exemplo de como desativar o ipv6 usando um script bash que verificaria uma condição. Você provavelmente poderia usar a interface de linha de comando do NetworkManager: nmclipara verificar se você está conectado à sua VPN; se isso não funcionar, tenho certeza de que existe um utilitário de rede de linha de comando que dará acesso a essas informações.
Alex11 Magura #
Por que o voto negativo?
Alexej Magura
Infelizmente, esta solução ( sysctl) não reativa o IPv6 para WiFi corretamente. Você precisa se reconectar ao ponto de acesso para habilitá-lo.
Igor Mikushkin
5

Você pode desativar 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 LAN usando 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

`` ``

Rolf
fonte
11
Infelizmente, não tem efeito para conexões VPN.
Igor Mikushkin
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 o IPv6 automaticamente ao conectar-me 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 seus 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. Torne o script executável:

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

É isso aí. Eu tive que adicionar manualmente meu DNS Pi-Hole por causa de um dnsmasqbug que impede a resolv.confatualização correta; portanto, modifique as linhas indicadas se o seu DNS vazar.

ooknosi
fonte
Infelizmente, esta solução não reativa o IPv6 para WiFi corretamente. Você precisa se reconectar ao ponto de acesso para habilitá-lo.
Igor Mikushkin
0

Eu acho que é menos invasivo desabilitar o ip6 no arquivo do cliente (edite client_conf_file.ovpn) que modifica a pilha tcp do kernel.

Abra seu arquivo conf_file.ovpn e adicione as seguintes linhas:

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

Eu tentei e depois disso o ipv6 desaparece.

Antes. Eu corro ip a |grep globale o resultado é:

    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

Depois de. Eu corro ip a |grep globale o resultado é:

    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
fonte
0

Edite o perfil OpenVPN no NetworkManager, abra a guia IPv6 e adicione manualmente uma rota:

Endereço: 2000 Prefixo: 3 Gateway: 0100 :: 1

2000 :: / 3 captura todos os endereços IPv6 publicamente roteáveis. O prefixo 0100 :: / 64 é um prefixo especial designado para descartar o tráfego. Essencialmente, você estará enviando todo o tráfego IPv6 para um gateway que não existe.

De cabeça: fácil e completamente automático.

Desvantagem: alguns aplicativos, como ferramentas de linha de comando, podem não voltar ao IPv4 tão rapidamente quanto se gostaria quando esse método é usado.

Niels
fonte
0

Eu gostaria de simplesmente desativar o IPv6 no cliente ao conectar ao servidor OpenVPN. É possível?

Experimente o meu roteiro direto que acabei de criar agora,

  • Lide com todas as interfaces.
  • Desative o ipv6 quando o OpenVPN for iniciado.
  • Habilite o ipv6 quando o OpenVPN for finalizado.
  • Melhor compatibilidade com o argumento NetworkManager.

Se ainda houver um endereço IPv6 em determinadas interfaces, o cliente ainda tentará o roteamento IPv6, mas como o DNS usa UDP, há chances de vazamento de DNS que o TCPwrapper não consiga desativar.

Esse script também funciona bem com outras interfaces porque não depende mais do argumento do NetworkManager, como vpn-up vpn-down.

crie um arquivo executável em /etc/NetworkManager/dispatcher.d/

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

cole o código abaixo

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

então torne-o executável

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

O PS OpenVPN com o Network Manager perde muitas opções de benefícios do OpenVPN das versões de linha de comando.

Seandex
fonte