4.3. Les programmes de test/déboguage prêts pour IPv6

Après avoir préparé votre système pour IPv6, vous voudrez établir des communications en utilisant IPv6. Vous devriez d'abord apprendre comment examiner les paquets IPv6 avec un programme dit ”renifleur” (un sniffer). Cela est fortement conseillé, car cela peut aider à fournir très rapidement un diagnostic en cas de déboguage/dépannage.

4.3.1. ping IPv6

Ce programme est normalement inclus dans le paquetage iputils. Il est conçu pour réaliser de simples tests du transport en émettant des paquets de requête d'écho (echo-request) ICMPv6 et en attendant les paquets de réponse en écho (echo-reply) ICMPv6.

Usage

# ping6 <hôteavecadresseipv6>
# ping6 <adresseipv6>
# ping6 [-I <périphérique>] <adresseipv6-lien-local>

Exemple

# ping6 -c 1 ::1 
PING ::1(::1) from ::1 : 56 data bytes 
64 bytes from ::1: icmp_seq=0 hops=64 time=292 usec

--- ::1 ping statistics --- 
1 packets transmitted, 1 packets received, 0% packet loss 
round-trip min/avg/max/mdev = 0.292/0.292/0.292/0.000 ms

Info: ping6 a besoin d'un accès brut à la socket, il faut donc les permissions root. Par conséquent, s'il n'y a pas d'utilisateur root pouvant utiliser ping6, deux problèmes peuvent se poser ici:

  1. ping6 n'est pas sur le chemin de l'utilisateur (probablement, car ping6 est généralement stocké dans /usr/sbin -> ajouter au chemin (pas vraiment recommandé)

  2. ping6 ne s'exécute pas proprement, généralement, c'est qu'il y a des permissions root manquantes -> chmod u+s /usr/sbin/ping6

4.3.1.1. Spécifier une interface à ping IPv6

En spécifiant uniquement une adresse lien-local à ping IPv6, le noyau ne sait pas par quel périphérique (physique ou virtuel) il doit émettre le paquet - chaque périphérique a une adresse lien-local. Un essai aura pour résultat un message d'erreur:

# ping6 fe80::212:34ff:fe12:3456 
connect: Invalid argument

Dans ce cas vous devez en plus spécifier l'interface comme ci-dessous:

# ping6 -I eth0 -c 1 fe80::2e0:18ff:fe90:9205 
PING fe80::212:23ff:fe12:3456(fe80::212:23ff:fe12:3456) from
¬ fe80::212:34ff:fe12:3478 eth0: 56 data bytes 
64 bytes from fe80::212:23ff:fe12:3456: icmp_seq=0 hops=64 time=445 usec

--- fe80::2e0:18ff:fe90:9205 ping statistics --- 
1 packets transmitted, 1 packets received, 0% packet loss round-trip
¬ min/avg/max/mdev = 0.445/0.445/0.445/0.000 ms

4.3.1.2. Ping6 et les adresses multicast

Un mécanisme intéressant pour détecter les hôtes IPv6 actifs sur un lien est de lancer ping6 sur l'adresse multicast lien-local tous-noeuds (all-node):

# ping6 -I eth0 ff02::1
PING ff02::1(ff02::1) from fe80:::2ab:cdff:feef:012356 eth0: 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.104 ms
64 bytes from fe80::212:34ff:fe12:3450: icmp_seq=1 ttl=64 time=0.549 ms (DUP!) 

A la différence d'IPv4, où les réponses à un ping sur l'adresse de diffusion (broadcast) peuvent être rendues indisponibles, en IPv6, ce comportement ne peut pas être actuellement rendu indisponible, sauf par un pare-feu IPv6 local.

4.3.2. traceroute6 IPv6

Ce programme est normalement inclus dans le paquetage iputils. C'est un programme similaire au traceroute d'IPv4. En voici un exemple:

# traceroute6 www.6bone.net 
traceroute to 6bone.net (3ffe:b00:c18:1::10) from 3ffe:ffff:0000:f101::2, 30
¬ hops max, 16 byte packets 
 1 localipv6gateway (3ffe:ffff:0000:f101::1) 1.354 ms 1.566 ms 0.407 ms 
 2 swi6T1-T0.ipv6.switch.ch (3ffe:2000:0:400::1) 90.431 ms 91.956 ms 92.377 ms 
 3 3ffe:2000:0:1::132 (3ffe:2000:0:1::132) 118.945 ms 107.982 ms 114.557 ms 
 4 3ffe:c00:8023:2b::2 (3ffe:c00:8023:2b::2) 968.468 ms 993.392 ms 973.441 ms 
 5 3ffe:2e00:e:c::3 (3ffe:2e00:e:c::3) 507.784 ms 505.549 ms 508.928 ms 
 6 www.6bone.net (3ffe:b00:c18:1::10) 1265.85 ms * 1304.74 ms

Note: à la différence de certaines versions contemporaines du traceroute d'IPv4, qui peuvent utiliser les paquets de requête d'écho ICMPv4 aussi bien que les paquets UDP (défaut), l'actuel traceroute IPv6 ne peut qu'émettre des paquets UDP. Comme vous le savez peut-être, les paquets de requête d'écho ICMP sont mieux acceptés par les pare-feu ou les ACL sur les routeurs intermédiaires que les paquets UDP.

4.3.3. tracepath6 IPv6

Ce programme est normalement inclus dans le paquetage iputils. C'est un programme comme traceroute6, il trace le chemin vers une destination donnée, découvrant la MTU le long de ce chemin. En voici un exemple:

# tracepath6 www.6bone.net 
 1?: [LOCALHOST] pmtu 1480 
 1: 3ffe:401::2c0:33ff:fe02:14 150.705ms 
 2: 3ffe:b00:c18::5 267.864ms 
 3: 3ffe:b00:c18::5 asymm 2 266.145ms pmtu 1280 
 3: 3ffe:3900:5::2 asymm 4 346.632ms 
 4: 3ffe:28ff:ffff:4::3 asymm 5 365.965ms 
 5: 3ffe:1cff:0:ee::2 asymm 4 534.704ms 
 6: 3ffe:3800::1:1 asymm 4 578.126ms !N 
Resume: pmtu 1280

4.3.4. tcpdump IPv6

Sur Linux, tcpdump est l'outil majeur pour la capture de paquets. Vous allez trouver ci-dessous quelques exemples. Le support IPv6 est normalement intégré aux éditions actuelles de la version 3.6.

tcpdump utilise des expressions pour filtrer les paquets, minimisant le bruit:

Certaines options en ligne de commande sont très utiles pour capter et afficher plus d'information concernant les paquets, essentiellement intéressant pour approfondir l'information des paquets ICMPv6:

4.3.4.1. Ping IPv6 vers l'adresse native 3ffe:ffff:100:f101::1 sur un lien-local

# tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6 
tcpdump: listening on eth0 
3ffe:ffff:100:f101:2e0:18ff:fe90:9205 > 3ffe:ffff:100:f101::1: icmp6: echo
¬ request (len 64, hlim 64) 
3ffe:ffff:100:f101::1 > 3ffe:ffff:100:f101:2e0:18ff:fe90:9205: icmp6: echo
¬ reply (len 64, hlim 64)

4.3.4.2. Ping IPv6 vers 3ffe:ffff:100::1 routée au travers d'un tunnel IPv6-in-IPv4

1.2.3.4 et 5.6.7.8 sont les extrémités du tunnel (toutes les adresses sont des exemples)

# tcpdump -t -n -i ppp0 -s 512 -vv ip6 or proto ipv6 
tcpdump: listening on ppp0 
1.2.3.4 > 5.6.7.8: 2002:ffff:f5f8::1 > 3ffe:ffff:100::1: icmp6: echo request
¬ (len 64, hlim 64) (DF) (ttl 64, id 0, len 124) 
5.6.7.8 > 1.2.3.4: 3ffe:ffff:100::1 > 2002:ffff:f5f8::1: icmp6: echo reply (len
¬ 64, hlim 61) (ttl 23, id 29887, len 124) 
1.2.3.4 > 5.6.7.8: 2002:ffff:f5f8::1 > 3ffe:ffff:100::1: icmp6: echo request
¬ (len 64, hlim 64) (DF) (ttl 64, id 0, len 124) 
5.6.7.8 > 1.2.3.4: 3ffe:ffff:100::1 > 2002:ffff:f5f8::1: icmp6: echo reply (len
¬ 64, hlim 61) (ttl 23, id 29919, len 124)