adresses ipv6 EUI64 Le sujet est résolu

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 152
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Bonsoir,

Je suis en train de monter un serveur et je voudrais que les 32 derniers bits de mes adresses soient générés à partir de l'adresse MAC de mon interface.

J'ai mis la ligne suivante dans /etc/sysctl.conf :

Code : Tout sélectionner

net.ipv6.conf.all.addr_gen_mode=0
pour forcer le mode EUI64 dans le kernel.

/etc/interfaces est vide.
/etc/NetworkManager/NetworkManager.conf contient manage=false dans la section [ifupdown]
systemd-networkd n'est pas activé.

Et ça ne marche pas.

Quelqu'un a une idée ?

Amicalement.

Jean-Marie
PascalHambourg
Contributeur
Contributeur
Messages : 876
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

diesel a écrit : 29 oct. 2022, 23:07 je voudrais que les 32 derniers bits de mes adresses soient générés à partir de l'adresse MAC
Les 64 bits de poids faible, tu veux dire ?
diesel a écrit : 29 oct. 2022, 23:07 net.ipv6.conf.all.addr_gen_mode=0
D'après /usr/share/doc/linux-doc/Documentation/networking/ip-sysctl.rst.gz, c'est déjà la valeur par défaut, donc pas sûr que ce soit utile.
diesel a écrit : 29 oct. 2022, 23:07 /etc/interfaces est vide.
Tu veux dire /etc/network/interfaces ?
Et /etc/network/interfaces.d/* ?
diesel a écrit : 29 oct. 2022, 23:07 /etc/NetworkManager/NetworkManager.conf contient manage=false dans la section [ifupdown]
Ce réglage n'a aucune influence sur la capacité de NetworkManager à gérer une interface non définie dans /etc/network/interfaces{,/*}. Et je soupçonne que NetworkManager applique ses propres réglages concernant la génération d'adresses IPv6 des interfaces qu'il gère.
diesel a écrit : 29 oct. 2022, 23:07 Et ça ne marche pas.
Cette phrase ne contient aucune information utile.
Tu sais que nous sommes des petits curieux et nous voulons tout savoir, notamment la sortie des commandes suivantes :

Code : Tout sélectionner

cat /etc/network/interfaces /etc/network/interfaces.d/*
IF=<interface> # remplacer <interface> par le vrai nom de l'interface, type enp0s2
/sbin/sysctl net.ipv6.conf.all.addr_gen_mode
/sbin/sysctl net.ipv6.conf.$IF.addr_gen_mode
ip -6 addr
nmcli device status
nmcli device show $IF
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 152
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Bonjour Pascal et merci pour ta réponse,

Tout d'abord, désolé pour les erreurs et imprécisions. Un peu fatigué lorsque j'ai écrit. :icon_e_wink: :icon_biggrin:

Oui, les 64 bits de poids faible et bien entendu /etc/network/interfaces.

Alors :

Code : Tout sélectionner

jean-marie@passerelle:/etc/network $ cat interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source /etc/network/interfaces.d/*

jean-marie@passerelle:/etc/network $ ls -al interfaces.d
total 8
drwxr-xr-x 2 root root 4096  4 nov.   2020 .
drwxr-xr-x 7 root root 4096 22 sept. 01:07 ..

jean-marie@passerelle:/etc/network $ /sbin/sysctl net.ipv6.conf.all.addr_gen_mode
net.ipv6.conf.all.addr_gen_mode = 0

jean-marie@passerelle:/etc/network $ /sbin/sysctl net.ipv6.conf.eth0.addr_gen_mode
net.ipv6.conf.eth0.addr_gen_mode = 1

jean-marie@passerelle:/etc/network $ ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2a01:e0c:c8e5:1234:14da:5265:eec:4791/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 86163sec preferred_lft 14163sec
    inet6 fe80::3f95:c09b:6b41:968b/64 scope link 
       valid_lft forever preferred_lft forever
       
jean-marie@passerelle:/etc/network $ nmcli device status
Erreur : NetworkManager n'est pas lancé.

jean-marie@passerelle:/etc/network $ nmcli device show eth0
Erreur : NetworkManager n'est pas lancé.

jean-marie@passerelle:/etc/network $
Les espaces entre les résultats de commandes et l'invite suivante ont été ajoutés à la main dans le message pour plus de lisibilité.

Ce qui ne "marche pas", c'est que je voudrais fe80::e65f:4cff:fe57:20c/64 au lieu de fe80::3f95:c09b:6b41:968b/64 et 2a01:e0c:c8e5:1432:e65f:4cff:fe57:20c/64 au lieu de 2a01:e0c:c8e5:1432:14da:5265:eec:4791/64.

Et ce qui me surprend, c'est la ligne : net.ipv6.conf.eth0.addr_gen_mode = 1, ce qui paraît logique au vu des adresses générées, mais très étrange au vu de la ligne net.ipv6.conf.all.addr_gen_mode=0 dans mon fichier /etc/sysctl.conf.

Amicalement.

Jean-Marie
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 152
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Pour faire bonne mesure, j'ai même ajouté la ligne net.ipv6.conf.eth0.addr_gen_mode=0 dans sysctl.conf et c'est pareil.

Il semble qu'il y ait un petit rigolo qui s'amuse, derrière, à changer ça. Mais qui ?

Amicalement.

Jean-Marie
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 152
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Histoire d'être certain que le kernel prend bien en compte les directives spécifiées dans le fichier sysctl.conf, j'ai changé la valeur pour net.ipv6.conf.all.addr_gen_mode (passée de 0 à 1).

Après un reboot, un /sbin/sysctl net.ipv6.conf.all.addr_gen_mode me renvoie bien la valeur 1.

Le problème n'est donc pas là.

Amicalement.

Jean-Marie
PascalHambourg
Contributeur
Contributeur
Messages : 876
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

diesel a écrit : 30 oct. 2022, 10:03 ce qui me surprend, c'est la ligne : net.ipv6.conf.eth0.addr_gen_mode = 1, ce qui paraît logique au vu des adresses générées
Pas vraiment. D'après la documentation du noyau :

Code : Tout sélectionner

addr_gen_mode - INTEGER
        Defines how link-local and autoconf addresses are generated.

        =  =================================================================
        0  generate address based on EUI64 (default)
        1  do no generate a link-local address, use EUI64 for addresses
           generated from autoconf
        2  generate stable privacy addresses, using the secret from
           stable_secret (RFC7217)
        3  generate stable privacy addresses, using a random secret if unset
        =  =================================================================
avec addr_gen_mode=1 il devrait y avoir une adresse autoconf basée sur l'EUI64 et pas d'adresse link-local. C'est que j'observe chez moi (après réception d'une annonce de routeur spontanée car sans adresse link-local impossible d'émettre une sollicitation de routeur).
Quelles versions de Debian et de noyau utilises-tu ?
As-tu regardé les valeurs des autres paramètres IPv6 de l'interface (autoconf, accept_ra...)

Ce qui m'étonne aussi, c'est que NetworkManager soit installé mais pas démarré. Tu l'as désactivé ?
Oui, il y a forcément quelque chose qui active et configure l'interface ethernet. Wicd, connman, dhcpd... As-tu regardé dans les processus ?
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 152
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Oui, dans systemd, j'ai désactivé tout ce que je pouvais :
networking.service
NetworkManager.service
systemd-networkd.service

Malgré cela, il y a encore un "machin" qui m'initialise le réseau.

Linux passerelle 5.15.61-v7l+ #1579 SMP Fri Aug 26 11:13:03 BST 2022 armv7l (C'est un raspberry pi 4 B).

Code : Tout sélectionner

jean-marie@passerelle:/proc/sys/net/ipv6/conf/eth0 $ for i in ./*;do echo -n "${i#./}=";cat $i;done
accept_dad=1
accept_ra=0
accept_ra_defrtr=1
accept_ra_from_local=0
accept_ra_min_hop_limit=1
accept_ra_mtu=1
accept_ra_pinfo=1
accept_ra_rt_info_max_plen=0
accept_ra_rt_info_min_plen=0
accept_ra_rtr_pref=1
accept_redirects=1
accept_source_route=0
addr_gen_mode=1
autoconf=1
dad_transmits=1
disable_ipv6=0
disable_policy=0
drop_unicast_in_l2_multicast=0
drop_unsolicited_na=0
enhanced_dad=1
force_mld_version=0
force_tllao=0
forwarding=0
hop_limit=64
ignore_routes_with_linkdown=0
ioam6_enabled=0
ioam6_id=65535
ioam6_id_wide=4294967295
keep_addr_on_down=0
max_addresses=16
max_desync_factor=600
mc_forwarding=0
mldv1_unsolicited_report_interval=10000
mldv2_unsolicited_report_interval=1000
mtu=1500
ndisc_notify=0
ndisc_tclass=0
proxy_ndp=0
ra_defrtr_metric=1024
regen_max_retry=3
router_probe_interval=60
router_solicitation_delay=1
router_solicitation_interval=4
router_solicitation_max_interval=3600
router_solicitations=-1
rpl_seg_enabled=0
seg6_enabled=0
stable_secret=cat: ./stable_secret: Permission non accordée
suppress_frag_ndisc=1
temp_prefered_lft=86400
temp_valid_lft=604800
use_oif_addrs_only=0
use_tempaddr=0

jean-marie@passerelle:/proc/sys/net/ipv6/conf/eth0 $

Code : Tout sélectionner

jean-marie@passerelle:/proc/sys/net/ipv6/conf/eth0 $ ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:03 /sbin/init
    2 ?        S      0:00 [kthreadd]
    3 ?        I<     0:00 [rcu_gp]
    4 ?        I<     0:00 [rcu_par_gp]
    5 ?        I<     0:00 [netns]
    8 ?        I      0:01 [kworker/u8:0-events_unbound]
    9 ?        I<     0:00 [mm_percpu_wq]
   10 ?        S      0:00 [rcu_tasks_rude_]
   11 ?        S      0:00 [rcu_tasks_trace]
   12 ?        S      0:00 [ksoftirqd/0]
   13 ?        I      0:00 [rcu_sched]
   14 ?        S      0:00 [migration/0]
   15 ?        S      0:00 [cpuhp/0]
   16 ?        S      0:00 [cpuhp/1]
   17 ?        S      0:00 [migration/1]
   18 ?        S      0:00 [ksoftirqd/1]
   21 ?        S      0:00 [cpuhp/2]
   22 ?        S      0:00 [migration/2]
   23 ?        S      0:00 [ksoftirqd/2]
   26 ?        S      0:00 [cpuhp/3]
   27 ?        S      0:00 [migration/3]
   28 ?        S      0:00 [ksoftirqd/3]
   31 ?        S      0:00 [kdevtmpfs]
   32 ?        I<     0:00 [inet_frag_wq]
   33 ?        I      0:00 [kworker/0:1-rcu_gp]
   35 ?        I      0:00 [kworker/2:1-events]
   37 ?        S      0:00 [kauditd]
   38 ?        S      0:00 [khungtaskd]
   39 ?        S      0:00 [oom_reaper]
   40 ?        I<     0:00 [writeback]
   41 ?        S      0:00 [kcompactd0]
   64 ?        I<     0:00 [kblockd]
   65 ?        I<     0:00 [blkcg_punt_bio]
   66 ?        S      0:00 [watchdogd]
   67 ?        I      0:00 [kworker/u8:1-events_unbound]
   68 ?        I<     0:00 [kworker/3:1H-kblockd]
   69 ?        I<     0:00 [rpciod]
   70 ?        I<     0:00 [kworker/u9:0]
   71 ?        I<     0:00 [xprtiod]
   73 ?        S      0:00 [kswapd0]
   74 ?        I<     0:00 [nfsiod]
   75 ?        I<     0:00 [kthrotld]
   76 ?        I      0:00 [kworker/3:2-events_power_efficient]
   79 ?        I      0:00 [kworker/0:2-events]
   80 ?        I<     0:00 [iscsi_eh]
   81 ?        I<     0:00 [iscsi_conn_clea]
   82 ?        I<     0:00 [nvme-wq]
   83 ?        I<     0:00 [nvme-reset-wq]
   84 ?        I<     0:00 [nvme-delete-wq]
   86 ?        S      0:00 [ptp0]
   87 ?        I<     0:00 [DWC Notificatio]
   88 ?        I<     0:00 [uas]
   89 ?        S<     0:00 [vchiq-slot/0]
   90 ?        S<     0:00 [vchiq-recy/0]
   91 ?        S<     0:00 [vchiq-sync/0]
   92 ?        I<     0:00 [zswap-shrink]
   93 ?        I<     0:00 [sdhci]
   94 ?        S      0:00 [irq/62-mmc0]
   95 ?        I      0:00 [kworker/1:2-events]
   96 ?        I<     0:00 [mmc_complete]
   97 ?        I<     0:00 [kworker/1:1H-kblockd]
   99 ?        S      0:00 [jbd2/mmcblk0p2-]
  100 ?        I<     0:00 [ext4-rsv-conver]
  102 ?        I<     0:00 [kworker/2:1H-kblockd]
  103 ?        I<     0:00 [kworker/2:2H]
  104 ?        I<     0:00 [mld]
  105 ?        I<     0:00 [ipv6_addrconf]
  119 ?        I<     0:00 [kworker/0:2H-mmc_complete]
  122 ?        I<     0:00 [kworker/3:2H]
  136 ?        I<     0:00 [kworker/1:2H-kblockd]
  143 ?        Ss     0:00 /lib/systemd/systemd-journald
  168 ?        Ss     0:00 /lib/systemd/systemd-udevd
  172 ?        Ss     0:00 /lib/systemd/systemd-networkd
  191 ?        S      0:00 [vchiq-keep/0]
  195 ?        S<     0:00 [SMIO]
  204 ?        I<     0:00 [mmal-vchiq]
  206 ?        I<     0:00 [mmal-vchiq]
  213 ?        I<     0:00 [mmal-vchiq]
  217 ?        I<     0:00 [mmal-vchiq]
  220 ?        I<     0:00 [mmal-vchiq]
  221 ?        I<     0:00 [mmal-vchiq]
  222 ?        S      0:00 [irq/75-feb10000]
  223 ?        I<     0:00 [mmal-vchiq]
  233 ?        S      0:00 [v3d_bin]
  234 ?        S      0:00 [v3d_render]
  236 ?        S      0:00 [v3d_tfu]
  237 ?        S      0:00 [v3d_csd]
  238 ?        S      0:00 [v3d_cache_clean]
  276 ?        Ssl    0:00 /lib/systemd/systemd-timesyncd
  295 ?        S      0:00 [irq/53-vc4 hdmi]
  296 ?        S      0:00 [irq/54-vc4 hdmi]
  297 ?        S      0:00 [cec-vc4]
  298 ?        S      0:00 [irq/50-vc4 hdmi]
  299 ?        S      0:00 [irq/49-vc4 hdmi]
  301 ?        S      0:00 [irq/59-vc4 hdmi]
  302 ?        S      0:00 [irq/60-vc4 hdmi]
  303 ?        S      0:00 [cec-vc4]
  304 ?        S      0:00 [irq/56-vc4 hdmi]
  305 ?        S      0:00 [irq/55-vc4 hdmi]
  306 ?        Ss     0:00 avahi-daemon: running [passerelle.local]
  307 ?        S      0:00 [card1-crtc0]
  308 ?        S      0:00 [card1-crtc1]
  309 ?        Ss     0:00 /usr/sbin/cron -f
  310 ?        S      0:00 [card1-crtc2]
  311 ?        Ss     0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
  313 ?        S      0:00 [card1-crtc3]
  314 ?        S      0:00 [card1-crtc4]
  315 ?        S      0:00 [card1-crtc5]
  323 ?        Ssl    0:00 /usr/libexec/polkitd --no-debug
  325 ?        S      0:00 avahi-daemon: chroot helper
  350 ?        Ssl    0:00 /usr/sbin/rsyslogd -n -iNONE
  354 ?        Ss     0:00 /lib/systemd/systemd-logind
  355 ?        Ss     0:00 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user nobody --deviceglob /dev/input
  356 ?        Ss     0:00 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
  403 ?        Ssl    0:00 /usr/sbin/ModemManager
  414 ?        SLsl   0:00 /usr/sbin/rngd -r /dev/hwrng
  424 tty1     Ss+    0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
  425 ?        Ss+    0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,57600,38400,9600 ttyAMA0 vt220
  428 ?        I<     0:00 [cfg80211]
  442 ?        Ss     0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
  462 ?        Ss     0:00 /usr/sbin/dhcpcd -w -q
  515 ?        Ss     0:00 sshd: jean-marie [priv]
  518 ?        Ss     0:00 /lib/systemd/systemd --user
  519 ?        S      0:00 (sd-pam)
  536 ?        R      0:00 sshd: jean-marie@pts/0
  537 pts/0    Ss     0:00 -bash
  566 ?        I<     0:00 [kworker/0:1H]
  674 ?        I      0:00 [kworker/1:1-events]
  675 ?        I      0:00 [kworker/2:2-events]
  676 ?        I      0:00 [kworker/3:1-mm_percpu_wq]
  678 ?        I      0:00 [kworker/1:0-mm_percpu_wq]
  691 ?        I      0:00 [kworker/2:0-events]
  692 ?        I      0:00 [kworker/3:0-events]
  693 pts/0    R+     0:00 ps ax
jean-marie@passerelle:/proc/sys/net/ipv6/conf/eth0 $
Amicalement.

Jean-Marie
PascalHambourg
Contributeur
Contributeur
Messages : 876
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

diesel a écrit : 31 oct. 2022, 13:44 C'est un raspberry pi 4 B
Si le système est Raspbian, alors le réseau est sûrement géré par dhcpcd (paquet dhcpcd5) à ne pas confondre avec le serveur DHCP dhcpd (paquet isc-dhcp-server).
diesel a écrit : 31 oct. 2022, 13:44

Code : Tout sélectionner

462 ?        Ss     0:00 /usr/sbin/dhcpcd -w -q
Bingo.
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 152
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Pascal, tu es le plus fort !

Dans systemd, j'ai désactivé le service dhcpcd et bing, plus de réseau après reboot.

Je vais remettre mon réseau en route avec systemd-networkd et j'espère qu'il va accepter ce que je veux lui faire faire.

Amicalement.

Jean-Marie
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 152
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

J'ai démarré systemd-networkd et ça fonctionne comme je veux. J'ai créé un fichier raspberry.network dans le répertoire /etc/systemd/network contenant :

Code : Tout sélectionner

[Match]
Name=*
[Network]
et c'est tout.

Ce que j'en comprends :

dhcpcd est un gestionnaire réseau à vocation desktop (au moins par défaut). C'est pour cela qu'il met en place une gestion d'adresses de type desktop (la même chose que ce que j'ai sur mon poste de travail).

Par défaut, systemd-networkd suit les réglages du kernel, ce qui donne une génération d'adresse de type EUI64 modifié.

Mon problème est donc résolu (et en prime, j'ai compris beaucoup de choses sur la gestion du réseau ; en particulier ipv6, sous linux).

Merci beaucoup Pascal.

Amicalement.

Jean-Marie
Répondre