Comment désactiver IPv6 lors de la connexion à un serveur OpenVPN à l'aide de Network Manager sur un système à double pile?

20

J'utilise le client OpenVPN via le plugin OpenVPN Network Manager sur une double pile (ce qui signifie qu'il est configuré à la fois pour la connectivité IPv4 et IPv6) Ubuntu 13.10 pour rediriger tout le trafic via le VPN (passerelle de redirection). Cela fonctionne généralement bien.

Cependant, en raison du fait que IPv6 est préféré par le système, le VPN "fuit" et lors de la connexion à des sites qui sont également disponibles sur IPv6 (comme Google ou Wikipedia), le navigateur se connecte directement.

Une solution serait de configurer le serveur OpenVPN pour fournir la connectivité IPv6. Bien que possible avec OpenVPN, le plug-in pour Network Manager ne le prend actuellement pas en charge.

Étant donné que la connectivité IPv6 sur le VPN n'est pas strictement nécessaire, je voudrais simplement désactiver IPv6 sur le client lors de la connexion au serveur OpenVPN. C'est possible? Si oui, comment faire?

Putain de terminal
la source
1
Votre VPN ne transporte pas également le trafic IPv6?
Michael Hampton
Mon VPN pourrait bien transporter du trafic IPv6 mais Network Manager ne prend pas en charge la configuration IPv6 actuellement pour OpenVPN pour autant que je sache.
Damn Terminal
1
Pour mémoire, si votre fournisseur VPN fuit comme ça, vous avez besoin d'un nouveau fournisseur. Il y en a beaucoup qui réussissent. IPv6 ne disparaîtra pas et sa désactivation ne fera que vous couper des parties d'Internet.
Michael Hampton
1
@MichaelHampton Malheureusement, c'est mon serveur. Je suis le fournisseur dans ce cas. Il prend en charge IPv6 mais n'est livré qu'avec un / 64, donc je devrais d'abord l'épisser, ce qui est un peu pénible. Plus important encore (à l'époque, je n'ai pas vérifié depuis), le gestionnaire de réseau a eu des problèmes pour gérer les connexions OpenVPN activées IPv6 (IPv6 sur VPN fonctionne cependant avec la configuration réseau tap and bridged qui est ce que j'utilise maintenant).
Damn Terminal

Réponses:

15

Ajoutez ceci à votre ligne de noyau dans votre chargeur de démarrage pour désactiver complètement IPv6:

ipv6.disable=1

