Accueil         Format         Adresses         B.A.-BA         Liens     Atelier IPv6 - Accueil

 . Le B. A. BA . 

bas

Les Titres:

.Adresses IPv6.

Matériel et schéma du réseau
Principe
1- Contrôler si IPv6 est déjà chargé
2- Vérifier si les modules IPv6 sont présents
3- Charger les modules IPv6
4- Vérifier si les modules IPv6 sont chargés
5- Contrôler par dmesg
6- Visualiser les adresses IPv6 de l'interface réseau
7- Vérifier le fichier protocols
8- Renseigner le fichier hosts
9- Tester la machine distante
10- Tester sa machine en local
11- Analyse du ping6 avec tcpdump

Comment découvrir IPv6 sur votre Tux, si ce n'est par la pratique ?
Cette page vous propose une prise en main des balbutiements d'IPv6. N'ayez crainte, vous ne casserez rien, car vous ne chargerez que des modules, vous évitant ainsi une recompilation du noyau.
Le réseau est simple (voir schéma), il est composé deux machines. Afin de tester IPv6, un ping est réalisé pour voir si la station distante est joignable.

Matériel utilisé:

Deux PC GNU/Linux raccordés par un hub:

Un PC GNU/Linux nommé "mdk", la distribution utilisée est une Mandrake 9.0 .

Un second PC GNU/Linux nommé "knoppix", la distribution utilisée est Knoppix 3.1 .

Schéma:

schema du reseau

haut bas

Principe: en 11 étapes

Nous allons procéder par plusieurs étapes mais avant tout, il est supposé que les deux machines fonctionnent en IPv4.

1- Contrôler si IPv6 est déjà chargé. (mdk & knoppix)

2- Vérifier si les modules IPv6 sont présents. (mdk & knoppix)

3- Charger les modules IPv6. (mdk & knoppix)

4- Vérifier si les modules IPv6 sont chargés. (mdk & knoppix)

5- Contrôler par dmesg. (mdk)

6- Visualiser les adresses IPv6 de l'interface réseau.

7- Vérifier le fichier protocols. (mdk & knoppix)

8- Renseigner le fichier hosts. (mdk)

9- Tester la machine distante (ping mdk -> knoppix)

10- Tester sa machine en local (ping mdk -> localhost)

11- Analyse du ping6 avec tcpdump. (mdk)

Ci-dessous, ne figurent que les commandes passées sur la machine "mdk". Bien évidemment, les mêmes commandes d'installation doivent être saisies sur les deux machines, la seconde machine étant "knoppix".

haut bas

1- Contrôler si IPv6 est déjà chargé.

[root@mdk nono]# dmesg |grep IPv6

[root@mdk nono]#

Ici, ce n'est pas le cas sinon nous aurions eu deux lignes mentionnant IPv6.


2- Vérifier la présence des modules ipv6 chargeables:

Normalement sur les distributions récentes de GNU/Linux, les paquetages IPv6 sont livrés. Puisqu'ici il ne s'agit que d'éffectuer un test, nous allons simplement installer IPv6 en modules. Cela nous évite une compilation du noyau.
Commençons par vérifier la présence de ces modules.

[root@mdk nono]# modprobe -l |grep ipv6

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/ipv6.o.gz

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/netfilter/ip6_tables.o.gz

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/netfilter/ip6t_LOG.o.gz

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/netfilter/ip6t_MARK.o.gz

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/netfilter/ip6t_limit.o.gz

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/netfilter/ip6t_mac.o.gz

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/netfilter/ip6t_mark.o.gz

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/netfilter/ip6t_multiport.o.gz

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/netfilter/ip6t_owner.o.gz

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/netfilter/ip6table_filter.o.gz

/lib/modules/2.4.19-16mdk/kernel/net/ipv6/netfilter/ip6table_mangle.o.gz

[root@mdk nono]#

haut bas

3- Charger ces modules:

[root@mdk nono]# modprobe ipv6

[root@mdk nono]#

 

4- Vérifier si les modules sont chargés:

[root@mdk nono]# lsmod |grep ipv6

ipv6 140692 -1

[root@mdk nono]#

 

5- Contrôler la présence des deux premières lignes dans dmesg:

[root@mdk nono]# dmesg |grep IPv6

IPv6 v0.8 for NET4.0

IPv6 over IPv4 tunneling driver

eth0: no IPv6 routers present

[root@mdk nono]#

La troisième ligne "eth0: no IPv6 routers present" est normale si vous ne disposez par de routeur IPv6 sur votre réseau. La configuration automatique pour obtenir le préfixe du réseau ne peut pas avoir lieu sans routeur IPv6.

