IPv6 et DNS


1 Pourquoi IPv6 ?
 

Sur le plan de l'adressage, l'Internet fonctionne actuellement essentiellement avec
la version 4 du protocole IP (IPv4). Avec le succès de l'Internet et l'explosion
du nombre de machines connectées au réseau, on s'est rendu compte au début des
années 90 qu'on allait être confronté assez vite à une pénurie d'adresses IP.


Le système d'attribution des adresses qui était alors basé sur la notion de classe faisait qu'un très grand nombre d'adresses attribuées n'étaient pas utilisées.


On peut par exemple s'imaginer qu'une entreprise qui aurait besoin d'un millier d'adresses IP ne pouvait se contenter d'un bloc d'adresses de classe C (254 adresses disponibles) et demandait alors l'attribution d'un bloc de classe B (65 534 adresses disponibles). On voit alors qu'un très grand nombre des adresses de ce bloc vont rester inutilisées.


Au début des années 90, on a estimé qu'avec la politique d'attribution d'adresses en vigueur, le dernier bloc d'adresses de classe B aurait été attribué en 1994.


On peut naturellement s'imaginer que pour le cas donné en exemple, on puisse satisfaire la demande de l'entreprise en lui attribuant plusieurs blocs d'adresses de classe C (pas obligatoirement contigues).


Cette politique a aussi été appliquée, mais contribue à l'aggravation d'un autre problème : celui de l'accroissement considérable de la taille des tables de routage dans les systèmes de transit. En effet, il faut une entrée (un enregistrement) dans les tables pour chaque réseau, donc pour chaque bloc d'adresses utilisé.


CIDR (Classless Internet Domain Routing) constitue une réponse aux deux problèmes cités, notamment l'épuisement des adresses IP et l'explosion des tables de routage. Cette technique de "routage Internet sans classes" permet en effet de se départir d'une part de la notion de classe en allouant des blocs d'adresses IP et, d'autre part, d'agréger des blocs d'adresses contigus en un seul bloc qui ne va nécessiter alors qu'une seule entrée dans les tables de routage.


Mais CIDR ne permet que de ralentir le phénomène d'épuisement des adresses IP. Il fallait donc trouver une solution plus radicale en introduisant un autre système d'adressage qui puisse résoudre définitivement le problème de pénurie d'adresses IP. Plusieurs solutions techniques ont été proposées dans les années 90 au sein, mais aussi en dehors de l'IETF (Internet Engineering Task Force) ; on peut notamment citer TUBA (TCP and UDP with Bigger Addresses) qui a fait l'objet de la RFC 1347, IPAE (Internet Protocol Address Encapsulation), IPv7 basé sur un protocole de l'ISO(International Standardization Organisation), PIP (The "P" Internet Protocol) et SIP (SimpleInternet Protocol).


Finalement, la fusion des équipes de développement de SIP et PIP donneront naissance à SIPP (Simple Internet Protocol Plus), puis SIPP+ qui va évoluer dans le cadre du projet IPng (IP new generation) vers IPv6 (Internet Protocol version 6) ; IPv6 sera choisi comme nouveau standard pour l'adressage IP en 1994.


 





2 Introduction à IPv6
 

Ne serait-ce que sur le plan de l'adressage, IPv6 présente un avantage majeur par rapport à IPv4. Pendant qu'une adresse IPv4 est codée sur 32 bits, une adresse IPv6 a une longueur de 128 bits. Ceci permet de disposer d'un espace d'adressage qui est 296 fois celui de l'espace d'adressage d'IPv4. On estime que suivant la hiérarchisation utilisée pour l'attribution des adresses IPv6, on disposerait entre plus de 1564 et 3 911 873 538 269 506 102 adresses par m2 du globe terrestre, océans compris.

Le schéma d'adressage IPv6 permet une hiérarchisation et respecte les principes de CIDR, notamment dans la notation des adresses du type "Préfixe / longueur du préfixe" ; l'agrégation des adresses, un autre principe emprunté à CIDR, permet de réduire considérablement la taille des tables de routage.

Comme avec IPv4 pour qui une notation décimale pointée a été introduite pour faciliter la gestion des adresses IP, une notation particulière a aussi été introduite pour les adresses IPv6. Les 128 bits sont scindés pour ce faire en groupes contigus de 16 bits (2 octets) ; on obtient ainsi 8 mots de 2 octets représentés chacun sous forme hexadécimale et séparés par " : " ; les "0" placés en tête d'un mot peuvent être omis.


 


 

2001:660:1180:1:192:134:0:49



 

Dans une adresse IP, des mots consécutifs peuvent avoir tous "0" comme valeur ; on peut dans ce cas "abréger" la représentation de l'adresse en remplaçant cette suite particulière de mots par "::". Ainsi, 2001:660:1180:1:0000:0000:0000:49, 2001:660:1180:1:0:0:0:49 et 2001:660:1180:1::49 représentent la même adresse IP.
Pour éviter toute ambiguïté, "::" ne peut être utilisé qu'une fois dans la représentation abrégée d'une adresse IP ; en d'autres termes, s'il y a dans une adresse IP deux groupes de "0" contigus séparés par des mots dont la valeur est non nulle, alors la représentation abrégée ne peut être utilisée que pour l'un des groupes de "0".

