IPv6 – Internet Protocol version 6

Ce n’est pas un scoop, l’espace d’adresses IPv4 publiques fond comme neige au soleil. Selon les estimations actuelles il ne resterait tout au plus que 5% de l’ensemble des  adresses qui seraient disponibles (cf cet article sur American Registry for Internet Numbers online).

Un jour ou l’autre, le passage à l’IPv6 sera inévitable, autant s’y préparer…

Objectifs d’IPv6

  • Supporter un espace d’adresses suffisant pour les développements futurs
  • Réduire la taille des tables de routage
  • Simplifier les protocoles
  • Améliorer la sécurité
  • Faciliter l’itinérance
  • Cohabitation et transition possible avec IPv4

Fonctionnement d’IPv6

S’il fallait résumer le fonctionnement d’IPv6 en une phrase, ce serait certainement quelque chose du genre “IPv6, juste quelques bits de plus… ou presque”.

Par exemple, la majorité des protocoles basés sur IPv4 fonctionnent sur IPv6, parfois moyennant quelques modifications mais sans plus, c’est le cas de TCP, UDP, ICMP, DNS, … ainsi que la majeure partie des protocoles de routages comme RIP(ng), OSPF, BGP, …

La vraie différence se situe dans la longueur et les types d’adresses ainsi quel la structure de l’entête.

L’entête IPv6

  • Version: version du protocole IP.
  • Traffic Class: permet d’indiquer une priorité au traffic afin de résoudre les problèmes de congestion.
  • Flow Label: Indicateur de flux, servant à faciliter la tâche aux routeurs. Permet d’identifier les flux d’une application.
  • Payload Length: taille du contenu du paquet IPv6 hors en-tête.
  • Next Header: permet d’identifier les en-têtes suivantes (protocoles de couches supérieures ou simple extension IPv6).
  • Hop Limit : Champ équivalent au TTL en IPv4

En comparaison avec l’entête IPv4, le nombre de champs est fortement réduit, ce qui d’une part allège la tâche des routeurs, puisqu’il y a moins d’informations à traiter mais également augmente la sécurité puisqu’il y a moins d’informations vitales qui se trouvent dans l’entête.

Les adresses IPv6

Le point vital se situe dans la taille des adresses IPv6 qui passe de 32bits (IPv4) à 128bits. Ces adresses sont exprimées sous la forme de 8 groupes de 4 caractères hexadécimaux, soit 8 groupes de 16 bits (16×8 = 128).

Exemple:

2001:0abc:0001:5400:0000:0000:0123:ab58

Afin d’alléger l’écriture deux règles de simplification peuvent être utilisées:

  1. Les “zéros” non significatifs peuvent être omis. ( 0001 est identique à 1 ).
  2. Une seule fois par adresse on peut remplacer les groupes de zéros consécutifs par “::” ( …:0000:0000:… est identique à …::… )

Ce qui donne comme notation abrégée:

2001:abc:1:5400::123:ab58

Les réseaux IPv6 sont notés en utilisant la notation CIDR, ce nombre indiquant le nombre de bits “forts” attribués à l’adresse réseau.

Par exemple, /64 indique que les 64 premiers bits de l’adresse indiquent le réseau auquel elle appartient.

Les types d’adresses IPv6

En IPv4 on retrouve des adresses unicast (1 à 1), multicast (1 à plusieurs) et broadcast (1 à tous). En IPv6 c’est quelque peu différent.

  • Adresses Unicast: sert à délivrer un paquet à une interface unique.
  • Adresses Multicast: sert à délivrer un paquet à plusieurs interfaces.
  • Adresses Anycast: sert à délivrer un paquet à la plus proche d’un groupe d’interfaces en terme de routage. (On attribue la même adresse Anycast à plusieurs hôtes, en fonction du routage, celle qui est la plus “proche” sera utilisée).

Il n’y a donc plus de broadcast en IPv6. Ce qui implique que certains protocoles ont du évoluer.

Dans les adresses “unicast”, on retrouve 3 sous-catégories:

  1. Adresses globales: adresses routables sur internet version 6.
  2. Adresses site-local: adresses reconnues au sein d’une organisation. (notion qui n’est plus utilisée à l’heure actuelle).
  3. Adresses link-local: adresses qui ne sont valables que sur un réseau local (le principe est comparable aux adresses 169.254.x.x/16 qu’on obtient en IPv4 en l’absence d’un serveur DHCP et de configuration statique).