haut bas

6- Visualiser les adresses IPv6 de l'interface réseau:

Beaucoup plus simple qu'en IPv4, l'adresse IPv6 de la machine est générée automatiquement sans aucune intervention de votre part.
La commande ifconfig affiche les adresses d'nterface. La troisième ligne donne l'adresse IP de la machine mdk et la douzième l'adresse de boucle. Relevez l'adresse IPv6 (3ème ligne), et inscrivez là dans le fichier hosts de la station knoppix.
Ensuite, faites un ifconfig sur knoppix, relevez son adresse IPv6 et inscrivez là dans le fichier host de la machine mdk (voir la prochaine étape).



[root@mdk nono]# ifconfig -a

eth0    Link encap:Ethernet HWbabaprat 00:50:04:0E:17:93

         inet babaprat:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

        inet6 babaprat: fe80::250:4ff:fe0e:1793/10 Scope:Link

        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

         RX packets:736 errors:0 dropped:0 overruns:0 frame:0

         TX packets:5 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:100

         RX bytes:192014 (187.5 Kb) TX bytes:366 (366.0 b)

         Interrupt:10 Base babapratess:0xdc00


lo Link encap:Local Loopback

        inet babaprat:127.0.0.1 Mask:255.0.0.0>

        inet6 babaprat: ::1/128 Scope:Host

         UP LOOPBACK RUNNING MTU:16436 Metric:1

         RX packets:3025 errors:0 dropped:0 overruns:0 frame:0

         TX packets:3025 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:0

         RX bytes:529419 (517.0 Kb) TX bytes:529419 (517.0 Kb)



sit0 Link encap:IPv6-in-IPv4

         NOARP MTU:1480 Metric:1

         RX packets:0 errors:0 dropped:0 overruns:0 frame:0

         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:0

         RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

haut bas

7- Vérifier le fichier protocols:

De nouveaux protocoles ont été défini avec IPv6. C'est le cas d'ICMPv6. Pour que notre IPv6 fonctionne il faut aussi l'incontournable protocole ICMPv6. Sans lui, pas de sollicitation ni découverte des voisins et donc pas de résolution d'adresse (IPv6 -> Mac) possible, et bien sûr encore moins de ping6 (echo-requet/echo-reply).
Il faut par conséquent vérifier si ces nouveaux protocoles sont bien mentionnés dans le fichier services et notamment la ligne concernant ICMPv6 (en rouge).

#hopopt          0       HOPOPT        # hop-by-hop options for ipv6

ipv6              41       IPv6              # IPv6

ipv6-route      43       IPv6-Route     # Routing Header for IPv6

ipv6-frag        44       IPv6-Frag      # Fragment Header for IPv6

ipv6-crypt      50       IPv6-Crypt      # Encryption Header for IPv6

ipv6-auth       51       IPv6-Auth       # Authentication Header for IPv6

ipv6-icmp       58       IPv6-ICMP     # ICMP for IPv6

ipv6-nonxt      59       IPv6-NoNxt     # No Next Header for IPv6

ipv6-opts        60      IPv6-Opts        # Destination Options for IPv6

haut bas

8- Le fichier hosts:

Il n'est pas obligatoire de compléter le fichier hosts pour l'IPv6. D'ailleurs, la distribution Mandrake ne renseigne nullement ce fichier, contrairement à la distribution Knoppix. Toutefois dans les manuels de référence, il est conseillé de le faire avec les valeurs ci-dessous.
La première ligne concerne l'adresse de loopback IPv4, et doit déjà être présente dans votre fichier. N'y toucher pas si IPv4 fonctionne sur votre machine.
Rajoutez les six lignes suivantes et éventuellement des lignes supplémentaires pour les machines distantes à joindre en prenant modèle sur la huitième ligne.

127.0.0.1 localhost.localdomain localhost

::1     ip6-localhost ip6-loopback

fe00::0     ip6-localnet

ff00::0     ip6-mcastprefix

ff02::1     ip6-allnodes

ff02::2     ip6-allrouters

ff02::3     ip6-allhosts

 

fe80::250:4ff:fe0e:1793     knoppix


Pour l'exemple, dans le fichier hosts de la machine mandrake, on ajoute la dernière ligne ci-dessus.

À savoir: la machine knoppix a pour adresse IPv6 la valeur fe80::250:4ff:fe0e:1793 .
De même, dans le fichier hosts de la machine knoppix, on ajoute en dernière ligne la correspondance entre l'adresse IPv6 et le nom de la mandrake.
Si vous n'avez pas de DNS, ce qui est probablement le cas pour vos premiers essais, vous allez apprécier par la suite d'appeler les machines par leur nom plutôt que par leur adresse IPv6.
haut bas

