Debian 11 sysctl vs ipv6

Tags: #<Tag:0x00007f63f63edf80>

Bonjour

le but est de désactiver l’ipv6 au boot donc je rajoute cette règle:

ll /etc/sysctl.d                            
total 12K
-rw-r--r-- 1 root root 146 18 mai   14:11 30-brave.conf
-rw-r--r-- 1 root root 102 30 août  11:39 70-disable-ipv6.conf
lrwxrwxrwx 1 root root  14 20 mars  20:55 99-sysctl.conf -> ../sysctl.conf
-rw-r--r-- 1 root root 639 17 mai    2018 README.sysctl

les règles:

# cat /etc/sysctl.d/70-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

puis:

reboot

apres le reboot SURPRISE:

# ip ad
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: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether bc:ae:c5:be:bf:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global dynamic noprefixroute enp2s0
       valid_lft 86369sec preferred_lft 86369sec
    inet6 2a01:cb18:8453:b200:f8af:34d6:66c9:953d/64 scope global temporary dynamic 
       valid_lft 86390sec preferred_lft 590sec
    inet6 2a01:cb18:8453:b200:beae:c5ff:febe:bfac/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 86390sec preferred_lft 590sec
    inet6 fe80::beae:c5ff:febe:bfac/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

toujours de l’ipV6, petite vérification:

# cat /etc/sysctl.d/70-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
# cat /proc/sys/net/ipv6/conf/all/disable_ipv6 && cat /proc/sys/net/ipv6/conf/default/disable_ipv6&& cat /proc/sys/net/ipv6/conf/lo/disable_ipv6 
1
1
1

il faut croire que le default ou le all ne marchent pas!

# cat /proc/sys/net/ipv6/conf/enp2s0/disable_ipv6 
0
# cat /proc/sys/net/ipv6/conf/all/disable_ipv6 
1
# cat /proc/sys/net/ipv6/conf/default/disable_ipv6 
1

mais le pire c’est que si je fais ça:

# sysctl -p /etc/sysctl.d/70-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# ip ad
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: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether bc:ae:c5:be:bf:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global dynamic noprefixroute enp2s0
       valid_lft 85866sec preferred_lft 85866sec

BOOM plus d’ipv6!! je décide de rebooter

# ip ad
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: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether bc:ae:c5:be:bf:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global dynamic noprefixroute enp2s0
       valid_lft 86372sec preferred_lft 86372sec
    inet6 2a01:cb18:8453:b200:6207:5aaf:5b13:76a6/64 scope global temporary dynamic 
       valid_lft 86374sec preferred_lft 574sec
    inet6 2a01:cb18:8453:b200:beae:c5ff:febe:bfac/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 86374sec preferred_lft 574sec
    inet6 fe80::beae:c5ff:febe:bfac/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

l’ipv6 est toujours là donc je rajoute la règle pour l’interface:

# cat /etc/sysctl.d/70-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.enp2s0.disable_ipv6=1
# reboot 

attention les yeux!!

ip ad                                           
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: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether bc:ae:c5:be:bf:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global dynamic noprefixroute enp2s0
       valid_lft 86342sec preferred_lft 86342sec
    inet6 2a01:cb18:8453:b200:109e:280f:fbb3:32b2/64 scope global temporary dynamic 
       valid_lft 86391sec preferred_lft 591sec
    inet6 2a01:cb18:8453:b200:beae:c5ff:febe:bfac/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 86391sec preferred_lft 591sec
    inet6 fe80::beae:c5ff:febe:bfac/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

encore ipv6 et manuellment:

# sysctl -p /etc/sysctl.d/70-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.enp2s0.disable_ipv6 = 1
# ip ad                                       
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: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether bc:ae:c5:be:bf:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global dynamic noprefixroute enp2s0
       valid_lft 86289sec preferred_lft 86289sec

Merci pour vos retour

Précision: disable_ipv6=1 ne désactive pas l’IPv6 globalement mais uniquement sur les interfaces spécifiées (all=toutes les interfaces existantes, default=toute interface créée ultérieurement). Et c’est réversible.

Si, mais tu n’es pas forcément le seul à jouer avec les sysctl : apparement le gestionnaire de réseau le fait aussi. Il faut donc désactiver l’IPv6 pour cette interface dans ce dernier. Lequel utilises-tu ?

