Délégation de préfixes IPv6 avec la Livebox : expériences en profondeur

 x0r   11
livebox ipv6 dhcpv6-pd

Mise à jour du 7 août 2022 : la version 4.53.14 du firmware souffre des mêmes problèmes.

Un soir, j’ai été surpris de découvrir que la Livebox propose désormais une fonction de délégation de préfixes IPv6 dans son interface d’administration.

Capture d’écran de l’interface d’administration de la Livebox, montrant la nouvelle fonctionnalité appelée « Routage IPv6 »

C’est une fonction que j’attendais depuis très longtemps sur la Livebox, car sans elle, je ne pouvais pas avoir de connectivité IPv6 à cause de la configuration particulière de mon réseau. Au lieu de me fier directement à ma Livebox pour le routage, le pare-feu et le Wi-Fi, j’ai en effet choisi d’utiliser mes propres équipements au lieu de la box, et je n’utilise cette box que comme un pont entre le réseau délimité par mon propre routeur et le réseau d’Orange.

Après quelques heures passées à expérimenter, j’ai fini par être un peu déçu à cause de quelques limitations, selon moi injustifiées, imposées par la Livebox. Dans ce billet, je vous propose d’approfondir ce que j’ai déjà écrit sur Mastodon, avec quelques exemples, captures d’écran et captures réseau à l’appui. J’ai effectué mes tests sur une Livebox 4 ; les premiers ont été effectués avec la version 4.43.12 du firmware et des tests complémentaires pour préparer cet article avec la version 4.46.0, ma box ayant été subrepticement mise à jour (mais apparemment, les bugs seraient les mêmes).

La délégation de préfixes par DHCPv6

Le mécanisme de délégation de préfixes utilise une option DHCPv6, appelée IA_PD, spécifiée dans la RFC 3633. Un routeur souhaitant obtenir une délégation de préfixe (appelé requesting router dans la RFC, mais j’utiliserai ici le terme « routeur délégataire ») envoie un paquet DHCPv6 Solicit contenant, dans une ou plusieurs associations d’identité (IA), une option IA_PD. Le routeur délégant (delegating router) répond alors avec un DHCPv6 Advertise contenant elle aussi un ou plusieurs IA_PD par préfixe qu’il accepte de déléguer.

Orange utilise déjà la délégation de préfixes IPv6 dans son propre réseau pour attribuer les préfixes IPv6, des /56, aux abonnés. Donc si un routeur en aval de la Livebox peut demander des délégations de préfixes à la Livebox, on obtient une chaîne de délégation comme ceci :

  • pour le préfixe 2001:db8:af3c:5a00::/56, un routeur quelque part dans le réseau opérateur d’Orange est le routeur délégant et la Livebox est le routeur délégataire ;
  • pour le préfixe 2001:db8:af3c:5a82::/64, la Livebox est le routeur délégant et le routeur aval est le routeur délégataire.

Schéma illustrant la chaîne de délégation de préfixes IPv6 dans le cas d’un réseau où un routeur se trouve en aval de la Livebox.

Position du problème

La force des choses, c’est-à-dire, entre autres, ma passion pour l’informatique, ma méfiance vis-à-vis de certains appareils connectés que je présume être trop bavards, une certaine pandémie mais surtout une simple question d’hygiène informatique, m’a amené à découper mon réseau domestique en plusieurs VLAN : bureautique, multimédia (et autres bidules connectés), consoles de jeux, téléphonie sur IP, administration, labo d’expérimentation IPv6 et télétravail. Tous ces VLAN sont isolés entre eux et certains sont également isolés d’Internet.

En IPv4, parmi les plages d’adresses mises de côté par la RFC 1918 pour un usage privé, j’ai choisi un /16 que je découpe ensuite en /24 pour chacun de mes VLAN. En IPv6, il me faut idéalement un /64 par VLAN, donc le fait qu’Orange alloue un /56 par abonné est plutôt opportun. Bien que la Livebox réserve un des 256 /64 disponibles, cela me laisse tout de même la possibilité d’adresser 255 VLAN en IPv6, ce qui suffira amplement pour mes besoins.

Plus tôt, quand j’avais mis en place ma connectivité IPv6 en étant chez Free, j’avais un réseau beaucoup plus simple dans lequel je n’avais qu’un seul VLAN ; j’utilisais d’ailleurs un démon, ndppd, pour jouer le rôle de proxy NDP. Mais je souhaite écarter d’emblée cette solution, que je considère comme un honteux bidouillage qui oblige, par ailleurs, à utiliser des préfixes plus longs dans ses VLAN comme des /80, ce qui impose la mise en œuvre d’un serveur DHCPv6.

Les limitations de la Livebox en matière de délégation de préfixes