Attribution des adresses globales

Pour l’instant, l’ensemble des adresses distribuées sont prises dans le bloc 2000::/3. Ce qui signifie que d’un point de vue binaire, toutes les adresses commencent par 001.

de

0010000000000000:… ce qui donne 2000::

à

0011111111111111:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF … 3FFF:FFFF:….

Dans ce bloc d’adresses, l’IANA (Internet Assigned Numbers Authority) attribue des blocs /23 aux registres Internet régionaux (Europe, Asie, …). Ceux-ci attribuent dans les blocs reçus des portions de /32 aux organismes locaux qui au final attribuent des blocs en /48 ou /64 aux clients.

Adresses particulières

2000::/3 Adresses unicast globales

FC00::/7 Adresses locales uniques

FE80::/10 Adresses link-local

FF00::/8 Adresses multicast

::1/128 Adresse loopback (équivalent à 127.0.0.1)

::/128 Adresse non-spécifiée (utilisée comme adresse source dans des cas particuliers comme l’acquisition d’une adresse réseau).

2001::/32 Utilisées pour Teredo (méthode de transition entre un réseau IPv4 vers IPv6).

Adresses Link-Local

L’adresse link-local est générée automatiquement dès qu’une interface est activée en IPv6. Cette adresse permettra par définition de communiquer directement avec n’importe quelle machine présente sur le même réseau.

Cette adresse est générée sur base de l’adresse MAC de l’interface (si c’est une interface ethernet) ou sur base de l’adresse MAC d’une autre interface (si on configure une interface sérielle par exemple).

Format de l’adresse link-local:

FE80::MMMM:MMFF:FEMM:MMMM

Les M représentent l’adresse MAC utilisée. Vu que le principe est d’utiliser 64 bits pour définir l’hôte, et que l’adresse MAC n’est composée que de 48 bits, la séquence FFFE (soit 16bits) est insérée au milieu de l’adresse MAC.

Exemple:

R1#sh ipv6 interface fa0/0
FastEthernet0/0 is up, line protocol is up
IPv6 is enabled, link-local address is FE80::C000:CFF:FEF4:0
No Virtual link-local address(es):
Global unicast address(es):
2001:1111:2222:3333:4444:5555:6666:7777, subnet is 2001:1111:2222:3333::/64
Joined group address(es):
FF02::1
FF02::1:FFF4:0
MTU is 1500 bytes
ICMP error messages limited to one every 100 milliseconds
ICMP redirects are enabled
ICMP unreachables are sent
ND DAD is enabled, number of DAD attempts: 1
ND reachable time is 30000 milliseconds
R1#
R1#sh int fa0/0
FastEthernet0/0 is up, line protocol is up
Hardware is Gt96k FE, address is c000.0cf4.0000 (bia c000.0cf4.0000)
MTU 1500 bytes, BW 10000 Kbit/sec, DLY 1000 usec,
reliability 255/255, txload 1/255, rxload 1/255

Adresses Globales

Ces adresses sont les adresses routables en IPv6.

A l’heure actuelle, 85% de l’espace IPv6 est réservé pour le futur, seul les adresses du range 2000::/3 sont prévues pour être utilisées. De plus, l’Internet de deuxième génération (entendez Internet IPv6) est censé être composé d’adresses comprises dans le range 2001::/16 (soit environ 5×10^33 possibilités).

De manière générale, une adresse IPv6 est composée de 3 éléments:

  • Un préfixe de routage global ( sur x bits, maximum 48bits)
  • Un identifiant de sous-réseau  (sur 64-x bits)
  • Un identifiant de l’interface (sur 64 bits)

Exemple: 2001:AB01:CD02:0000:ABCD:01FF:FE02:1234/48

Il est prévu que les providers assignent au maximum un réseau /48. Sachant qu’il y a 64 bits normalement réservés pour l’identifiant de l’interface, cela laisse (128-48-64) 16 bits ( 65536 possibilités) pour définir lé découpage des sous-réseaux.

L’identifiant de l’interface devrait normalement toujours s’auto-configurer (ce n’est pas une obligation pour autant). Le principe est le même que pour l’adresse link-local. Une fois que l’interface reçoit une adresse réseau, il ne suffit plus que d’ajouter l’identifiant de l’interface composé de l’adresse MAC dans laquelle on insère la séquence FFFE au milieu pour obtenir les 64bits (appelé EUI-64 pour Extended Unique Identifier 64bits).

