Autoconfiguration IPv6 sous Linux

L’autoconfiguration des interfaces sous IPv6 c’est quelque chose de très pratique pour Mme Michu,mais pas pour l’administrateur d’un firewall !

Habituellement sous Linux c’est assez simple,au lieu d’activer le DHCP,il suffit de rentrer la configuration IP statique et le tour est joué. En IPv6 ce n’est hélas pas aussi simple. L’autoconfiguration est activée par défaut (logique),mais tourne toujours même si on configure une addresse IPv6 statique…

Voilà ce qui arrive si on met une conf similaire à ce qui suit:

iface eth1 inet static  address 192.168.0.22  netmask 255.255.255.0  gateway 192.168.0.1iface eth1 inet6 static  address xxxx:yyyy:zzzz:tttt::22  netmask 112  gateway xxxx:yyyy:zzzz:tttt::1

Un petit restart de la couche réseau,et on se retrouve avec:

# ip -6 addr show dev eth02:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qlen 1000  inet6 xxxx:yyyy:zzzz:tttt:218:39ff:fec0:445a/64 scope global dynamic   valid_lft 85572sec preferred_lft 85572sec  inet6 address xxxx:yyyy:zzzz:tttt::22/112 scope global   valid_lft forever preferred_lft forever  inet6 fe80::218:39ff:fec0:445a/64 scope link  valid_lft forever preferred_lft forever

J’ai bien mon IP statique (en vert),mais j’ai aussi cette saleté d’IP dynamique qui apparaît (en rouge) dès la réception d’un RA de la Freebox.

Un petit tour du côté de /proc/sys/net/ipv6/conf et on découvre qu’il y a plusieurs paramètres pour gérer ces RA:

  • accept_ra:pour traiter ou non les RA
  • accept_ra_pinfo:pour s’autoconfigurer sur réception d’un préfixe IPv6
  • autoconf:pour activer ou non l’autoconfiguration

Donc on y va,un petit coup de sysctl.conf pour ajouter les lignes suivantes:

net.ipv6.conf.all.autoconf=0net.ipv6.conf.all.accept_ra=0net.ipv6.conf.default.autoconf=0net.ipv6.conf.default.accept_ra=0

Un petit reboot…et….ça ne marche pas ! Quelques heures de Googlisme plus tard,on découvre qu’on n’est pas le seul à vouloir faire de l’IPv6 proprement (visiblement y’a pas grand monde,preuve du déploiement massif d’IPv6…) et à avoir rencontré le problème:

http://kerneltrap.org/mailarchive/linux-netdev/2009/2/24/5017964/thread

Et oui,apparemment y’a du bug dans l’air,le « all »n’écrase pas le paramétrage de toutes les interfaces,tout comme le default.

En attendant que ça se corrige,et bien il faut paramétrer à la main l’interface concerné,on remplace donc « all »par « eth0″dans mon cas…

net.ipv6.conf.eth0.autoconf=0net.ipv6.conf.eth0.accept_ra=0

Et ce coup-ci ça fonctionne ! Tout du moins sur mes 2 machines Ubuntu,parce qu’avec OpenWRT sur mon WRT54G j’ai toujours cette fichu interface eth0 (bien qu’inutilisée normalement) s’autoconfigure toujours,même avec tout le paramétrage kernel qui va bien. On va donc devoir passer par un script de démarrage et de l’ »ip addr flush »pour nettoyer tout ça…

2 comments to Autoconfiguration IPv6 sous Linux

  • jacota

    Après m’être également cassé la tête un bon moment sur le même problème (visiblement faire les choses proprement devient de plus en plus rare…du moment que ça marche :) voici la solution la plus propre que j’aie trouvé:

    dans /etc/network/interfaces:

    pre-up sysctl -w net.ipv6.conf.all.forwarding=1
    up sysctl -w net.ipv6.conf.eth0.autoconf=0
    up sysctl -w net.ipv6.conf.eth0.accept_ra=0
    up sysctl -w net.ipv6.conf.eth0.accept_redirects=0
    up sysctl -w net.ipv6.conf.eth0.router_solicitations=0
    up sysctl -w net.ipv6.conf.all.forwarding=0
    address 2001:xxxx:yyyy:1a::a
    netmask 64
    gateway 2001:xxxx:yyyy:1a::1

    En gros,ça donne ça:
    - le pre-up passe en mode routeur ce qui fait que l’interface monte et n’accepte pas les RA
    - ensuite,vu que l’interface est « up »,on peut aller changer les paramètres spécifiques à l’interface (pas possible si interface down)
    - enfin on désactive le mode routeur

    Ainsi un reboot et un ifconfig plus tard,on se rend compte qu’on a seulement l’adresse Link-Local et l’adresse Globale voulue.

  • Effectivement j’en étais arrivé à quelque chose comme ça.

    J’espère que les discussions côté Kernel avanceront et qu’on finira par avoir quelque chose de propre.

    Maintenant je n’ai plus le problème étant donné que mon routeur OpenWRT est en place et qu’il n’envoie pas de RA aux stations.

    Hélas OpenWRT n’utilise pas les ifup/ifdown et le fichier interface de Debian/Ubuntu.
    Etant donné que le support d’IPv6 n’est que partiel sur OpenWRT,je n’ai pas eu d’autre choix pour le routeur que de faire un script de démarrage qui fasse proprement la configuration réseau souhaitée ainsi que l’activation des règles firewall IPv6.

Laisser un commentaire