Recherche de site Web

Comment désactiver IPv6 sur Linux


La prise en charge de la version 6 du protocole Internet est disponible sur Linux depuis 1996. Le noyau implémente cette fonctionnalité, qui est généralement active et activée par défaut sur toutes les principales distributions, via le module « ipv6 ». Parfois, pour diverses raisons, il peut être souhaitable de désactiver temporairement ou définitivement la mise en réseau IPv6.

Dans ce tutoriel, nous apprenons comment désactiver temporairement ou définitivement la mise en réseau IPv6 sous Linux, à l’aide de sysctl, NetworkManager ou des arguments de ligne de commande du noyau.

Dans ce tutoriel, vous allez apprendre :

  • Comment désactiver temporairement IPv6
  • Comment désactiver définitivement IPv6 à l’aide de NetworkManager, sysctl ou via les arguments de ligne de commande du noyau

Désactivation temporaire d’IPv6

La façon la plus simple de désactiver temporairement le réseau IPv6 au moment de l’exécution sous Linux consiste à écrire la valeur appropriée dans les fichiers exposés en tant qu’interface par le noyau dans le répertoire /proc/sys/net/ipv6/conf. Ce répertoire contient un sous-répertoire pour chaque interface réseau existante, ainsi que les répertoires « all » et « default » :

ls /proc/sys/net/ipv6/conf  
all default enp1s0 lo

Pour désactiver IPv6 pour une interface spécifique, il suffit d’écrire 1 dans le fichier « disable_ipv6 » situé sous le répertoire nommé d’après l’interface cible. Disons, par exemple, que nous voulons désactiver IPv6 pour l’interface de bouclage (lo) ; Nous courrions :

echo 1 | sudo tee /proc/sys/net/ipv6/conf/lo/disable_ipv6

À quoi servent les répertoires « all » et « default » ? Les modifications que nous apportons aux fichiers de configuration sous le répertoire « default » seront effectives sur les interfaces réseau ajoutées à partir du moment où nous effectuons ces modifications ; Les modifications que nous apportons aux fichiers de configuration sous le répertoire « all » affectent toutes les interfaces existantes et les paramètres par défaut en même temps. Nous pouvons facilement le vérifier. Sur la machine que j’utilise, il y a en fait deux interfaces réseau : enp1s0 et lo ; les deux ont reçu une adresse IPv6 (inet6) :

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether BA-6F-9B-BB-26-DE brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.103/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0
       valid_lft 3547sec preferred_lft 3547sec
    inet6 fe80::5054:ff:fe36:2597/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

Récupérons la valeur actuellement écrite dans les fichiers « disable_ipv6 » sous les répertoires correspondants dans /proc/sys/net/ipv6/conf/, y compris « all » et « default » :

cat /proc/sys/net/ipv6/conf/*/disable_ipv6
0
0
0
0

Comme prévu, la valeur est « 0 » dans tous les fichiers : cela signifie que IPv6 est activé. Maintenant, écrivons « 1 » dans le fichier « disable_ipv6 » sous le répertoire « all » :

echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6

Observez comment IPv6 a été désactivé pour toutes les interfaces ; La même valeur a été définie par défaut :

cat /proc/sys/net/ipv6/conf/*/disable_ipv6
1
1
1
1

Les adresses IPv6 ont également été supprimées des interfaces réseau :

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether BA-6F-9B-BB-26-DE brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.103/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0
       valid_lft 3361sec preferred_lft 3361sec

Désactivation d’IPv6 à l’aide de sysctl

Une autre façon de désactiver temporairement IPv6 consiste à modifier les valeurs des paramètres du noyau au moment de l’exécution à l’aide de l’utilitaire sysctl. Écrire dans le fichier /proc/sys/net/ipv6/conf/all/disable_ipv6, comme nous l’avons fait dans l’exemple précédent, équivaut à attribuer la même valeur à la variable sysctl net.ipv6_conf.all.disable_ipv6. Pour utiliser sysctl en mode « écriture », nous l’invoquons avec l’option -w :

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

Les modifications que nous effectuons manuellement ou à l’aide de sysctl ne sont pas persistantes. Voyons comment les faire survivre à un redémarrage.

Désactivation définitive d’IPv6

