Reconnaître des adresses IPv6
Comment reconnaître les adresses IPv6 d'une interface réseau ? Une approche pratique orientée sur l'interprétation des résultats de quelques commandes peut apporter des réponses. ifconfig, ipconfig, ip addr, ip link, ip neigh, net sh sont des commandes usuelles.
On parlera ici des différents type d'adresses IPv6 unicast ou multicast que l'on peut rencontrer couramment.
- Une adresse IPv6 est un identifiant unique de 128 bits notés en hexadécimal.
- Une adresse IPv6 est représentée en 8 mots de 4 hexas (16bits) séparés par des deux points.
- Une adresse IPv6 dispose dans 99% des cas d'un masque par défaut de 64 bits noté /64.
- Étendue d'une adresse IPv6 : le masque identifie la partie fixe d'une adresse qui identifie aussi le numéro de réseau de 64 bits. Les 64 bits derniers appelés identifiants d'interface identifient l'interface dans le réseau. A priori, plus de calcul de masque exotique. La consigne est contraire à celle conservatrice d'IPv4. Jusqu'au gaspillage, réalisez des connexions en IPv6 !
2001:0db8:00d6:3000:0000:0000:6700:00a5/64
Dans cet exemple le /64 correspond aux 64 premiers bits de l'adresse qui identifie le réseau. Les 64 derniers bits restant identifient l’hôte dans ce réseau.
Le résultat de la commande ipconfig sous Windows 8 illustre trois types d'adresses IPv6 unicast (à destination d'une seule interface) que vous allez nécessairement rencontrer dans votre réseau :
- Link-Local,
- Global Unicast et
- Unique Local.
Microsoft Windows [Version 6.3.9600] (c) 2013 Microsoft Corporation. All rights reserved. C:\Users\User1>ipconfig Windows IP Configuration Ethernet adapter Ethernet0: Connection-specific DNS Suffix . : lan.org IPv6 Address. . . . . . . . . . . : 2001:db8:acaf:fd00::2ae IPv6 Address. . . . . . . . . . . : 2001:db8:acaf:fd00:b48a:c5e2:e5a3:1f3e IPv6 Address. . . . . . . . . . . : fd26:44e1:8c70:fd00::2ae IPv6 Address. . . . . . . . . . . : fd26:44e1:8c70:fd00:b48a:c5e2:e5a3:1f3e Temporary IPv6 Address. . . . . . : 2001:db8:acaf:fd00:61a9:365c:2d95:898 Temporary IPv6 Address. . . . . . : fd26:44e1:8c70:fd00:61a9:365c:2d95:898 Link-local IPv6 Address . . . . . : fe80::b48a:c5e2:e5a3:1f3e%3 IPv4 Address. . . . . . . . . . . : 192.168.1.195 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : fe80::12fe:edff:fee5:a266%3 192.168.1.1
On préférera franchement la commande "netsh interface ipv6 show address" plus précise.
C:\Users\user1>netsh int ipv6 show add Interface 3: Ethernet0 Addr Type DAD State Valid Life Pref. Life Address --------- ----------- ---------- ---------- ------------------------ Dhcp Preferred 23h15m46s 23h15m46s 2001:db8:acaf:fd00::2ae Temporary Preferred 1h53m48s 23m48s 2001:db8:acaf:fd00:61a9:365c:2d95:898 Public Preferred 1h53m48s 23m48s 2001:db8:acaf:fd00:b48a:c5e2:e5a3:1f3e Dhcp Preferred 23h15m46s 23h15m46s fd26:44e1:8c70:fd00::2ae Temporary Preferred 1h53m48s 23m48s fd26:44e1:8c70:fd00:61a9:365c:2d95:898 Public Preferred 1h53m48s 23m48s fd26:44e1:8c70:fd00:b48a:c5e2:e5a3:1f3e Other Preferred infinite infinite fe80::b48a:c5e2:e5a3:1f3e%3
Sur votre connexion domestique ou professionnelle vous pourriez compter sept adresses IPv6 comme ici, voire plus encore. Quelles sont-elles ?
1. Adresse IPv6 unicast Link-Local
On identifiera en premier lieu une adresse Link-Local, obligatoire sur chaque interface activée en IPv6; elle est générée automatiquement et elle est censée être unique sur le lien. On la reconnaît par son préfixe fe80::/10. Cette destination est purement locale sur la liaison de l'interface. Les routeurs IPv6 ne transfèrent pas cette destination. Ici pour cette interface Ethernet0 dont l'identifiant d'interface est généré de manière aléatoire par Windows :
fe80::b48a:c5e2:e5a3:1f3e%3
Quel est leur usage ? On peut les comparer légèrement aux adresses APIPA 169.254.0.0/16. Mais Neighbor Discovery (ND) indispensable au fonctionnement d'IPv6, DHCPv6 (à des fins de gestion), les protocoles de routage utilisent ces adresses. Leur usage est devenu un standard. On peut aussi les utiliser pour héberger un service local ou pour faire du diagnostic ICMPv6. Attention, une interface ne peut pas fonctionner sans disposer d'une telle adresse Link-Local !
Aussi, on remarquera le modulo % suivi du chiffre 3. Cette valeur identifie dans Windows l'interface ethernet0 sur mon PC. En effet, sur un ordinateur ou un routeur disposant de plusieurs interfaces, on trouvera le même bloc IPv6 fe80::/64 utilisé par plusieurs interfaces qui ne transfèrent pas ce trafic. Elles sont nécessairement associées par les systèmes avec leur interface de sortie. On trouvera plus bas un exemple avec une sortie Linux.
2. Adresse IPv6 unicast Global Unicast
Ensuite on identifiera plusieurs adresses Global Unicast, soit l'équivalent de nos adresses IPv4 publiques. On les définira plus précisément comme des destinations publiées sur l'Internet. Les routeurs transfèrent le trafic vers ces destinations. Elles sont donc "globalement routables". On les identifie par une valeur comprise entre 0x2000 à 0x3FFF sur les 4 premiers hexas de l'adresse. On remarquera qu'elles partagent ici le préfixe 2001:db8:acaf:fd00::/64. La première a été attribuée de manière arbitraire par un service DHCPv6. Les deux suivantes sont des adresses dont l'identifiant d'interface a été généré aléatoirement.
2001:db8:acaf:fd00::2ae 2001:db8:acaf:fd00:b48a:c5e2:e5a3:1f3e 2001:db8:acaf:fd00:61a9:365c:2d95:898
Si l'on s'attarde sur les deux dernières adresses générées de manifestement de manière aléatoire, elles disposent de durées de vie limitées. L'une, la publique, sert de destination venant de l'Internet (activez et mettez à jour vos pare-feux IPv6); l'autre, la temporaire sert toujours comme adresse d'origine du trafic de l'interface pour le trafic à destination de l'Internet. Dans ce cas, l'adresse attribuée par DHCPv6 ne peut servir que comme adresse de destination. Je l'ai implémentée ici à des fins de gestion (résolution dynamique de noms).
3. Adresse IPv6 unicast Unique Local (ULA)
De la même manière on identifiera un troisième type d'adresses : Unique Local Address (ULA). Comparables aux adresses privées IPv4 RFC1918 10.0.0.0/8, 172.16.0.0/12 et 192.168.0.0/16 dans le sens où elles ne sont pas routables, elles ne connaissent pas destination sur l'Internet. On les reconnait par leur préfixe FD00::/8 dont les 56 bits suivants ont été générés aléatoirement. Cet adressage privé IPv6 est censé être unique afin d'éviter un chevauchement d'adresses identiques à chaque extrémité d'une connexion VPN par exemple.
fd26:44e1:8c70:fd00::2ae fd26:44e1:8c70:fd00:b48a:c5e2:e5a3:1f3e fd26:44e1:8c70:fd00:61a9:365c:2d95:898
Quel pourrait être leur usage au XXIe siècle avec un adressage global IPv6 aussi large ? On peut les utiliser pour identifier des destinations privées entre des sites distants entre Paris et Lille, entre Bruxelles et Londres ou entre le bâtiment de la rue du commerce et celui du Boulevard du Nord ... à travers des connexions dédiées ou Internet sécurisées par IPSEC ....
Imaginer du NAT66 (traduction d'IPv6 vers IPv6) me semble toujours une idée aussi saugrenue. Evidemment, ...
Dans notre exemple, on trouve trois adresses IPv6 ULA : un adresse attribuée par un service DHCPv6 et deux aléatoires.
On remerciera les concepteurs de Microsoft Windows et Apple Mac OSX d'offrir une implémentation aussi complète d'IPv6.
Pour compléter le propos, on ne manquera pas d'observer les paramètres acquis par une station Linux Debian qui offre un service plus "standard" dans les mêmes conditions :
root@debian:~# ifconfig eth0 Link encap:Ethernet HWaddr b8:27:eb:59:70:f3 inet adr:192.168.1.119 Bcast:192.168.1.255 Masque:255.255.255.0 adr inet6: fd26:44e1:8c70:fd00:ba27:ebff:fe59:70f3/64 Scope:Global adr inet6: fe80::ba27:ebff:fe59:70f3/64 Scope:Lien adr inet6: 2001:db8:acaf:fd00:ba27:ebff:fe59:70f3/64 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:93310 errors:0 dropped:49 overruns:0 frame:0 TX packets:76990 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:11548535 (11.0 MiB) TX bytes:14021689 (13.3 MiB) lo Link encap:Boucle locale inet adr:127.0.0.1 Masque:255.0.0.0 adr inet6: ::1/128 Scope:Hôte UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:17546 errors:0 dropped:0 overruns:0 frame:0 TX packets:17546 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:1199358 (1.1 MiB) TX bytes:1199358 (1.1 MiB)
On trouvera sur cet ordinateur deux interfaces eth0 et lo. La sortie donne la portée de chaque adresse IPv6.
3.1. identifiant d'interface MAC-EUI64
L'interface eth0 connectée au réseau local ne démarre pas par défaut un client DHCPv6, ce n'est pas erreur. Sur cette interface, on trouvera les trois types d'adresses. Pour chacune, l'identifiant d'interface est identique. Il est généré par la méthode MAC-EUI64 (méthode par défaut). MAC-EUI64 est une méthode standardisée qui vise à obtenir un identifiant d'interface de 64 bits à partir d'une adresse MAC de 48 bits. Aussi, ce n'est pas une erreur mais le comportement par défaut.
fe80::ba27:ebff:fe59:70f3 2001:db8:acaf:fd00:ba27:ebff:fe59:70f3 fd26:44e1:8c70:fd00:ba27:ebff:fe59:70f3
Avez-vous perçu le souci de confidentialité ? On retrouve l'adresse MAC de l'interface dans l'identifiant d'interface de cette adresse. Cette portion significative de l'adresse permet d'identifier de manière certaine l'interface quel que soit son préfixe. De plus, les 24 premiers bits de l'adresse MAC (ici b8:27:eb) identifie le matériel; à vous de le retrouver.
Soit la méthode MAC-EUI64 insère 16 bits manquants FFFE après les 24 premiers bits de l'adresse MAC (OUI) dont le 7e bit a été inversé :
de b8:27:eb:59:70:f3, on passe à ba27:ebff:fe59:70f3
Il est possible de modifier ce comportement par défaut quelque soit le système d'exploitation.
3.2. Adresse IPv6 unicast de bouclage (loopback)
On distinguera enfin la notion d'interface de bouclage et de celle d'adresse de bouclage. L'interface lo ne dispose pas d'adresse IPv6 Link-Local : elle ne peut d'ailleurs communiquer qu'avec elle-même. En IPv6, le bouclage indispensable aux systèmes d'exploitation est adressé par une seule adresse spéciale ::1/128.
4. Comment tout cela fonctionne-t-il ?
Comment les adresses parviennent-elles à se configurer toutes seules ? Le routeur du réseau local envoie régulièrement des messages Neighbor Discovery (ND) ICMP type 139, appelé des Router Advertisments qui poussent ces paramètres de configuration auprès des machines du réseau local. C'est le routeur IPv6 qui configure le réseau et de manière très fine. Les interfaces s'autoconfigurent selon la méthode SLAAC qui implique un trafic Neighbor Discovery (ND) de vérification avec l'usage des adresses Link-Local et du Multicast.
Si le Broadcast disparait, ARP est remplacé par ND (ICMPv6). Ce n'est pas anodin et cette nouveauté mérite attention.
DHCPv6 est un nouveau protocole qui se décline en deux formules (avec et sans état) et qui peut se combiner à la méthode SLAAC. Cette dernière est juste activée par défaut sur tout hôte IPv6. L'usage de DHCPv6 nécessite un logiciel client DHCPv6 (déjà présent sous Windows et Mac). Il est conseillé d'utiliser pleinement DHCPv6 dans un réseau bien géré.
Enfin, c'est sans parler des comportements et configurations particulières sur Cisco IOS ou autres ou encore des stratégies et techniques de transition, DNS, la sécurité, le développement de code avec de l'IPv6.
5. Multicast
La seconde catégorie d'adresses IPv6 sont les adresses Multicast, à destinations de certaines interfaces sensibles à une adresse dans laquelle elles se reconnaissent. Pour ce faire, on dit qu'un interface est inscrite dans un groupe Multicast. Une adresse Multicast est une seule adresse de destination à laquelle répondent une ou plusieurs interfaces. Une des intentions du Multicast est remplacer le broadcast (disparu en IPv6) qui identifie toutes les hôtes du réseau. Le trafic Multicast est traduit par une adresse MAC 33:33:00 sera traité par les commutateurs comme du trafic de broadcast. Une optimisation consisterait à déployer des protocoles qui permettent d'identifier les ports inscrits dans des groupes. Toutefois, il semblerait que le nombre de groupes dans lequel s'inscrit chaque interface IPv6 ne permettrait pas aux commutateurs actuels de tenir la charge.
On trouvera deux types d'adresses Multicast :
- Les adresses IPv6 Well-Know Multicast, connues d'avance, qui identifie des services bien connus
- Les adresses IPv6 Solicited-Node Multicast, qui servent à joindre une interface dont on veut connaître l'adresse MAC (Neighbor Solicitation).
La commande "netsh interface ipv6 show joins" nous présente les groupes Multicast auxquels l'interface ethernet0 a souscrit :
C:\Users\User1>netsh int ipv6 show joins Interface 3: Ethernet0 Scope References Last Address ---------- ---------- ---- --------------------------------- 0 0 No ff01::1 0 0 No ff02::1 0 4 Yes ff02::c 0 1 Yes ff02::1:3 0 2 Yes ff02::1:ff00:2ae 0 0 No ff02::1:ff3f:62e6 0 2 Yes ff02::1:ff95:898 0 3 Yes ff02::1:ffa3:1f3e
On reconnait les adresses Multicast par leur préfixe ff00::/16.
5.1. Well-Know Multicast
- ff01::1 : tous les noeuds, ff02::1: tous les noeuds sur le réseau local,
- ff02::c : SSDP (UPnP sous Windows)
- et ff02::1:3 : Link-local Multicast Name Resolution
5.2 Solicited-Node Multicast
Elle sert à joindre une interface dont on veut connaître l'adresse de couche 2. En IPv4, les tables ARP sont remplies grâce à des messages ARP Request directement adressés en adresse MAC de broadcast FF:FF:FF:FF:FF:FF. En IPv6 c'est ICMPv6 avec des messages Neighbor Solicitation qui remplit cette fonction. Etant donné que le broadcast n'existe plus en IPv6, quelle adresse utiliser pour désigner en IPv6 et en adresse L2 l'hôte de destination ?
Une adresse IPv6 Solicited-Node est composée de 104 bits de préfixe compléter des 24 derniers bits de l'adresse IPv6 à joindre.
Si l'adresse à joindre est 2001:db8:acaf:fd00::2ae ou fd26:44e1:8c70:fd00::2ae alors l'adresse multicast correspondante est ff02::1:ff00:2ae.
Dans notre exemple, les 4 adresses IPv6 Solicited-Node Multicast correspondent :
- à l'adresse lien local
- aux adresses attribuées par DHCPv6
- aux adresses autoconfigurées publiques
- aux adresses autoconfigurées temporaire
Aucun commentaire:
Enregistrer un commentaire