9- Tester la station distante "knoppix":

En réseau, pour tester la présence une machine distante, on utilise le ping. Ce programme envoie une requête (echo request) au distant qui répond tel un écho (echo reply) s'il est présent.
En IPv6, le programme se nomme ping6 et fait appel au protocole ICMPv6.
Conformément au schéma ci-dessus, nous allons tester knoppix depuis la station mdk.
La première commande consiste à joindre le distant par son nom, ceci est réalisable s'il figure dans le fichier hosts.
La seconde commande consiste à joindre le distant par son adresse IPv6.

[root@mdk nono]# ping6 -I eth0 knoppix

PING knoppix(knoppix) from fe80::200:e8ff:fe65:df9a eth0: 56 data bytes

64 bytes from knoppix: icmp_seq=1 ttl=64 time=0.699 ms

64 bytes from knoppix: icmp_seq=2 ttl=64 time=0.337 ms

64 bytes from knoppix: icmp_seq=3 ttl=64 time=0.333 ms

64 bytes from knoppix: icmp_seq=4 ttl=64 time=0.335 ms

64 bytes from knoppix: icmp_seq=5 ttl=64 time=0.334 ms

--- knoppix ping statistics ---

5 packets transmitted, 5 received, 0% loss, time 4009ms

rtt min/avg/max/mdev = 0.333/0.407/0.699/0.147 ms

[root@mdk nono]#

ou

[root@mdk nono]# ping6 -I eth0 fe80::250:4ff:fe0e:1793

PING fe80::250:4ff:fe0e:1793(fe80::250:4ff:fe0e:1793) from fe80::200:e8ff:fe65:df9a eth0: 56 data bytes

64 bytes from fe80::250:4ff:fe0e:1793: icmp_seq=1 ttl=64 time=0.678 ms

64 bytes from fe80::250:4ff:fe0e:1793: icmp_seq=2 ttl=64 time=0.334 ms

64 bytes from fe80::250:4ff:fe0e:1793: icmp_seq=3 ttl=64 time=0.333 ms

--- fe80::250:4ff:fe0e:1793 ping statistics ---

3 packets transmitted, 3 received, 0% loss, time 2015ms

rtt min/avg/max/mdev = 0.333/0.448/0.678/0.163 ms

[root@mdk nono]#

haut bas

10- Tester la machine en local "mdk":

Là encore, il est possible de réaliser ces tests soit en mentionnant les adresses IPv6, soit en mentionnant les noms de la machine locale.
La première commande consiste à tester avec l'adresse de boucle (loopback).
La seconde commande consiste à tester avec sa propre adresse IPv6.
La troisième et quatrième commande consistent à tester avec le nom de la machine IPv6 selon les renseignements fournis au fichier hosts.


Par adresse:

[root@mdk package]# ping6 ::1

PING ::1(::1) from ::1 : 56 data bytes

64 bytes from ::1: icmp_seq=1 ttl=64 time=0.057 ms

64 bytes from ::1: icmp_seq=2 ttl=64 time=0.052 ms

64 bytes from ::1: icmp_seq=3 ttl=64 time=0.049 ms

--- ::1 ping statistics ---

3 packets transmitted, 3 received, 0% loss, time 2008ms

rtt min/avg/max/mdev = 0.049/0.052/0.057/0.009 ms

[root@mdk package]#


Le même résultat peut être obtenu avec la commande:

[root@mdk nono]# ping6 -I eth0 fe80::200:e8ff:fe65:df9a


Par nom:

[root@mdk package]# ping6 -I eth0 ip6-localhost

PING ip6-localhost(ip6-localhost) from ::1 eth0: 56 data bytes

64 bytes from ip6-localhost: icmp_seq=1 ttl=64 time=0.062 ms

64 bytes from ip6-localhost: icmp_seq=2 ttl=64 time=0.060 ms

--- ip6-localhost ping statistics ---

2 packets transmitted, 2 received, 0% loss, time 1000ms

rtt min/avg/max/mdev = 0.060/0.061/0.062/0.001 ms

[root@mdk package]#


Le même résultat peut être obtenu avec la commande:

[root@mdk package]# ping6 ip6-loopback

haut bas

11- Analyse du ping6 par tcpdump:

Un petit peu d'analyse pour les curieux !
Avant de lancer le ping6 de la station mdk vers knoppix, lancez dans une console l'analyseur de réseau tcpdump avec la commande:

