Come disabilitare IPv6 quando ci si connette a un server OpenVPN usando Network Manager su un sistema dual-stack?


20

Sto usando il client OpenVPN tramite il plug-in OpenVPN Network Manager su un doppio stack (significato configurato sia per la connettività IPv4 che IPv6) Ubuntu 13.10 per reindirizzare tutto il traffico attraverso la VPN (reindirizzamento-gateway). In genere funziona bene.

Tuttavia, a causa del fatto che IPv6 è preferito dal sistema, la VPN "perde" e quando si collega a siti che sono disponibili anche su IPv6 (come Google o Wikipedia), il browser si collega direttamente.

Una soluzione sarebbe quella di configurare il server OpenVPN per fornire connettività IPv6. Sebbene sia possibile con OpenVPN, il plug-in per Network Manager al momento non lo supporta.

Poiché la connettività IPv6 tramite VPN non è strettamente necessaria, mi piacerebbe semplicemente disabilitare IPv6 sul client durante la connessione al server OpenVPN. È possibile? In tal caso, come posso farlo?


1
Anche la tua VPN non trasporta traffico IPv6?
Michael Hampton,


La mia VPN potrebbe trasportare traffico IPv6 ma Network Manager non supporta attualmente la configurazione IPv6 per OpenVPN, per quanto ne so.
Maledetto terminal,

1
Per la cronaca, se il tuo provider VPN perde così, hai bisogno di un nuovo provider. Ce ne sono molti che hanno capito bene. IPv6 non sta andando via e disabilitarlo ti bloccherà solo da parti di Internet.
Michael Hampton,

1
@MichaelHampton Purtroppo, è il mio server. Sono il fornitore in questo caso. Supporta IPv6 ma viene fornito solo con uno / 64, quindi dovrei prima collegarlo, il che è un po 'doloroso. Ancora più importante (al momento, non ho più verificato da allora) il gestore della rete aveva dei problemi nella gestione delle connessioni OpenVPN abilitate per IPv6 (IPv6 su VPN funziona comunque con la configurazione di rete tap e bridge che è quello che uso ora).
Maledetto terminal,

Risposte:


15

Aggiungilo alla riga del tuo kernel nel boot loader per disabilitare del tutto IPv6:

ipv6.disable=1

Se stai usando Grub (se non hai installato il tuo boot-loader, allora stai usando Grub), la tua linea del kernel dovrebbe assomigliare a questa:

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

L'approccio raccomandato, per aggiungere qualcosa alla riga del kernel, è quello di aggiungere il parametro del kernel desiderato alla GRUB_CMDLINE_LINUX_DEFAULTvariabile nel /etc/default/grubfile:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

Dopo averlo aggiunto a /etc/default/grub, esegui il comando seguente per rigenerare il tuo grub.cfg:

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

In alternativa, l'aggiunta ipv6.disable_ipv6=1invece manterrà lo stack IPv6 funzionale ma non assegnerà gli indirizzi IPv6 a nessuno dei dispositivi di rete.

O

Per disabilitare IPv6 tramite sysctl, inserire quanto segue nel /etc/sysctl.conffile:

net.ipv6.conf.all.disable_ipv6 = 1

Non dimenticare di commentare qualsiasi host IPv6 nel tuo /etc/hostsfile:

#::1        localhost.localdomain   localhost

NOTA

un riavvio può essere richiesto per il metodo sysctl e un riavvio è sicuramente necessario per l'approccio della linea del kernel.

O

Per disabilitare temporaneamente ipv6:

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

Per abilitarlo temporaneamente :

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

Quindi se hai bisogno di disabilitare ipv6 su una data condizione , allora scrivi uno script bash da qualche parte lungo queste linee:

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

Potrebbe essere necessario disabilitare qualsiasi host ipv6 nel /etc/hostsfile anche per questo metodo, proprio come ho consigliato nel metodo precedente.


5
Sì, ok. Ma voglio disabilitare IPv6 quando mi connetto alla VPN usando Network Manager, non ucciderlo del tutto sul mio sistema. Forse avrei dovuto renderlo più chiaro.
Maledetto terminal,

@DamnTerminal, quindi vuoi disabilitarlo solo quando sei connesso alla tua VPN, come disabilitarlo a livello di sistema va bene, purché accada solo mentre sei connesso alla tua VPN?
Alexej Magura,