Plusieurs plans d'adressage ont été suggérés pour l'espace d'adressage Ipv6 ; celui qui a été finalement retenu est le plan d'adressage agrégé (Aggregatable Global Unicast Address Format) décrit dans les RFC 2373 et 2374.. Ce plan d'adressage qui est hiérarchisé s'inspire du plan d'adressage IPv4 avec un préfixe pour la partie réseau et une partie pour l'identification locale, étant entendu que la notion de classe d'adresses disparaît avec IPv6.

On peut considérer une adresse IPv6 comme étant composée de 3 parties principales (voir schéma ci-dessous):

une partie dite publique qui est représentée par les 48 bits de poids les plus forts ;

une partie dite de site composée des 16 bits suivants;

une partie dédiée à l'identificateur d'interface qui est représentée par les 64 bits restants.

Les deux premières composantes d'une adresse globale unicast sont elles-mêmes subdivisées en plusieurs parties. C'est ainsi que la partie publique est composée des éléments suivants :

un préfixe de 3 bits dont la valeur est 2000::/3 ;

une unité d'agrégation haute (TLA : Top Level Aggregator) codée sur 13 bits ;

une ou plusieurs unités d'agrégation basse (NLA : Next Level Aggregator) d'une longueur totale de 32 bits ; l'astérisque ("*") symbolise la possibilité d'hiérarchisation de cet espace, avec la présence de plusieurs NLA en cascade.

La partie dédiée au site quant à elle est composée d'une unité d'agrégation de site (SLA : Site Level Aggregator) codée sur 16 bits avec une possibilité d'hiérarchisation symbolisée par le caractère astérisque ("*").



 



 

Outre ces adresses globales unicast, on distingue les types d'adresse suivants :

les adresses multicast : elles permettent d'adresser simultanément plusieurs interfaces ; elles sont toutes sous le préfixe FF00 ::/8 et ont un format particulier qui permet de spécifier entre autres le niveau de diffusion (scope) et le caractère temporaire ou permanent de l'adresses de diffusion ;

les adresses anycast : elles permettent d'envoyer des paquets à un seul représentant d'un groupe prédéfini ; contrairement au multicast où l'information est envoyée à tous les membres du groupe, il suffit ici de l'envoyer à un quelconque membre du groupe (généralement le plus proche par rapport à la connectivité).
Les adresses anycast ont le format que les adresses unicast ; pour des raisons techniques, les adresses anycast ne sont attribuées qu'à des routeurs ;

les adresses site-local (site local addresses) : ces adresses ne sont valides qu'au sein d'un site (analogie avec le concept d'adresses privées sous IPv4). Une adresse site local est obtenu en concaténant le préfixe FEC0 ::/48 (selon le draft draft-ietf-ipngwg-addr-arch-v3-11.txt, l'evolution de la RFC 2374, ca serait FEC0::/10. C'est-a-dire que le subnet ID serait code sur 54 bits) avec un mot de 16 bits permettant d'identifier un sous=réseau du site et les 64 bits constituant l'identificateur d'interface de la machine ;

les adresses de lien local (link local addresses) : ces adresses ont une validité qui est restreinte au réseau physique auquel sont connectées les machines qui les portent ; ce sont des adresses qui sont configurées automatiquement à l'initialisation des machines et qui permettent la découverte de voisins ; une adresse de lien local s'obtient par concaténation du préfixe FE80 ::/64 avec l'identificateur d'interface de la machine concernée ;

les adresses IPv4 mappées : un des critères fondamentaux pour le choix d'un nouveau protocole réseau était l'absence d'une contrainte de "jour J" (nécessité de basculer tous les systèmes d'IPv4 vers le nouveau protocole) ; la cohabitation entre IPv4 et le nouveau protocole devait donc être assurée ; il a par conséquent été prévu dans IPv6 la possibilité de communiquer avec des systèmes qui opèrent avec IPv4, d'où la nécessité pour les systèmes IPv6 d'avoir pendant une période transitoire deux piles (IPv6 et IPv4).
Ce mapping IPv4-IPv6 s'effectue en concaténant le préfixe ::FFFF/96 avec les 32 bits de l'adresse IPv4 ; par exemple, ::FFFF:a.b.c.d correspondrait au mapping pour l'adresse IPv4 a.b.c.d ; il est important de souligner que de telles adresses ne sont utilisées qu'en interne, au niveau des systèmes ; elles ne peuvent donc pas se retrouver dans des paquets échangés sur le réseau ;

les adresses compatibles IPv4 : ces adresses servent à la communication entre 2 systèmes IPv6 qui utilisent un réseau IPv4 (tunelling) ; elles sont de la forme ::a.b.c.d (on utilise donc ici le préfixe ::/96).

les adresses "spéciales", notamment :

  • l'adresse non spécifiée : (unspecified address) : il s'agit de l'adresse 0:0:0:0:0:0:0:0 qu'on peut aussi noter ::
    Cette adresse est celle d'une machine en phase d'initialisation sur un réseau IPv6 ;
  • l'adresse de boucle locale : sa valeur est 0:0:0:0:0:0:0:0:1 (ce qui correspond à ::1 en notation abrégée ; elle correspond sur le plan fonctionnel à l'adresse 127.0.0.1 sous IPv4).


 


