J'utilise le client OpenVPN via le plug-in OpenVPN Network Manager sur une double pile (configurée à la fois pour la connectivité IPv4 et IPv6) Ubuntu 13.10 pour rediriger tout le trafic via le VPN (redirect-gateway). Cela fonctionne généralement bien.
Cependant, étant donné que le système préfère IPv6, le VPN "fuit" et lors de la connexion à des sites également disponibles sur IPv6 (comme Google ou Wikipedia), le navigateur se connecte directement.
Une solution serait de configurer le serveur OpenVPN pour fournir une connectivité IPv6. Bien que possible avec OpenVPN, le plug-in de Network Manager ne le prend actuellement pas en charge.
Comme 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. Est-ce possible? Si oui, comment puis-je le faire?
Ajoutez ceci à votre ligne du noya dans votre chargeur de démarrage pour désactiver IPv6:
ipv6.disable=1
Si vous utilisez Grub (si vous n'avez pas installé votre propre chargeur de démarrage, vous utilisez Grub), la ligne de votre 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 variable GRUB_CMDLINE_LINUX_DEFAULT
dans le fichier /etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
Une fois que vous avez ajouté cela à /etc/default/grub
, exécutez la commande suivante pour régénérer votre grub.cfg
:
Sudo grub-mkconfig -o /boot/grub/grub.cfg
Sinon, ajouter ipv6.disable_ipv6=1
conservera la pile IPv6 fonctionnelle, mais n'attribuera aucune adresse IPv6 à aucun de vos périphériques réseau.
Pour désactiver IPv6 via sysctl, placez le texte suivant dans votre fichier /etc/sysctl.conf
:
net.ipv6.conf.all.disable_ipv6 = 1
N'oubliez pas de commenter les hôtes IPv6 de votre fichier /etc/hosts
:
#::1 localhost.localdomain localhost
NOTE
un redémarrage peut être requis pour la méthode sysctl, et un redémarrage est certainement requis pour l'approche en ligne du noyau.
Pour temporairement désactiver ipv6:
sysctl -w net.ipv6.conf.all.disable_ipv6 = 1
Pour temporairement l'activer:
sysctl -w net.ipv6.conf.all.disable_ipv6 = 0
Donc, si vous devez désactiver ipv6 sur un condition donné, écrivez un script bash quelque part comme suit:
#!/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
NOTE
Vous devrez peut-être également désactiver tous les hôtes ipv6 de votre fichier /etc/hosts
pour cette méthode, comme je l’avais recommandé dans la méthode précédente.
Vous pouvez désactiver ipv6 au niveau client pour un gestionnaire de réseau spécifique connexion en définissant l'option IPv6 ipv6.method sur "ignorer".
// SOP: Recréer ma connexion LAN en utilisant FIXED IP 192.168.0.95 to 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
`` ``
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 automatiquement IPv6 lors de la connexion à un réseau privé virtuel via le gestionnaire de réseau:
Créez un script dans /etc/NetworkManager/dispatcher.d
:
$ Sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
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
Rendre le script exécutable:
$ Sudo chmod 755 /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
C'est tout. J'ai dû ajouter manuellement mon DNS Pi-Hole en raison d'un bogue dnsmasq
qui empêche resolv.conf
d'être mis à jour correctement. Modifiez donc les lignes indiquées si vous trouvez que votre DNS présente une fuite.