Comment passer en IPv6 ? AirPort et HE.net

Après une présentation générale de l’IPv6, voici un article plus technique sur ce que nous, administrateurs-systèmes, avons à faire sur nos parcs pour gérer correctement cette avancée.

Pour illustrer cet article, je vous propose un tutoriel expliquant comment configurer votre réseau personnel en IPv6 avec votre AirPort Extreme et les services gratuits d’Hurricane Electric.

Mais avant cela, encore un peu de théorie : comment comprendre les adresses IPv6 ?

Une adresse IPv6 est codée sur 128 bits (contre 32 pour les IPv4), soit 16 octets. La représentation humaine adoptée pour une adresse aussi longue est 8 blocs de 2 octets écris en hexadécimal séparé par des deux-points. Une adresse IPv6 ressemble donc à ceci : 2001:0db8:0000:85a3:0000:0000:ac1f:8001

Autant le dire, c’est assez dur à lire, mais il existe quelques moyens de simplifier cette écriture :

  • Les 0 en bits de poids fort peuvent être supprimé (tous les 0 les plus à gauche d’un bloc), :0db8: peut donc s’écrire :db8:
  • les blocs constitués exclusivement de 0 peuvent être représenté par un seul 0, :0000: peut donc être remplacé par :0:
  • lorsqu’il y a plusieurs blocs de 0 à la suite, ils peuvent être remplacé par deux deux-points à la suite, au lieu d’écrire :0:0: on écrira :: mais attention, cette notation ne peux exister qu’une fois dans l’écriture de l’adresse !

Notre adresse 2001:0db8:0000:85a3:0000:0000:ac1f:8001 donne donc 2001:db8:0:85a3::ac1f:8001, c’est déjà plus simple à écrire !

Voici d’autres exemples :

  • 2001:0db8:0000:0000:0000:0000:ac1f:8001 donne 2001:db8::ac1f:8001
  • 2001:0db8:0000:0000:85a3:0000:0000:8001 donne 2001:db8::85a3:0:0:8001 ou 2001:db8:0:0:85a3::8001 (n’oubliez pas que le symbole :: pour représenté un nombre inconnu de blocs de 0 consécutifs ne peut être utilisé qu’une fois !)

Deuxième chose à noter concernant l’IPv6, les masques sous-réseau ne sont plus du tout écrits sous forme décimale. En IPv4 il existait deux méthodes pour écrire les masques sous-réseau :

  • la version décimale : 255.255.255.0
  • la version CIDR où l’on exprime le nombre de bits à 1 dans le masque : /24

Si vous n’êtes pas à l’aise avec ces notions de masque sous-réseau, je vous recommande fortement de lire l’article associé sur Wikipedia.

En IPv6, seule la notation avec les / est retenu, vu la longueur des masques, c’est préférable…

Maintenant que vous savez lire une adresse IPv6, il est temps de vous montrer comment ça va marcher. Chaque connexion se verra attribué un « /64 » qu’on appellera un préfixe, ce sera les 64 premiers bits des adresses IP de vos machines sur votre réseau. Les 64 derniers représentant la partie machine pourront être déterminés de deux manières différentes :

  • via DHCP6, donc grosso modo de la même manière qu’aujourd’hui en IPv4, cela s’appelle de l’adressage « statefull »
  • via un adressage « stateless », la machine cherchant à se connecter utilisera son adresse MAC pour déterminer les 64 derniers bits

C’est sur cette dernière possibilité que je vais m’attarder, le stateless apporte une chose extra, il n’y a plus besoin de gérer son plan d’adressage réseau ! Chaque machine du sous-réseau trouvant son adresse automatiquement, il ne vous reste qu’à publier le préfixe de la connexion pour que ça fonctionne !

La question étant, comment publier ce préfixe ? C’est très simple, vos routeurs s’en chargent via le protocole Neighbor Discovery Protocol (NDP). Je dis vos routeurs, car si vous êtes connecté à plusieurs fournisseurs d’accès en même temps, il n’y a rien à faire, l’IPv6 est fait pour fonctionner d’origine avec plusieurs IP par interface réseau.