En résumé, on peut considérer en première lecture qu'une adresse IPv6 est composée d'une partie réseau et d'une partie hôte ayant chacune une longueur de 64 bits. Le préfixe réseau est donc /64 et le préfixe de site est généralement /48.

Actuellement, l'espace d'adressage IPv6 est subdivisé en plusieurs blocs, dont certains sont alloués, et d'autres réservés pour une allocation future. La partie de l'espace d'adressage destinée à une allocation immédiate représente seulement 15% de la totalité de l'espace disponible.

Sur le plan de la structure des paquets, IPv6 offre une structure semblable à celle des paquets IPv4 ; cependant, certains champs présents dans les entêtes IPv4 ont été modifiés (ToS, TL, TTL) et d'autres complètement supprimés (HL, Flags, Offset, HCS). Naturellement, la longueur des adresses passe de 32 à 128 bits et le paquet est traité comme un bloc de mots de 64 bits (32 pour IPv4). Au total, l'entête d'un paquet IPv6 contient moins de champs que celle d'un paquet IPv4 ; les schémas ci-dessous montrent les différences entre les entêtes de ces 2 versions d'IP.



 






 


Il ressort de ces schémas que l'entête IPv6 dont la taille est de 40 octets a été simplifié par rapport à celle de IPv4 ; elle contient les champs suivants :

Version (4 bits) : version du protocole (la valeur de ce champ est 6) ;

Trafic Class (8 bits) : ce champ est aussi nommé DS ;

Flow Label (20 bits) : qualité de service exigée pour l'acheminement du paquet ;

Payload Length (16 bits) : taille du paquet (en-tête non compris) ;

Next Hdr (8 bits) : identification du type de paquet encapsulé dans le paquet IP (champ des données) ;

Hop Limit (8) : équivalent au TTL d'un paquet IPv4 ; son contenu est décrémenté à chaque noeud de transit ; lorsque sa valeur atteint 0, le paquet est détruit ;

Adresse Source (128 bits) : adresse de l'expéditeur du paquet ;

Adresse Destination (128 bits) : adresse du destinataire du paquet.



 


 

Compte tenu de l'absence de " jour J" pour la transition de IPv4 vers IPv6, la cohabitation entre ces deux protocoles s'avère indispensable.

On peut s'imaginer dans un premier temps que les systèmes IPv6 vont constituer des "îlots" dans une "mer" IPv4, avant que la tendance ne s'inverse. Dans le premier cas, les échanges IPv6 peuvent se faire soit en dotant les systèmes IPv6 d'une double-pile "IPv4-IPv6", soit en faisant appel à des passerelles applicatives qui procèdent à des "traduction" de protocole, soit en encapsulant les paquets IPv6 dans des paquets IPv4 ; le champ "Protocole" du paquet IPv4 prend dans ce cas la valeur 41 (ou 29 en héxadécimal).



 


" Pour aller plus loin... " :

Gisèle Cizault : IPv6. Théorie et pratique. O'Reilly, 3ème édition.


 






3 IPv6 et DNS
 

Puisque dans une période de transition il est prévu la cohabitation entre IPv4 et IPv6, il est nécessaire de trouver des mécanismes pour tenir compte de cette situation au niveau du DNS. En effet, à partir d'un nom de domaine uniquement, il n'est pas possible de savoir si la machine associée est sur une plate-forme IPv4 ou IPv6. C'est ainsi que de nouveaux RR ont été introduits pour tenir compte des systèmes qui fonctionnent dans un environnement IPv6 :

l'enregistrement AAAA pour spécifier une adresse IPv6.

 

...

> ipv6.nic.fr.               IN       NS    cyclope.ipv6.nic.fr.
 cyclope.ipv6.nic.fr.      IN      A      192.134.4.240
                                IN      AAAA 2001:660:111:1:2e0:29ff:fe62:323e
...



 

Dans cet exemple, 2 adresses IP sont associées à la machine cyclope.ipv6.nic.fr, notamment une adresse IPv4 et une adresse IPv6 ;

l'enregistrement PTR pour la résolution inverse IPv6 ; cet enregistrement est identique à celui qui est utilisé dans l'environnement IPv4 ; il concerne cependant les machines possédant des adresses IPv6 et utilise le domaine ip6.int (l'équivalent de in-addr.arpa pour la résolution inverse en IPv4). L'utilisation du domaine ipv6.int est temporaire ; il est en train d'être remplacé par le domaine ip6.arpa (RFC 3152);

 

...

$ORIGIN 1.0.0.0.0.8.1.1.0.6.6.0.1.0.0.2.ip6.int.
9.4.0.0.0.0.0.0.4.3.1.0.2.9.1.0
IN
PTR
ns3.nic.fr.

...

" Pour aller plus loin... " :

    RFC 1881
    RFC 1883 à RFC 1887
    RFC 2460
    RFC 2672
    RFC 2673
    RFC 2674