Inutile puisque tu mets déjà all et default à 1, ce qui couvre toutes les interfaces existantes et à venir (l’interface n’existe pas forcément au moment où le fichier est appliqué).

NetworkManager

Dans les paramètres de la connexion ethernet, il y a un onglet IPv6 contenant un réglage pour désactiver IPv6.

2 J'aime

je cherche le bon fichier de conf car j’utilise ansible

alors si quelqu’un trouve la config globale pour désactiver l’ipv6 avec NetworkManager…
je prends :slight_smile:

Peut-être ne cli avec nmcli comme ça :

nmcli connection modify ton interface ipv6.method « disabled »

Tu devrais sans doute trouvé quelque chose là-dedans :

Salut oui effectivement mais de suite un role pour faire cela…
je pensais plus à une conf comme ça :

# cat /etc/NetworkManager/conf.d/ipv6.conf 
[connection]
ipv6.method=disabled

un truc globale, sans nom d’interface… mais meme ça… ça ne marche pas!

la désactivation de l’ipv6: Il suffit d’ajouter ce paramètre dans GRUB_CMDLINE_LINUX dans /etc/default/grub et de ne pas oublier de faire update-grub et reboot ensuite.
GRUB_CMDLINE_LINUX="ipv6.disable=1"

Ca ne peux pas etre avec NetworkManager, car lui ne gère que des interfaces. Ce n’est pas lui qui gère réellement la pile réseau du noyau.

La configuration des interfaces gérées par NetworkManager n’est pas dans un fichier de conf au sens strict (qui serait dans /etc), elle doit être quelque part dans /var/lib/NetworkManager mais je ne suis pas sûr que ces fichiers doivent être modifiés autrement que via NetworkManager.

Attention quand même, ce paramètre désactive tous les services IPv6 du noyau et il y a un petit risque qu’une application qui fait appel à ces services ne fonctionne plus (même si elle n’a pas besoin de communiquer en IPv6).

Ca ne m’est jamais arrivé, si une appli ne fonctionne qu’avec l’IPv6 et que tu ne veux pas d’IPv6 alors tu n’as pas besoin de cette applciation

tu peux dire a NM de ne pas configurer la partie ipv6 et effectivement NM vient configurer la pile IP

les fichiers de conf de tes interfaces sont « aussi » dans:

/etc/NetworkManager/system-connections/

et tu peux les modifier a la main pas de problème!

sauf que l’IPv6 est toujours actif

dans le kernel oui mais pas sur ton interface

c’est simple tu fais un netstat -an tu verras si tu as de l’IPv6 de configuré ou pas

mais dans ce cas ce n’est pas de la desactivation.

on joue sur les mots là!

du tout en fait

J’avais écrit « même si elle n’a pas besoin de communiquer en IPv6 ».
D’autre part, une application peut utiliser une socket IPv6 même pour communiquer en IPv4 grâce aux adresses IPv6 mappées en IPv4. Exemple avec 192.168.0.1 :

$ telnet -6 ::ffff:192.168.0.1 21
Trying ::ffff:192.168.0.1...
Connected to ::ffff:192.168.0.1.

On peut vérifier avec ss ou netstat que c’est bien une socket IPv6 qui est utilisée :

$ ss -n46t
State   Recv-Q   Send-Q          Local Address:Port           Peer Address:Port
ESTAB   0        0      [::ffff:192.168.0.252]:46660  [::ffff:192.168.0.1]:21                         

J’aurais pu utiliser la notation IPv6 pure ::ffff:c0a8:1, mais c’est moins explicite et le résultat est le même.

Dans tous les cas, pour complétement désactiver ipv6 au boot, c’est la modification du grub, quelque soit le type d’utilisation ipv6.

Avec les noyaux actuels de Debian qui intègrent la fonction IPv6 en dur, oui, car le paramètre /sys/module/ipv6/parameters/disable est en lecture seule.

Lorsque la fonction IPv6 est en module comme c’était le cas d’anciennes versions de noyau Debian, une autre possibilité consiste à ne pas charger ce module. Et bien sûr si on compile son propre noyau, on peut désactiver la prise en charge de l’IPv6.