ad4

Libellés

ad7

Translate - traduction

lundi 16 mars 2015

Reconnaître des adresses IPv6

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.
Reconnaître des adresses IPv6

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