En passant une soirée à expérimenter avec la Livebox, j’ai pu trouver trois problèmes majeurs qui font obstacle, dans l’immédiat, à un déploiement généralisé d’IPv6 dans mon réseau : l’impossibilité de demander la délégation d’un préfixe plus court qu’un /64 ; l’impossibilité de choisir à l’avance le /64 à déléguer ; enfin, l’incapacité, pour la box, de déléguer correctement plus d’un /64 au même routeur délégataire lorsque ce dernier en demande plusieurs.

Déléguer un /56 ou un /60 ne fonctionne pas

Mon premier essai consistait à demander la délégation de mon /56 complet, c’est-à-dire 2001:db8:af3c:5a00::/56 dans le schéma d’exemple. Au lieu de cela, la Livebox me délègue un /64 que je n’ai pas choisi !

On le voit d’ailleurs bien dans l’interface d’administration de la Livebox : l’adresse MAC de mon routeur apparaît bien, mais pas le /56 que j’avais demandé. Sur le routeur délégataire, aucune des interfaces qui devait profiter des préfixes délégués par la Livebox n’a d’adresse IPv6, faute d’obtenir la délégation souhaitée. Donc demander un /56 ne marche pas.

Capture d’écran de l’interface d’administration, montrant que le préfixe
  2a01:cb04:743:8dc5::/64 a été délégué à l’équipement « gw », dont l’adresse
  MAC est 80:2A:A8:4C:39:66.

À première vue, il est assez logique qu’une demande de délégation de 2001:db8:af3c:5a00::/56 n’aboutisse pas : ce /56 correspond à la plage complète déléguée à la Livebox, or elle réserve déjà 2001:db8:af3c:5a00::/64.

Mais même demander un /60 ne fonctionne pas non plus : dans ce cas, la Livebox délègue obstinément un /64, au lieu de renvoyer une erreur. Il y a pourtant 15 préfixes /60 qui n’entrent pas en conflit avec le /64 réservé par la Livebox.

Rien n’empêche a priori la Livebox d’accepter de déléguer 2001:db8:af3c:5a00::/56 excepté 2001:db8:af3c:5a00::/64 : il est même possible d’exprimer cela grâce à une option DHCPv6 décrite dans la RFC 6603. Le routeur délégataire doit pour cela signaler la prise en charge de cette RFC dans son DHCPv6 Solicit. Or le client wide-dhcpv6, utilisé par mon routeur, ne le fait pas ; seul dhcpcd sait le faire.

J’ai donc cherché à savoir si la Livebox prend en charge cette option. Pour ce faire, j’ai pris une machine sous Linux, installé dhcpcd dessus, créé une interface virtuelle avec la commande ip link create dummy0 type dummy, puis préparé un fichier de configuration dhcpcd.conf avec le contenu suivant :

interface eth0 
  ia_pd 0/::/56 eth0/0 dummy0/1

J’ai alors lancé dhcpcd -6B -f /chemin/vers/dhcpcd.conf eth0, tout en étant connecté en Ethernet à ma Livebox, pendant que je capturais les paquets DHCPv6. Malgré la présence de l’indication de prise en charge de la RFC 6603 dans le DHCPv6 Solicit, la Livebox continue d’attribuer un /64 aléatoire.

C’est d’autant plus dommage que le souhait de disposer librement des sous-préfixes 2001:db8:a3fc:5a01::/64 à 2001:db8:a3fc:5aff::/64 est à mon avis le cas d’usage le plus répandu nécessitant la délégation de préfixes par la Livebox. Même disposer seulement d’un /60 m’aurait déjà permis de connecter en IPv6 seize VLAN, ce qui aurait été largement suffisant pour mon usage.

En l’état, cette mise en œuvre de la délégation de préfixes par la Livebox est déjà une opportunité manquée.

Pas de choix du préfixe délégué

Nous savons maintenant que la Livebox n’accepte de déléguer que des /64.

Sur l’interface d’administration de la box, il n’est pas possible de configurer à l’avance quels sous-préfixes la box peut déléguer : au lieu de cela, à chaque fois qu’un routeur délégataire demande un /64, il s’en voit attribuer un aléatoire par la box.

Ces préfixes ont l’air stables, c’est-à-dire que le même couple DUID/IAID donne le même préfixe ; mais attention, si on désactive puis réactive la fonction de délégation de préfixes sur la Livebox, tous les préfixes anciennement attribués sont oubliés et la box attribuera d’autres préfixes choisis au hasard pour le même couple DUID/IAID. Ou du moins, c’est ce qui est arrivé une fois : lorsque j’ai essayé de reproduire ce comportement, je n’y suis pas arrivé et la Livebox a attribué au même couple DUID/IAID le même /64. Quoi qu’il en soit, il manque cruellement d’options pour paramétrer plus finement les préfixes délégués.

Le caractère aléatoire des préfixes délégué n’est guère pratique quand on souhaite placer des serveurs dans une plage d’adresses ainsi déléguée : un préfixe imprévisible complique la publication de leurs adresses dans le DNS.

Pourtant, il est possible pour un routeur délégataire de demander la délégation d’un préfixe bien précis. Mais même quand l’option IA_PD du message DHCPv6 Solicit émis par le routeur délégataire désigne un préfixe qu’il souhaite obtenir, la Livebox n’en tient pas compte.

Au plus un /64 pour un équipement

Nous savons maintenant que la Livebox ne délègue que des /64 et qu’il est impossible de savoir à l’avance quels sont les préfixes qu’il distribue à chaque équipement. Au moins, elles devraient être relativement stables.

Dans un message DHCPv6, il est possible de demander la délégation de plusieurs préfixes, chacun identifiés par des IAID uniques (un IAID étant un entier non signé de 32 bits). Il serait donc normalement possible de contourner les précédentes limitations en demandant autant de délégations distinctes que de VLAN dans mon réseau.

J’ai donc essayé d’envoyer à la Livebox un DHCPv6 Solicit avec deux délégations, ayant les IAID respectifs 0 et 1. À première vue, ça a l’air de fonctionner, car je reçois bien deux préfixes /64 dans le DHCPv6 Advertise avec lequel la Livebox me répond.

Mais je suis alors tombé sur un autre bug de la Livebox : en passant d’un seul préfixe avec l’IAID 0 à deux préfixes avec les IAID 0 et 1, celui associé à l’IAID 0 perd toute connectivité à Internet (du moins, il ne m’est plus possible de pinger une autre machine en IPv6 avec) mais l’autre fonctionne.

En somme, quand un routeur délégataire demande plusieurs délégations de préfixes, toutes sont accordées, mais seule la dernière apparaissant dans le message DHCPv6 Solicit est routable. Impossible, donc, de faire router sept /64 en IPv6 par la Livebox vers mon routeur !

La fonction a-t-elle été testée ?

Je note aussi qu’il est impossible de désactiver la fonction. Après avoir décoché la case « Activer la délégation de préfixe IPv6 » puis cliqué sur « Enregistrer », j’avais fait un test en envoyant un DHCPv6 Solicit avec l’option IA_PD : la box répond quand même avec un IA_PD dans son DHCPv6 Advertise.

Ensuite, comme on peut le voir sur les captures d’écran plus haut dans ce billet, il semble que les informations affichées sur la page sont incomplètes : deux champs auraient dû afficher des informations d’adressage et de préfixes, mais ceux-ci n’apparaissent pas.

Conclusion

En l’état, la fonction de délégation de préfixes IPv6 telle que faite par la Livebox est un pas vers la bonne direction, mais sa mise en œuvre est encore loin d’être satisfaisante et ne me permet pas encore de relier mon réseau domestique à IPv6.

On dirait que la fonction a été développée à la va-vite, avec pour objectif de cocher une case sur une plaquette marketing avant tout, et sans tenir réellement compte des besoins et des cas d’utilisation de ce genre de fonctions. Le résultat est donc une bonne idée, mais insuffisamment testée, mal exécutée et à côté de la plaque. Dommage, parce que j’apprécie beaucoup qu’Orange ait la générosité de donner un /56 à chaque abonné !

Si je devais concevoir une fonction similaire sur une box d’opérateur, j’aurais prévu une interface de configuration permettant de lister précisément, pour un DUID donné, quels sont les préfixes à déléguer, IAID par IAID, avec une taille allant jusqu’au /56 (et si l’utilisateur sélectionne le /56, ce sera fait à l’exception du /64 réservé par la box, bien entendu). Cela permettrait de contrôler quels sont les routeurs ayant le droit de demander des délégations au sein de son réseau, mais aussi de savoir à l’avance qui obtient quoi. Ce serait par ailleurs plus simple à mettre en œuvre d’un point de vue technique, tout en étant moins susceptible d’avoir des bugs. Enfin, je pense que procéder ainsi couvrirait tous les cas d’usage possible d’une délégation de préfixes IPv6.

Bien sûr, d’aucuns me diront qu’il y a moult instructions sur des forums comme lafibre.info qui expliquent comment se passer de la Livebox. Mais c’est oublier que substituer un routeur tiers à la Livebox revient à mettre une croix sur la ligne téléphonique fixe, incluse dans l’abonnement et que j’utilise beaucoup ; et puisque j’ai déjà eu des problèmes quand j’ai été un peu trop curieux à propos de la téléphonie, ce n’est pas pour tout de suite. En attendant, il n’y a plus qu’à croiser les doigts pour qu’un jour, ces bugs soient corrigés.

Annexes

Captures réseau

Commentaires

Poster un commentaire

Bobii

Concernant la téléphonie, il est tout à fait possible de mettre la LB en aval de ton routeur qui remplace la LB et donc de conserver le tel.

Orsiris

Eh bien estimez vous heureux d'avoir une LB v5 qui permet de disposer du routage IPv6... Le prefix delegation sur une LB v6 ? Inexistant ! C'est honteux à mon sens, de faire en sorte que l'IPv6 soit aussi peu utilisable chez l'opérateur historique...

nscheffer

Merci bcp beaucoup cela m'a permis de mettre en place la délégation de prefixe sur un Fortigate avec deux Livebox (une 5 et une 6 Pro), c'était laborieux mais au final top !

Minikea

Bonjour,

J'essaye de mettre en place l'IPV6 sur mon installation domestique et il semble que la délégation de préfixe fonctionne (encore que je n'en voit pas forcément la preuve) mais si le routage semble fonctionner pour avoir internet en ipv6 depuis le LAN, l'inverse ne semble pas fonctionner: l'extérieur n'accède pas à mon serveur en ipv6. Il semble même que la LB ne transfère rien à mon routeur OpenWRT lorsque j'interroge une url en forçant ipv6 (curl -v -6 https://minikea.org/ ) le tcpdump sur le routeur openwrt ne voit rien passer avec l'ipv6 de mon serveur en destination. j'ai essayé avec une ipv6 fixe, une fournie par DHCP, et rien dans les deux cas. pas de problème en IPV4, mais c'est juste le NAT qui fonctionne.

installation : LiveBox5 <---> Routeur Linksys WRT1200AC (sous OpenWRT 19.07) <---> LAN pas de vlan

x0r

La Livebox filtre toutes les connexions IPv6 entrantes, qu’il y ait délégation de préfixes ou non. Avez-vous bien pensé à ajouter une règle dans le pare-feu IPv6 de la box ?

Il suffit normalement juste d’une règle pour autoriser tous les protocoles vers un équipement donné. Je mets ensuite toutes mes règles de filtrage sur le pare-feu en aval.

mixman68

hello,

Merci pour ces tests, je comprends mieux certains de mes bugs Force de constater qu'en décembre 2022 le bug de plusieurs PD pour un routeur est toujours présent.

Est il possible néanmoins de demander plusieurs PD depuis plusieurs devices différents. Si oui une chance que ça marche en LXC via un trunk sur un port réseau mais ça reste pas très propre..

x0r

Je n’ai pas testé, mais je pense qu’un contournement est en effet de ne jamais demander plus d’un /64 par adresse MAC.

Vin0x64

Hello Xur,

Merci pour cet article qui m'a permis de me mettre sur la voie et j'ai peut etre une solution à te proposer pour récupérer plus de préfix. Les tests que tu as fait semblent effectivement montrer que le dhcp de la box ne donne qu'un /64 à l'interface de ton routeur. En rajoutant une interface au routeur on arrive a récupérer un autre préfix. Du coup la solution que j'ai mise en place est la suivante (sous linux):

Création d'une interface de type macvlan attachée à la meme interface physique: /bin/ip link add macvlan1 link enp2s0 type macvlan mode bridge Puis lancement du dhclient sur cette interface.

-> Résultat cela permet de récuperer un 2e prefix, et il apparait bien dans l'interface de la livebox.

Voici a quoi ressemble le /etc/network/interfaces

iface macvlan1 inet dhcp pre-up /bin/ip link add macvlan1 link enp2s0 type macvlan mode bridge post-down /bin/ip link del macvlan1

iface macvlan1 inet6 dhcp accept_ra 1 request_prefix 1

x0r

Merci beaucoup pour la suggestion des MAC-VLAN, très intéressante ! Je n’ai pas exploré cette voie, mais ça a l’air de pouvoir marcher.

mixman68

A voir pour la macvlan pour la faire marcher avec vyatta (mon routeur)

En tout cas Orange a sorti une MAJ !! le préfixe est rempli désormais dans IPv6 Mais demander plusieurs c'est toujours KO

thomas

vous confondez mode bridge et délégation...

aucune livebox personnelle ne fait de bridge. il faut une offre entreprise. si vous voulez avoir un /56 direct sur le lan....

c'est normal et logique de déléguer un /64 au machine de lan, si la box reçoit un /56 sur le wan, c'est logique on ne peut pas avoir le même prefixe sur deux interfaces directement connectées.......

Poster un commentaire