[root@mdk nono]# tcpdump -i eth0 -nXe


Puis, dans une autre console, lancez le ping6 par la commande suivante (nous l'avons déjà vu):

[root@mdk package]# ping6 -I eth0 knoppix

PING knoppix(knoppix) from fe80::200:e8ff:fe65:df9a eth0: 56 data bytes

64 bytes from knoppix: icmp_seq=1 ttl=64 time=0.678 ms

64 bytes from knoppix: icmp_seq=2 ttl=64 time=0.341 ms


Stoppez le ping6 par la combinaison de touches [Contrôle C].
Revenir à tcpdump et l'arrêter aussi par la combinaison de touches [Contrôle C].

tcpdumpavec l'option -n permet de ne pas avoir les conversions d'adresse IPv6 en nom de machine. L'option X permet l'affichage ASCII et l'option e permet l'affichage de l'en-tête de la trame ethernet (@macD, @macS, FT).


Le résultat de l'analyse est le suivant, quatre trame ont été émises (voir schéma) suite à la commande ping.

mécanisme des échanges



Les parties
grisées ne sont d'aucun intérêt pour l'analyse d'IPv6.

Les parties orange sont les champs de la trame Mac et les parties en marron sont des informations déduites par tcpdump.
Les parties bleues sont les champs qui composent le paquet IPv6 encapsulant les messages ICMPv6 neighbor-sol (la 1ère trace), neighbor-adv (la 2ème), echo-request (la 3ème) et echo-reply (la 4ème).

[root@mdk nono]# tcpdump -i eth0 -nXe

tcpdump: listening on eth0

08:44:39.720942 0:0:e8:65:df:9a 33:33:ff:e:17:93 86dd 86: fe80::200:e8ff:fe65:df9a > ff02::1:ff0e:1793: icmp6: neighbor sol: who has fe80::250:4ff:fe0e:1793

0x0000  6000 0000 0020 3aff fe80 0000 0000 0000`.....:.........

0x0010  0200 e8ff fe65 df9a ff02 0000 0000 0000.....e..........

0x0020  0000 0001 ff0e 1793 8700 b709 0000 0000 ................

0x0030  fe80 0000 0000 0000 0250 04ff fe0e 1793 .........P......

0x0040  0101 0000 e865 df9a.....e..

08:44:39.721468 0:50:4:e:17:93 0:0:e8:65:df:9a 86dd 86: fe80::250:4ff:fe0e:1793 > fe80::200:e8ff:fe65:df9a: icmp6: neighbor adv: tgt is fe80::250:4ff:fe0e:1793

0x0000  6000 0000 0020 3aff fe80 0000 0000 0000  `.....:.........

0x0010  0250 04ff fe0e 1793 fe80 0000 0000 0000  .P..............

0x0020  0200 e8ff fe65 df9a 8800 fb4c 6000 0000 .....e.....L`...

0x0030  fe80 0000 0000 0000 0250 04ff fe0e 1793 .........P......

0x0040  0201 0050 040e 1793   ...P....

08:44:39.721514 0:0:e8:65:df:9a 0:50:4:e:17:93 86dd 118: fe80::200:e8ff:fe65:df9a > fe80::250:4ff:fe0e:1793: icmp6: echo request

0x0000  6000 0000 0040 3a40 fe80 0000 0000 0000  `....@:@........

0x0010  0200 e8ff fe65 df9a fe80 0000 0000 0000  .....e..........

0x0020  0250 04ff fe0e 1793 8000 a4ed 6839 0100 .P..........h9..

0x0030  6729 3a3e f7ff 0a00 0809 0a0b 0c0d 0e0f g):>............

0x0040  1011 1213 1415 1617 1819 1a1b 1c1d 1e1f................

0x0050  2021 .!

08:44:39.721827 0:50:4:e:17:93 0:0:e8:65:df:9a 86dd 118: fe80::250:4ff:fe0e:1793 > fe80::200:e8ff:fe65:df9a: icmp6: echo reply

0x0000  6000 0000 0040 3a40 fe80 0000 0000 0000  `....@:@........

0x0010  0250 04ff fe0e 1793 fe80 0000 0000 0000 .P..............

0x0020  0200 e8ff fe65 df9a 8100 a3ed 6839 0100 .....e......h9..

0x0030  6729 3a3e f7ff 0a00 0809 0a0b 0c0d 0e0f   g):>............

0x0040  1011 1213 1415 1617 1819 1a1b 1c1d 1e1f................

0x0050  2021

haut