Il existe plusieurs méthodes que nous pouvons utiliser pour désactiver définitivement IPv6. Si le service NetworkManager est activé et que les interfaces réseau sont gérées par celui-ci, la méthode préférée consiste à utiliser l’utilitaire « connection-editor ». La version graphique de l’outil peut être invoquée en exécutant :

nm-connection-editor

On sélectionne la connexion appropriée (enp1s0 dans ce cas), puis on clique sur le bouton « engrenage », pour modifier sa configuration :

Nous cliquons sur l’onglet « Paramètres IPv6 », et dans le widget déroulant associé au libellé « Méthode », nous sélectionnons « Ignorer ». Pour confirmer notre choix, nous cliquons sur le bouton « Enregistrer » :

La modification entrera en vigueur après le redémarrage du service NetworkManager :

sudo systemctl restart NetworkManager

Si l’interface pour laquelle nous voulons désactiver IPv6 n’est pas gérée par NetworkManager, nous pouvons rendre les valeurs des variables sysctl persistantes, en les écrivant dans un fichier sous le répertoire /etc/sysctl.d, ou dans le fichier /etc/sysctl.conf. La raison pour laquelle nous ne voulons pas utiliser cette méthode si NetworkManager est activé, c’est qu’elle pourrait remplacer les valeurs sysctl. Afin de désactiver IPv6 pour toutes les interfaces actives, et d’en faire une valeur par défaut, nous pouvons écrire la ligne suivante dans le fichier /etc/sysctl.d/90-disable_ipv6.conf(le nom du fichier est arbitraire, l’essentiel est qu’il ait l’extension « .conf ») :

net.ipv6.conf.all.disable_ipv6 = 1

Pour désactiver IPv6 pour une interface spécifique (par exemple enp1s0), à la place :

net.ipv6.conf.enp1s0.disable_ipv6 = 1

Les modifications sont lues et appliquées au démarrage par le service systemd-sysctl ; Pour les rendre immédiatement efficaces, nous pouvons également exécuter la commande suivante :

sudo systctl -p /etc/sysctl.d/90-disable_ipv6.conf

L’option -p de l’utilitaire sysctl est la version abrégée de --load : elle est utilisée pour charger les paramètres à partir du fichier /etc/sysctl.conf, ou à partir de celui que nous passons en argument.

Désactivation complète de la pile IPv6

Jusqu’à présent, nous désactivions le réseau IPv6 pour toutes les interfaces réseau ou certaines d’entre elles. Une solution plus radicale consiste à désactiver complètement la pile IPv6 dans le noyau. Nous pouvons le faire en définissant le paramètre de noyau ipv6.disable à 1. Lors de l’utilisation du chargeur d’amorçage GRUB, nous pouvons le faire en modifiant les lignes GRUB_CMDLINE_LINUX_DEFAULT ou GRUB_CMDLINE_LINUX dans le fichier /etc/default/grub (les modifications apportées au premier ne sont appliquées qu’au démarrage normal, tandis que celles apportées au second sont appliquées également au démarrage en mode « récupération ») :

GRUB_CMDLINE_LINUX_DEFAULT="quiet ipv6.disable=1"

Pour reconstruire la configuration du chargeur d’amorçage sur Debian et les distributions basées sur Debian, nous exécutons :

sudo update-grub

Sur Fedora et d’autres distributions basées sur celui-ci, à la place :

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

La prochaine fois que nous démarrerons le système, puisque nous avons complètement désactivé la pile IPv6, nous découvrirons que le répertoire /proc/sys/net/ipv6 n’existe plus :

ls /proc/sys/net/ipv6/
ls: cannot access '/proc/sys/net/ipv6/': No such file or directory

Réflexions finales

Dans ce tutoriel, nous avons appris comment désactiver le réseau IPv6 sous Linux. Nous avons vu comment le désactiver temporairement en écrivant simplement les valeurs appropriées dans le fichier exposé en tant qu’interface sous le pseudo système de fichiers /proc, ou en utilisant l’utilitaire sysctl. Nous avons également vu comment désactiver définitivement le protocole en utilisant NetworkManager, et enfin, comment désactiver complètement la pile IPv6 dans le noyau.

Articles connexes: