ICMPv6, multicast, NDP...

ICMPv6

Ce protocole, qui ressemble beaucoup à l'ICMP du monde IPv4, a été enrichi de nouveaux messages, c'est lui qui sert à véhiculer les informations de configuration, dans le cas qui nous intéresse. En effet, nous n'allons maintenant plus tarder à voir que ce sont des messages ICMP qui contiennent les questions et les réponses que nous avons obtenues avec l'outil rdisc6, exactement de la même manière que lors du démarrage de la pile IPv6 sur une interface réseau.

Multicast

IPv6 cherche par tous les moyens à éviter la diffusion (broadcast), en préférant adopter des solutions « multicast ». Nous allons découvrir que certaines adresses multicast sont définies pour répondre à des requêtes bien précises, et que les équipements du réseau qui sont sensés disposer des réponses à ces requêtes écoutent sur ces adresses multicast.

Ainsi :

  • ff02::2 est une adresse multicast destinée à recevoir des requêtes du type « router discovery (Sollicitation d'un routeur) ». Tous les routeurs accessibles dans le voisinage le seront par cette adresse multicast. C'est ce que fait notre commande rdisc6 sur la page précédente ;
  • ff02::1 est une autre adresse multicast, qui sert dans l'autre sens. Toutes les stations d'un réseau doivent être capables d'écouter sur cette adresse ce que les routeurs ont à leur dire.

NDP

« Neighbor Discovery Protocol (découverte des voisins) ». Ce protocole permet aux nœuds d'un résau de découvrir leur voisinage. Pour ce qui nous intéresse principalement ici, c'est grâce à lui qu'une station qui démarre découvre les routeurs qui lui sont accessibles et que ceux-ci lui communiquent les paramètres nécessaires à sa configuration IPv6. Car vous l'avez deviné, ce sont les routeurs qui transmettent ces informations que nous avons mises en évidence grâce à rdisc6.

NDP utilise des messages ICMPv6 et les adresses multicast ff02::1 et ff02::2.

Pour des raisons techniques, les exemples donnés ci-dessous sont issus d'un autre contexte.

Capture du protocole

Nous allons lancer notre wireshark favori à l'écoute d'ICMPv6 sur eth0 et refaire un rdisc6 eth0 pour voir…

No.     Time        Source                   Destination           Protocol Info
1       0.000000    fe80::21b:11ff:fe52:bfab ff02::2               ICMPv6   Router solicitation
2       0.004925    fe80::207:cbff:fe1f:f5a  ff02::1               ICMPv6   Router advertisement

  1. Notre station (fe80::21b:11ff:fe52:bfab) envoie un « Router solicitation (sollicitation de routeurs) » sur l'adresse multicast ff02::2 ;
  1. Notre routeur (fe80::207:cbff:fe1f:f5a, la passerelle par défaut) répond un « Router advertisement (annonce de routeur) » sur l'adresse multicast ff02::1.

Analyse de l'échange

La question

Elle est assez simple, nous allons tronquer un peu le détail, pour ne garder que ce qu'il y a de plus intéressant :

Frame 1 (62 bytes on wire, 62 bytes captured)
...
Ethernet II, Src: 00:1b:11:52:bf:ab (00:1b:11:52:bf:ab), Dst: 33:33:00:00:00:02 (33:33:00:00:00:02)
    Destination: 33:33:00:00:00:02 (33:33:00:00:00:02)
        Address: 33:33:00:00:00:02 (33:33:00:00:00:02)
        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
    Source: 00:1b:11:52:bf:ab (00:1b:11:52:bf:ab)
        Address: 00:1b:11:52:bf:ab (00:1b:11:52:bf:ab)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    Type: IPv6 (0x86dd)
Internet Protocol Version 6
...
    Source: fe80::21b:11ff:fe52:bfab (fe80::21b:11ff:fe52:bfab)
    Destination: ff02::2 (ff02::2)
Internet Control Message Protocol v6
    Type: 133 (Router solicitation)
    Code: 0
    Checksum: 0xab1e [correct]

Notez, sur la couche Ethernet, les adresses multicast utilisées.

Pour le reste, nous découvrons bien sur ICMPv6 un message de type 133 (Router solicitation).

La réponse

Ça va être un peu plus copieux ici.

Frame 2 (158 bytes on wire, 158 bytes captured)
...
Ethernet II, Src: 00:07:cb:1f:0f:5a (00:07:cb:1f:0f:5a), Dst: 33:33:00:00:00:01 (33:33:00:00:00:01)
    Destination: 33:33:00:00:00:01 (33:33:00:00:00:01)
        Address: 33:33:00:00:00:01 (33:33:00:00:00:01)
        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
    Source: 00:07:cb:1f:0f:5a (00:07:cb:1f:0f:5a)
        Address: 00:07:cb:1f:0f:5a (00:07:cb:1f:0f:5a)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    Type: IPv6 (0x86dd)
Internet Protocol Version 6
...
    Source: fe80::207:cbff:fe1f:f5a (fe80::207:cbff:fe1f:f5a)
    Destination: ff02::1 (ff02::1)
Internet Control Message Protocol v6
    Type: 134 (Router advertisement)
    Code: 0
    Checksum: 0xfc50 [correct]
    Cur hop limit: 64
    Flags: 0x00
        0... .... = Not managed
        .0.. .... = Not other
        ..0. .... = Not Home Agent
        ...0 0... = Router preference: Medium
    Router lifetime: 1800
    Reachable time: 0
    Retrans timer: 0

    ICMPv6 Option (Prefix information)
        Type: Prefix information (3)
        Length: 32
        Prefix length: 64
        Flags: 0xc0
            1... .... = Onlink
            .1.. .... = Auto
            ..0. .... = Not router address
            ...0 .... = Not site prefix
        Valid lifetime: 86400
        Preferred lifetime: 86400
        Prefix: 2a01:5d8:52f3:500d::

    ICMPv6 Option (Recursive DNS Server)
        Type: Recursive DNS Server (25)
        Length: 40
        Reserved
        Lifetime: 600
        Recursive DNS Servers: 2a01:5d8:e0ff::2 (2a01:5d8:e0ff::2)
        Recursive DNS Servers: 2a01:5d8:e0ff::1 (2a01:5d8:e0ff::1)

    ICMPv6 Option (MTU)
        Type: MTU (5)
        Length: 8
        MTU: 1480

    ICMPv6 Option (Source link-layer address)
        Type: Source link-layer address (1)
        Length: 8
        Link-layer address: 00:07:cb:1f:0f:5a

Tout est dit dans un seul paquet ICMP. Notez que ce message « Neighbor advertisement » est périodiquement émis par les routeurs, même s'il n' pas été sollicité par un nœud du réseau., ce qui permet si nécessaire de reconfigurer dynamiquement les hôtes.