Ainsi d’origine vous aurez un minimum de deux adresses IP pour une interface :

yoanngini@yoann-laptop ~ 12:33 % ifconfig en1
en1: flags=8863 mtu 1500
	ether 00:23:6c:87:e6:9e
	inet6 fe80::223:6cff:fe87:e69e%en1 prefixlen 64 scopeid 0x5
	inet 172.16.42.115 netmask 0xffffff00 broadcast 172.16.42.255
	inet6 2001:470:26:357:223:6cff:fe87:e69e prefixlen 64 autoconf
	media: autoselect
	status: active

J’ai ici deux adresses IPv6, l’une commençant par fe80 et l’autre par 2001. L’adressage IPv6 possible est immense, aussi il a été classé en différent type d’adresse pour pouvoir s’y retrouver. En voici le résumé :

  • les adresses unicast routables sur internet : 2000::/3
  • les adresses locales uniques : fc00::/7
  • les adresses de lien local : fe80::/10
  • les adresses de multicast : ff00::/8
  • les adresses réservées ::/8

Les adresses unicast routables sont ce qu’en IPv4 on appelle à tord IP « public ».

Les adresses locales uniques (ULA) sont quant à elle un équivalent de nos adresses « privées » IPv4 à un détail près, chaque entreprise peut avoir un plan d’adressage interne unique. Les ULA fonctionnent sur le même principe que les unicast 2000::/3 sauf que le préfixe annoncé n’est pas routable sur Internet. Chaque entreprise déployant un plan d’adressage local unique peut enregistrer son préfixe sur un site dédié, si chacun joue le jeu, l’avenir ne connaitra plus de problèmes de conflit d’adressage lors de fusion de société, d’accès distant, etc.

Les adresses de lien local quant à elle sont des adresses limitées au sous-réseau et ne peuvent être routées entre deux sous réseau même hors Internet. Elles servent entre autres au NDP.

Une dernière chose à noter avant de passer à la suite. J’ai dit que chaque lien Internet aurait son /64 (ce qui sera le cas si tous les FAI jouent le jeu). Il y a également la possibilité donnée aux entreprises de demander l’allocation d’un /48 leur permettant ainsi de mieux segmenter leur réseau.

Maintenant que vous savez tout sur les types d’IPv6, il ne reste plus qu’à comprendre comment une machine calcul ses 64 derniers bits de son adresse. Le processus est très simple, chaque interface réseau dispose d’une adresse MAC qui est censée être unique, elle est codée sur 48 bits, il reste donc à la modifier pour qu’elle prenne 64 bits. Voici la marche à suivre :

  • Prendre l’adresse MAC de la machine : 00:23:6c:87:e6:9e
  • Rajoutez la valeur FFFE au milieu pour faire 4 blocs de deux octets : 0023:6cff:fe87:e69e
  • Assigner le bit de poids 2 du premier octet en partant de la gauche à 1 (son second bit en partant de la droite / du LSB, soit le 7e en partant de la gauche / du MSB) : 0223:6cff:fe87:e69e

Pour la petite histoire, la valeur FFFE semble être due à une erreur d’écriture dans la première publication de la documentation en question, cela n’a jamais été corrigé. Quant à l’inversion du bit de la dernière étape, il faut savoir que le premier octet d’une adresse MAC à une signification particulière au niveau de son bit 1 et 2. Le bit 1 indique lorsqu’il est à 1 le fait que l’adresse est une adresse de multicast, le bit 2 permet quant à lui de savoir si l’adresse est unique ou si elle est assignée à la main. Pour en savoir plus à ce propos, voir Wikipedia.

Il est également possible de choisir un système d’adressage utilisant des adresses tiré aléatoirement si l’usage de l’adresse MAC vous pose des problèmes de confidentialité. Vous pouvez également assigner vos adresses à la main ou en DHCPv6. L’usage du DHCP est à mon avis à éviter, cela fera toujours ça de moins à gérer. Par contre, l’adressage manuel dans le cas de serveur peut s’avérer intéressant pour pouvoir les reconnaitre facilement dans un fichier journal.

Laisser un commentaire