@DamnTerminal Ho aggiornato la mia risposta per includere un esempio di come disabilitare ipv6 usando uno script bash che verifichi una condizione. Probabilmente potresti usare l'interfaccia della riga di comando di NetworkManager: nmcliper verificare se sei connesso alla tua VPN; se non funziona, sono sicuro che esiste un'utilità di rete a riga di comando che consente di accedere a tali informazioni.
Alexej Magura,

Perché il downvote?
Alexej Magura,

Purtroppo questa soluzione ( sysctl) non riattiva correttamente IPv6 per WiFi. È necessario riconnettersi al punto di accesso per abilitarlo.
Igor Mikushkin,

5

È possibile disabilitare ipv6 a livello client per una specifica connessione di Network Manager impostando l'opzione IPv6 ipv6.method su "ignora"

// SOP: ricrea la mia connessione LAN utilizzando IP FISSO 192.168.0.95 su 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

`` ``


1
Sfortunatamente non ha alcun effetto per le connessioni VPN.
Igor Mikushkin,

0

Sono su Ubuntu 16.04.03 LTS, collegandomi a un server Pi-Hole tramite PiVPN.

Questo è quello che ho fatto per accendere e spegnere automaticamente IPv6 durante la connessione a una VPN tramite Network Manager:

  1. Crea uno script in /etc/NetworkManager/dispatcher.d:

    $ sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    
  2. Aggiungi il seguente contenuto nel file (modifica il contenuto per le tue esigenze):

    #!/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. Rendi eseguibile lo script:

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

Questo è tutto. Ho dovuto aggiungere manualmente il mio DNS Pi-Hole a causa di un dnsmasqbug che impedisce resolv.confdi essere aggiornato correttamente, quindi modifica le righe indicate se trovi il tuo DNS che perde.


Sfortunatamente questa soluzione non riattiva correttamente IPv6 per WiFi. È necessario riconnettersi al punto di accesso per abilitarlo.
Igor Mikushkin,

0

Penso che sia meno invadente disabilitare ip6 nel file client (modifica client_conf_file.ovpn) che modifica lo stack tcp del kernel.

Apri conf_file.ovpn e aggiungi le seguenti righe:

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

L'ho provato e dopo questo l'ipv6 scompare.

Prima. Corro ip a |grep globale il risultato è:

    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

Dopo. Corro ip a |grep globale il risultato è:

    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

Modifica il profilo OpenVPN in NetworkManager, apri la scheda IPv6 e aggiungi manualmente una route:

Indirizzo: 2000 Prefisso: 3 Gateway: 0100 :: 1

2000 :: / 3 acquisisce tutti gli indirizzi IPv6 instradabili pubblicamente. Il prefisso 0100 :: / 64 è un prefisso speciale designato per eliminare il traffico. In sostanza, invierai tutto il traffico IPv6 a un gateway che non esiste.

Upside: facile e completamente automatico.

Unico inconveniente: alcune app, in particolare gli strumenti da riga di comando, potrebbero non ricorrere a IPv4 così rapidamente come si vorrebbe quando si utilizza questo metodo.


0

Vorrei semplicemente disabilitare IPv6 sul client durante la connessione al server OpenVPN. È possibile?

Prova la mia sceneggiatura semplice che ho appena creato ora, questo lo farà,

  • Gestisci tutte le interfacce.
  • Disabilitare ipv6 all'avvio di OpenVPN.
  • Abilita ipv6 quando OpenVPN è terminato.
  • Migliore compatibilità con l'argomento NetworkManager.

Se esiste ancora un indirizzo ipv6 su alcune interfacce, il client prova comunque il routing ipv6 ma poiché DNS utilizza UDP, ci sono possibilità di perdita di DNS che TCPwrapper non riesce a disabilitare.

Questo script funziona anche bene con altre interfacce perché non si basa più sull'argomento di NetworkManager, come vpn-up vpn-down.

creare un file eseguibile in /etc/NetworkManager/dispatcher.d/

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

incolla il codice qui sotto

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

quindi renderlo eseguibile

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

PS OpenVPN con Network Manager perde molte opzioni di beneficio OpenVPN dalle versioni a riga di comando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.