Configuration manuelle d’une adresse IPv6 sur une interface:

R1(config)#int fa0/0
R1(config-if)#ipv6 address 2001:aa11::1/64
R1(config-if)#^Z
R1#sh ipv6 int fa0/0
FastEthernet0/0 is up, line protocol is up
IPv6 is enabled, link-local address is FE80::C200:CFF:FEF4:0
No Virtual link-local address(es):
Global unicast address(es):
2001:AA11::1, subnet is 2001:AA11::/64
Joined group address(es):
FF02::1
FF02::2
FF02::1:FF00:1
FF02::1:FFF4:0
MTU is 1500 bytes
ICMP error messages limited to one every 100 milliseconds
ICMP redirects are enabled
ICMP unreachables are sent
ND DAD is enabled, number of DAD attempts: 1
ND reachable time is 30000 milliseconds
ND advertised reachable time is 0 milliseconds
ND advertised retransmit interval is 0 milliseconds
ND router advertisements are sent every 200 seconds
ND router advertisements live for 1800 seconds
ND advertised default router preference is Medium
Hosts use stateless autoconfig for addresses.
R1#

Configuration d’une adresse IPv6 en spécifiant uniquement l’identifiant de sous-réseau:

R1(config-if)#ipv6 address 2001:aa11::/64 eui-64
R1(config-if)#^Z
R1#sh ipv6 int fa0/0
FastEthernet0/0 is up, line protocol is up
IPv6 is enabled, link-local address is FE80::C200:CFF:FEF4:0
No Virtual link-local address(es):
Global unicast address(es):
2001:AA11::C200:CFF:FEF4:0, subnet is 2001:AA11::/64 [EUI]
Joined group address(es):
FF02::1
FF02::2
FF02::1:FFF4:0
MTU is 1500 bytes
ICMP error messages limited to one every 100 milliseconds
ICMP redirects are enabled
ICMP unreachables are sent
ND DAD is enabled, number of DAD attempts: 1
ND reachable time is 30000 milliseconds
ND advertised reachable time is 0 milliseconds
ND advertised retransmit interval is 0 milliseconds
ND router advertisements are sent every 200 seconds
ND router advertisements live for 1800 seconds
ND advertised default router preference is Medium
Hosts use stateless autoconfig for addresses.
R1#

En utilisant l’option eui-64, on donne l’instruction au routeur de compléter l’adresse de l’interface en utilisant l’adresse MAC de l’interface (ou celle d’une interface disponible si celle que l’on configure n’est pas une interface ethernet).

IPv6 ND (Neighbor Discovery)

En IPv6, il n’y a plus de protocol ARP !!! A la place on troupe IPv6 ND … un protocole de découverte des voisins basé sur ICMPv6 (la version IPv6 de ICMP).

IPv6 ND remplit une série importante de fonctionnalités:

  • Détection de doublons dans l’adressage.
  • Annonce de l’adresse link-local
  • Découverte du voisinnage
  • Résolution d’adresses
  • etc.

Le principe de la détection de doublons est simple. Dès qu’une interface devient active en IPv6, la machine fait une requête afin de savoir si quelqu’un sur le réseau a la même adresse (Neighbor Solicitation). Si personne ne répond, la machine confirme qu’elle l’utilise en s’annonçant (Neighbor Advertisment). Et ce pour chaque adresse configurée sur l’interface (link-local, global …).

La résolution d’adresses est un peu plus complexe à expliquer, mais fonctionne de manière très simple. Dès qu’une interface est configurée la machine joint une série de groupes multicast. Voici un exemple:

R1#sh ipv6 int fa0/0
FastEthernet0/0 is up, line protocol is up
IPv6 is enabled, link-local address is FE80::C200:CFF:FEF4:0
No Virtual link-local address(es):
Global unicast address(es):
2001:AA11::1, subnet is 2001:AA11::/64
Joined group address(es):
FF02::1
FF02::2
FF02::1:FF00:1
FF02::1:FFF4:0
MTU is 1500 bytes
ICMP error messages limited to one every 100 milliseconds
ICMP redirects are enabled
ICMP unreachables are sent
ND DAD is enabled, number of DAD attempts: 1
ND reachable time is 30000 milliseconds
ND advertised reachable time is 0 milliseconds
ND advertised retransmit interval is 0 milliseconds
ND router advertisements are sent every 200 seconds
ND router advertisements live for 1800 seconds
ND advertised default router preference is Medium
Hosts use stateless autoconfig for addresses.
R1#