Si vous utilisez Grub (si vous n'avez pas installé votre propre chargeur de démarrage, alors vous utilisez Grub), votre ligne de noyau devrait ressembler à ceci:

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

L'approche recommandée, pour ajouter quelque chose à la ligne du noyau, consiste à ajouter le paramètre de noyau souhaité à la GRUB_CMDLINE_LINUX_DEFAULTvariable dans le /etc/default/grubfichier:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

Une fois que vous l'avez ajouté à /etc/default/grub, exécutez la commande suivante pour régénérer votre grub.cfg:

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

Alternativement, l'ajout à la ipv6.disable_ipv6=1place gardera la pile IPv6 fonctionnelle mais n'attribuera aucune adresse IPv6 à aucun de vos périphériques réseau.

OU

Pour désactiver IPv6 via sysctl, placez ce qui suit dans votre /etc/sysctl.conffichier:

net.ipv6.conf.all.disable_ipv6 = 1

N'oubliez pas de commenter les hôtes IPv6 de votre /etc/hostsfichier:

#::1        localhost.localdomain   localhost

REMARQUE

un redémarrage peut être requis pour la méthode sysctl, et un redémarrage est définitivement requis pour l'approche de la ligne du noyau.

OU

Pour désactiver temporairement ipv6:

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

Pour l' activer temporairement :

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

Donc, si vous devez désactiver ipv6 dans une condition donnée , écrivez un script bash quelque part le long de ces lignes:

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

REMARQUE

Vous devrez peut-être également désactiver tous les hôtes ipv6 dans votre /etc/hostsfichier pour cette méthode, comme je l'ai recommandé dans la méthode précédente.

Alexej Magura
la source
5
Ouais ok. Mais je veux désactiver IPv6 lors de la connexion au VPN à l'aide de Network Manager, pas le tuer entièrement sur mon système. J'aurais peut-être dû clarifier les choses.
Damn Terminal
@DamnTerminal, donc vous ne voulez le désactiver que lorsque vous êtes connecté à votre VPN, car le désactiver à l'échelle du système est correct, tant que cela ne se produit que lorsque vous êtes connecté à votre VPN?
Alexej Magura
@DamnTerminal J'ai mis à jour ma réponse pour inclure un exemple de désactivation d'ipv6 à l'aide d'un script bash qui vérifierait une condition. Vous pourriez probablement utiliser l'interface de ligne de commande de NetworkManager: nmclipour vérifier si vous êtes connecté à votre VPN; si cela ne fonctionne pas, je suis sûr qu'il existe un utilitaire de ligne de commande qui donnera accès à ces informations.
Alexej Magura
Pourquoi le downvote?
Alexej Magura
Malheureusement, cette solution ( sysctl) ne réactive pas correctement IPv6 pour le WiFi. Vous devez vous reconnecter au point d'accès pour l'activer.
Igor Mikushkin
5

Vous pouvez désactiver ipv6 au niveau du client pour une connexion Network Manager spécifique en définissant l'option IPv6 ipv6.method sur "ignore"

// SOP: recrée ma connexion LAN en utilisant FIXED IP 192.168.0.95 sur 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
la source
1
Malheureusement, cela n'a aucun effet sur les connexions VPN.
Igor Mikushkin
0

Je suis sur Ubuntu 16.04.03 LTS, je me connecte à un serveur Pi-Hole via PiVPN.

Voici ce que j'ai fait pour activer et désactiver IPv6 automatiquement lors de la connexion à un VPN via le gestionnaire de réseau:

  1. Créez un script dans /etc/NetworkManager/dispatcher.d:

    $ sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    
  2. Ajoutez le contenu suivant dans le fichier (modifiez le contenu selon vos besoins):

    #!/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. Rendez le script exécutable:

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

C'est ça. J'ai dû ajouter manuellement mon DNS Pi-Hole à cause d'un dnsmasqbug qui empêche resolv.confd'être correctement mis à jour, donc modifiez les lignes indiquées si vous trouvez que votre DNS fuit.

ooknosi
la source
Malheureusement, cette solution ne réactive pas IPv6 correctement pour le WiFi. Vous devez vous reconnecter au point d'accès pour l'activer.
Igor Mikushkin
0

Je pense qu'il est moins intrusif de désactiver ip6 dans le fichier client (éditer client_conf_file.ovpn) qui modifie la pile TCP du noyau.

Ouvrez votre conf_file.ovpn et ajoutez les lignes suivantes:

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

Je l'ai essayé et après cela, l'ipv6 disparaît.

Avant. Je cours ip a |grep globalet le résultat est:

    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

Après. je coursip a |grep global et le résultat est:

    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
la source
0

Modifiez le profil OpenVPN dans NetworkManager, ouvrez l'onglet IPv6 et ajoutez manuellement un itinéraire:

Adresse: 2000 Préfixe: 3 Passerelle: 0100 :: 1

2000 :: / 3 capture toutes les adresses IPv6 publiquement routables. Le préfixe 0100 :: / 64 est un préfixe spécial désigné pour rejeter le trafic. Essentiellement, vous enverrez tout le trafic IPv6 vers une passerelle qui n'existe pas.

Upside: facile et complètement automatique.

Inconvénient: certaines applications, notamment les outils de ligne de commande, peuvent ne pas revenir à IPv4 aussi rapidement que l'on le souhaiterait lorsque cette méthode est utilisée.

Niels
la source
0

Je voudrais simplement désactiver IPv6 sur le client lors de la connexion au serveur OpenVPN. C'est possible?

Essayez mon script simple que je viens de créer maintenant, ce sera,

  • Traitez l'ensemble des interfaces.
  • Désactivez ipv6 au démarrage d'OpenVPN.
  • Activez ipv6 lorsque OpenVPN est terminé.
  • Meilleure compatibilité avec l'argument NetworkManager.

S'il y a toujours une adresse ipv6 sur certaines interfaces, le client essaie toujours le routage ipv6 mais comme DNS utilise UDP, il y a des chances de fuite DNS que TCPwrapper ne parvient pas à désactiver.

Ce script fonctionne également bien avec d'autres interfaces car il ne repose plus sur l'argument de NetworkManager, tel que vpn-up vpn-down.

créer un fichier exécutable dans /etc/NetworkManager/dispatcher.d/

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

collez le code ci-dessous

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

puis le rendre exécutable

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

PS OpenVPN avec Network Manager perd beaucoup d'options d'avantages OpenVPN des versions en ligne de commande.

Seandex
la source