FF02::1 est le remplacement du broadcast, c’est le groupe multicast auquel se joint n’importe quelle machine du réseau local.

FF02::2 est le groupe multicast « Tous les routeurs du réseau local ».

FF02::1:FF00:1 est le groupe multicast propre à l’adresse globale configurée sur l’interface. Composée de FF02::1:FF… suivi des derniers 24 bits de l’adresse globale.

FF02::1:FFF4:0 est le groupe multicast propre à l’interface, cette adresse commence toujours par FF02::1:FF… et est complétée par les 24 derniers bits (l’identifiant unique d’une machine) de l’adresse MAC utilisée dans la composition de l’adresse.

Etant donné que les deux derniers groupes multicast sont générés en fonction des adresses de l’interface, il est donc possible de directement s’adresser à une machine en connaissant son adresse IPv6 par l’intermédiaire du groupe multicast qui lui sera propre.

Par exemple, si je veux envoyer un ping vers 2001:11aa::1, pour obtenir son adresse MAC j’enverrai une requête vers le groupe multicast FF02::1:FF00:1 ( où 00:1 provient des 24 derniers bits de l’adresse gobale spécifiée par la commande ping). L’avantage étant qu’au lieu d’envoyer une requête broadcast quand on utilise ARP en IPv4, en IPv6 on envoi une requête directement à la machine concernée, ce qui évite d’ennuyer les machines non concernées.

Voici une capture d’un ping IPv6 de R1 (2001:11aa::1) vers R2 (2001:11aa::2) pour illustrer cela:

R1 envoi un NS (Neighbot Solicitation) à destination de FF02::1:FF00:2

R2 répond par un NA (Neighbor Advertisement) à destination de 2001:11aa::1

R1 et R2 s’étant échangés des informations ont doc forcément appris leurs adresses MAC respectives…. la suite n’est qu’une suite de ICMPv6 Echo Request … ICMPv6 Echo Reply (comme en IPv4).

Autres fonctionalités d’IPv6

Autoconfiguration

Sur base du Neighbor Discovery, une machine peut découvrir sur quel réseau elle se trouve en envoyant une solicitation à laquelle répondra un router par un Advertisement. Une fois l’adresse réseau obtenue, la machine peut alors s’auto-configurer en complétant l’adresse par l’EUI-64 (Adresse mac + FFFE au milieu).

De ce fait le rôle d’un serveur DHCP est réduit à son strict minimum. Toutefois, on distingue deux tpes de serveurs DCHP. Les statefull DHCP qui fournissent la configuration complète et les Stateless DHCP qui ne servent en gros qu’à fournir une adresse pour un serveur DNS vu que le reste est auto-configuré.

Sécurité

IPsec fait partie intégrante d’IPv6. A l’origine IPsec a été développé pour IPv6 mais d’abord appliqué sur IPv4. On retrouve donc toutes les composantes d’IPsec en natif dans IPv6.

Voilà qui conclut ce premier article sur IPv6. Bien que ce ne soit qu’un début de base d’explication, il faut bien s’arrêter quelque part 😉

2 Comments on “IPv6 – Internet Protocol version 6

  1. La taille des tables de routage est bien sur dépendante de la taille des adresses, puisque c’est une information qui s’y trouve, mais aussi et surtout du nombre de routes qui y sont présentés. En Ipv4 les adresses ont été distribuées sans tenir compte de la localisation géographique des réseaux… Du moins au début. En ipv6 par contre, la distribution est faite de manière à ce que des réseaux qui sont géographiquement voisins aient des plages d’adresses voisines aussi, ce qui permet de mettre en place des,summarries.
    Comme comparaison, il suffit de s’imaginer un carrefour routier avec des centaines de panneaux qui indiquent différentes direction… Difficile à analyser, on prendrait bcp de temps pour tout lire… Tandis que si on indique des directions plus générales, cela permet de regrouper plusieurs panneaux en un seul, et donc de réduire le nombre d’information et ainsi de gagner en temps de décision.

  2. Je ne comprends pas comment IPv6 va réduire la table de routage sachant que nous passant de 32bits (IPv4) à 128bits déjà la taille de l’adresse IP augment, alors comment la table de routage va être réduit ?