MOOC:Compagnon Act43-s7
From Livre IPv6
> MOOC>Contenu>Séquence 4 > Activité 44
Contents
- 1 Interopérabilité avec les services IPv4 par traduction
Interopérabilité avec les services IPv4 par traduction
Contexte d'utilisation de la traduction des en-têtes IP
Le besoin de traduction d'un protocole vers un autre apparait si l'on souhaite faire communiquer 2 machines ne parlant chacune qu'un seul de ces 2 protocoles, le traducteur jouant alors un rôle d'intermédiaire (ou relais) dans la communication. Ce besoin de traduction est la conséquence de l'échec du plan de migration envisagé au début et reponsant sur la double pile. Les nouveaux noeuds ne peuvent plus avoir à la fois une adresse IPv4 et IPv6 du fait de l'épuisement des adresses IPv4. Cet état de fait conduit à l'apparition de noeuds avec IPv6 uniquement. Comme il y a des noeuds qui sont toujours en IPv4 uniquement car ils n'ont pas commencé à migrer. Ce pose alors le problème de la communication entre les noeuds uniquement IPv6 avec ceux uniquement IPv4. La traduction est la solution à ce problème et constitue le composant essentiel au nouveau plan de migration qui peut se décrire de manière synthétique suivante: "tout le monde en IPv4" -> "certains réseaux en v4 seul et certains en v6 seul" -> "tout le monde en IPv6".
Afin de respecter les modèles d'architectures en couches (OSI, TCP/IP), la traduction n'intervient qu'entre protocoles d'un même niveau. On pourra donc distinguer la traduction niveau applicatif, niveau transport et niveau réseau. Dans le cas du protocole IP (niveau réseau), il s'agit bien sûr de faire communiquer 2 machines, chacune n'utilisant qu'une version du protocole, IPv4 ou IPv6. Dans le cadre de communication client vers serveur, il y aura donc 2 cas :
- le client ne parle qu'IPv6 et le serveur ne parle qu'IPv4,
- le client ne parle qu'IPv4 et le serveur ne parle qu'IPv6.
Aujourd'hui, le cas le plus fréquent est le premier, les serveurs gardant majoritairement une connectivité IPv4. Il s'agit donc de mettre en place un dispositif pour offrir une connectivité IPv4 aux client IPv6. Ainsi, ils pourront accéder à des serveurs qui n'ont toujours pas IPv6. Un moyen pour offrir cette connectivité est de traduire automatiquement les paquets IPv6 du client en IPv4 pour les envoyer au serveur, et de faire la traduction inverse au retour. Un tel dispositif devra naturellement se situer en coupure des communications entre le client et le serveur, afin d'en intercepter les paquets pour les traduire, et les ré-émettre sur le réseau dudestinataire. Ce dispositif est comparable au traditionnel NAT (Network Address Translator) utilisé entre les réseaux IPv4 privés et public. Mais dans notre cas, ce dispositif n'effectue pas une simple translation d'un espace d'adressage à un autre, mais une véritable traduction de l'en-tête. Le traducteur assurant le relais entre un réseau IPv6 (coté client) et un réseau IPv4 (coté serveur) est appelé NAT64. La figure 1 représente la topologie d'utilisation du NAT64.
Le RFC 6144 détaille les cas d'utilisation de la traduction entre IPv6 et IPv4 en distinguant l'Internet et un réseau. Ainsi un réseau dont le plan d'adressage est administrable est distingué de celui qui ne l'est pas. Le RFC indique notamment que le cas du client IPv4 accédant à un serveur de l'Internet IPv6 n'est pas d'actualité et d'autres solutions que la traduction IP seront à envisager. Les cas d'utilisation communs de la traduction sont soit un client d'un réseau IPv6 accédant à un serveur de l'Internet IPv4 ou soit des clients de l'Internet IPv6 accédant à un serveur d'un réseau IPv4. Dans le premier cas, le traducteur est du coté du client IPv6 pour le rendre capable d'accéder à des contenus disponibles uniquement sur l'Internet IPv4. Dans le RFC 7269, ce type de NAT64 est appelé NAT64-CGN (Carrier-Grade NAT). Dans le second cas, le traducteur est du coté du serveur IPv4 pour rendre le service accessible aux clients de l'Internet IPv6. Le RFC 7269 qualifie ce NAT64 de NAT64-FE (Front End) dans la mesure où le NAT64 est devant les serveurs au sein d'un data center
Quelque soit le cas, la traduction est une solution temporaire et vise à faciliter le déploiement d'IPv6 dans l'Internet IPv4.
Un contexte pour lequel ce type de solution est pertinent est celui des réseaux mobiles 3GPP 3rd Generation Partnership Project) [1]. En effet, dans la norme 3GPP, les sessions PDP (Packet Data Protocol) mises en place pour la connexion de données ne peuvent être double pile que depuis la Release-9. Pour avoir un support double pile sur ces réseaux, il est nécessaire d'ouvrir 2 contextes, ce qui peut être préjudiciable pour le dimensionnement des équipements. Une solution est alors de ne déployer qu'une version du protocole sur le réseau mobile. Les équipements mobiles seront donc connectés à un réseau IPv6 et la compatibilité avec les services IPv4 sera assurée par la traduction d'en-tête IP.
Principe de la traduction entre protocoles IP
La traduction entre protocoles IP comporte essentiellement 2 composants: une transposition protocolaire et une traduction des adresses. Le premier composant transpose les champs de l'en-tête IP (a l'exception des adresses) en conservant la sémantique du champ original. Le second composant met en correspondance les adresses source et destination du paquet reçu dans une version du protocole IP dans leur équivalent dans l'autre version du protocole IP.
Les traductions peuvent être faites sans état (stateless) ou bien avec état (stateful). Dans le premier cas, le traducteur n'a aucune mémoire. Chaque paquet est traité isolément. Cela permet donc de traiter une bien plus grande quantité de paquets et assure les meilleures performances et, surtout, le passage à l'échelle. Dans le second cas, celui de la traduction avec état, le traducteur se souvient de la correspondance qu'il a effectué entre les 2 versions du protocole, par exemple parce que l'adresse IPv6 n'est pas en correspondance univoque (1:1) avec l'adresse IPv4. Nécessitant une table des correspondances en mémoire, la traduction avec état passe moins à l'échelle. Mais, dans certains cas, elle est la seule réaliste, puisqu'on ne peut pas stocker toutes les informations dans une seule adresse, surtout si elle est IPv4. Si le composant de la transposition des champs de l'en-tête s'effectue sans état, le composant de traduction des adresses fonctionne avec ou sans état.
Transposition des champs de l'en-tête (RFC 6145)
Il faut ici bien situer le problème : le traducteur qui reçoit un paquet avec un en-tête IPvX doit créer un nouvelle en-tête IPvY à partir des informations à sa disposition (les données de l'en-tête IPvX + données de configuration).
Si l'on observe les en-têtes IPv4 et IPv6 comme dans l'activité 21, on remarque qu'il y a un certain nombre de champs qui ont une sémantique très proche (TTL/Hop limit, DiffServ, Payload Length). Pour ces derniers, la transposition est évidente. Les tableaux ci-dessous résument les informations qu'il faut utiliser pour renseigner les différents champs des en-têtes IPv4 ou IPv6 que doit créer le traducteur (Voir RFC6145 Section 4)
Création d'un en-tête IPv6 à partir d'un en-tête IPv4
Champ de l'en-tête IPv4 | Champ dans le nouvel en-tête IPv6 | Valeur |
---|---|---|
Version | Version | 6 |
IHL | Ignorer | |
Type Of Service | Traffic Class | Recopier |
Flow label | 0 | |
Packet Length | Payload Length | Packet Length - IHL (en-tête IPv4 + options) + 8 (si extension de fragmentation) |
Ident./Flag/Offset | Extension Fragmentation | Créer une extension de fragmentation à partir des valeurs IPv4 |
TTL | Hop Limit | Décrémenter de 1 |
Protocol | Next Header | Recopier ou extension de fragmentation si besoin. ICMPv4 (1) devient ICMPv6 (58). |
Checksum | Ignorer | |
Source Address | Source Address | Voir le paragraphe Traduction des adresses |
Destination Address | Destination Address | Voir le paragraphe Traduction des adresses |
Options IPv4 | Les options IPv4 ne sont pas traduites. |
Création d'un en-tête IPv4 à partir d'un en-tête IPv6
Champ de l'en-tête IPv6 | Champ dans le nouvel en-tête IPv4 | Valeur |
---|---|---|
Version | Version | 4 |
IHL | 5 | |
Traffic Class | Type of Service | Recopie |
IPv6 Flowlabel | Ignorer | |
Payload Length | Packet Length | Payload Length + IHL |
Ident./Flag/Offset | 0 | |
Hop Limit | TTL | Décrémenter de 1 |
Next Header | Protocol | Recopier. ICMPv6 (58) devient ICMPv4 (1) |
Checksum | Calculer une fois l'en-tête créé | |
Source Address | Source Address | Voir le paragraphe Traduction des adresses |
Destination Address | Destination Address | Voir le paragraphe Traduction des adresses |
Extensions IPv6 | Les extensions d'en-tête IPv6 ne sont pas traduites. |
Traduction des adresses
La traduction d'adresse d'un protocole à un autre suit le même principe que celui appliqué dans les passerelles NAT traduisant des adresses IPv4 privées vers des adresses IPv4 publiques (appelé aussi NAT44). Le traducteur reçoit un paquet avec des adresses source et destination chacune dans un des espaces d'adressage, et doit traduire ces adresses dans l'autre espace d'adressage pour pouvoir ré-émettre le paquet.
Le traducteur doit donc décider d'une correspondance entre une adresse de l'espace d'adressage IPv6 et une adresse de l'espace d'adressage IPv4 et vice et versa à la fois pour l'adresse source et l'adresse de destination.
Afin de faire cette correspondance, le NAT64 dispose d'un ensemble d'adresses IPv6 et d'un ensemble d'adresses IPv4 comme le montre la figure 2. L'ensemble d'adresses IPv6 du NAT64 (notée N6) vont servir à représenter les adresses IPv4 (notée H4) dans le réseau IPv6. Et de manière similaire pour l'ensemble des adresses IPv4 du NAT64 (notée N4), elles vont représenter les adresses IPv6 (notée H6) dans le réseau IPv4.
Figure 2: Les adresses utilisées pour la traduction
Lorsque l'adresse IPv6 comporte l'adresse IPv4, la mise en correspondance d'une adresse IPv4 avec une adresse IPv6 est évidente. En effet, représenter une adresse IPv4 dans l’espace d’adressage IPv6 est simple car ce dernier est assez large pour contenir l’ensemble des adresses IPv4. Il est donc toujours possible de trouver une adresse IPv6 à faire correspondre avec une adresse IPv4. Le RFC 6052 décrit la méthode pour créer une adresse IPv6 à partir d’une adresse IPv4. La méthode consiste à inclure les 32 bits l'adresse IPv4 à la suite d'un préfixe IPv6. Selon la longueur du préfixe IPv6, le mécanisme d'inclusion de l'adresse IPv4 est différent, comme précisé dans le RFC 6052 section 2.2. Une adresse IPv6 embarquant une adresse IPv4 est qualifiée soit IPv4 traduisable si elle est unique globalement, routable et donc attribuée à un noeud IPv6, soit de IPv4 convertible si elle ne fait que représenter une adresse IPv4 dans l'espace d'adressage IPv6. Selon la cas d'utilisation du NAT64, le préfixe d'une adresse IPv6 embarquant une adresse IPv4 peut être le préfixe dit Well-Known Prefix (WKP) ou un préfixe pris dans le plan d'adressage de l'organisation déployant le NAT64 dit "Network-Specific Prefix (NSP). Le WKP se définit par 64:ff9b::/96.
La traduction d'adresses utilisant une adresse IPv6 embarquant une adresse IPv4 est qualifiée de sans état. Le point essentiel dans ce mode de traduction est que le noeud IPv4 est représenté dans l'adressage IPv6 par une adresse IPv6 embarquant son adresse IPv4. La traduction peut se représenter de la manière suivante:
IPv4 <-------> IPv6 H4 pref64:H4
où pref64 représente un préfixe IPv6 pour constituer une adresse IPv6 embarquant une adresse IPv4 (notée ici H4) selon la méthode indiquée par le RFC 6052. L'adresse IPv6 ainsi constitué est noté pref64:H4. Le préfixe IPv6 utilisé sera un préfixe routé vers le traducteur, afin que celui-ci assure son rôle de relais. L'adresse IPv6 ainsi créée permet d'identifier un noeud IPv4 dans l'espace d'adressage IPv6.
L’intérêt de ce mécanisme est que les adresses peuvent être traduites indépendamment. Il est donc transparent pour l’utilisateur.
Lorsque l'adresse IPv6 n'embarque pas l'adresse IPv4 alors mettre en correspondance une adresse IPv6 avec une adresse IPv4 demande un traduction d'adresse avec état. En effet, comme il est impossible de représenter une adresse IPv6 dans l’espace d’adressage d'IPv4. La mise en correspondance de l'adresse IPv6 avec une adresse IPv4 est faite dynamiquement par le traducteur. Celui-ci utilise une de ses adresses IPv4. Il doit alors retenir cette association dans un état. Par exemple, dans le cas d'un traducteur entre un client IPv6 du réseau local et un serveur de l'Internet IPv4, le traducteur ne sait pas comment traduire l'adresse source du paquet IPv6 : il doit utiliser une de ses propres adresses IPv4. Le paquet retour contient alors cette adresse comme destination. Le traducteur a bien besoin ici d'un état : la correspondance choisie pour le paquet aller entre l'adresse source IPv6 et l'adresse source IPv4 . La traduction est alors dites à état car elle fait intervenir cette information. La traduction peut se représenter de la manière suivante:
IPv6 ----------> IPv4 H6 (état H6->H4) H4 IPv6 <--------- IPv4 H6 (état H6<-H4) H4
Avec notée H6 l'adresse IPv6 et H4 l'adresse IPv4.
Mécanismes complémentaires
Traduction des paquets ICMP
Comme décrit dans l'activité 31, les messages ICMP servent au contrôle de la connectivité de bout en bout, ainsi qu'aux rapports d'erreurs d'acheminement des paquets. La présence d'un traducteur sur ce chemin ne doit pas perturber ce mécanisme, sous peine de grandement complexifier son fonctionnement. Celui-ci doit donc s'efforcer de traduire les messages ICMPv4 en messages ICMPv6, et inversement, pour être ainsi transparent dans ces échanges.
Le traducteur recevant un message ICMPv4 (resp. ICMPv6) doit donc interpréter le contenu de ce message pour créer un message ICMPv6 (resp. ICMPv4) à retransmettre. L'en-tête IP est traduit selon les mécanismes présentés plus haut. L'en-tête ICMPv4 (resp. ICMPv6) doit donc être transformé par le traducteur en en-tête ICMPv6 (resp. ICMPv4). Cette traduction est facilitée par le fait que les sémantiques des messages de ces 2 protocoles ne sont pas très éloignées : les fonctions supplémentaires de découverte de voisins intégrées dans ICMPv6 ne sont valides que sur le lien et ne seront pas traduites. De plus, les paquets ICMP n'ont pas besoin d'informations contextuelles pour être interprétés. La traduction des messages ICMP est dite sans état. Le RFC 6145 définit le mécanisme pour effectuer cette traduction.
Le champ ICMP type devra être ajusté dans certains cas lors de la traduction car les valeurs pour la même sémantique de messages peuvent être différentes entre les versions du protocole. Par exemple, les messages Echo Request et Reply sont identifiés par la valeur du champ ICMP type 8 et 0 en ICMPv4, 128 et 129 en ICMPv6. Certains messages ICMPv4 ne seront pas traduits car leur sémantique (obsolète) n'a pas été transposée dans ICMPv6.
La traduction de l'en-tête ICMP modifie les en-têtes des niveaux réseau et transport. Elle impacte donc la somme de contrôle calculée pour ces en-têtes. Le champ checksum doit donc être recalculé suite à la traduction.
Relais-Traducteur DNS auxiliaire (RFC 6147)
Les clients IPv6 ne pouvant pas initier une communication avec des serveurs n'ayant qu'une adresse IPv4, il est nécessaire de les « tromper » en fabriquant dynamiquement des adresses IPv6. Cette fabrication d'une adresse IPv6 pour le serveur IPv4 en revient à relais DNS auxiliaire '('DNS Application Layer Gateway (DNS-ALG)). Celui-ci convertit l'adresse IPv4 obtenue par la résolution d'adresses en une adresse IPv6 imbriquant une adresse IPv4. En quelque sorte, le relais DNS auxiliaire ment en répondant au client par un enregistrement de type AAAA (adresse IPv6) à partir de l'enregistrement réel A (adresse IPv4) du serveur.
Du point de vue du client, relais DNS auxiliaire se comporte comme n'importe quel serveur DNS de rattachement. Il accepte les requêtes et les transfère au serveur DNS de rattachement, s'il ne dispose pas déjà de l'information dans son cache local. Mais ce DNS ment car il est capable de répondre positivement à la demande d'une ressource inexistante. Un relais DNS effecuant la résolution en IPv6 de nom de domaine enregistré uniquement en IPv4 est appelé DNS64.
La figure 2 montre un chronogramme des opérations de résolution d'adresses avec un DNS64. Le préfixe IPv6 utilisé dans cet exemple pour construire une adresse IPv6 IPv4 convertible est de type NSP de longueur 96 bits (2001:db8:cafe::/96). Les opérations sont les suivantes:
- lorsqu'un client IPv6 formule une requête de type AAAA pour résoudre le nom d'un serveur,
- le DNS64 la transfère au serveur DNS en charge du nom de domaine du serveur,
- si la réponse est vide, le DNS64 renvoie une requête de type A pour le même nom de serveur au serveur DNS,
- le DNS64 reçoit une une réponse de type A,
- le DNS64 applique alors la traduction de l'adresse IPv4 obtenue en adresse IPv6, comme spécifié dans la RFC 6052. Il combine le préfixe IPv6 aux 32 bits de chacune des adresses obtenues comme résultats. L'adresse IPv6 obtenue sera transmise au client en réponse à sa requête AAAA.
Les versions récentes du logiciel serveur DNS BIND/Named peuvent assurer le rôle de DNS64. Le logiciel Trick or Treat Deamon (TOTD) peut également être utilisé pour cet usage.
Pour aller plus loin : Limitations de la traduction
(MTU/Fragmentation, Sécurité, Compatibilité des applications)
Mécanisme de transition NAT64/DNS64
NAT64 et DNS64 constituent ensemble une technique de traduction de niveau réseau. Le fonctionnement du NAT64 fonctionne sans état ou avec état en fonction du mode de traduction de l'adresse source et de l'adresse de destination du paquet reçu par le traducteur.
Le NAT64 sans état indique que les adresses IPv6 du paquet sont traduites chacune par une traduction sans état à l'aide de l'algorithme de correspondance défini dans le RFC 6052. Du fait de son caractère sans état, ce traducteur passe mieux à l'échelle et maintient l'indépendance du réseau vis à vis des hôtes. Lorsque le réseau est indépendant des hôtes, une panne dans le réseau n'entraine pas la ré-initilisation des communications en cours. C'est un principe pour assurer la robustesse du système. Enfin, la robustesse est renforcé si plusieurs NAT64 sont déployés en parallèle. Ils ne nécessitent pas de synchronisation.
NAT64 sans état que le NAT64 avec état et maintient la transparence du réseau de bout en bout. Mais elle ne peut pas être utilisée pour tous les scénarios. La traduction avec état (section 3.2.2) peut alors prendre le relais.
The key to the stateless translation is in the fact that the IPv4 address is directly embedded in the IPv6 address. A limitation of stateless NAT64 translation is that it directly translates only the IPv4 options that have direct IPv6 counterparts, and that it does not translate any IPv6 extension headers beyond the fragmentation extension header; however, these limitations are not significant in practice. With a stateless NAT64, a specific IPv6 address range will represent IPv4 systems within the IPv6 world. This range needs to be manually configured on the translation device. Within the IPv4 world all the IPv6 systems have directly correlated IPv4 addresses that can be algorithmically mapped to a subset of the service provider's IPv4 addresses. By means of this direct mapping algorithm there is no need to keep state for any translation slot between IPv4 and IPv6. This mapping algorithm requires the IPv6 hosts be assigned specific IPv6 addresses, using manual configuration or DHCPv6. Stateless NAT64 will work very successful as proven in some of the largest networks, however it suffers from some an important side-effect: Stateless NAT64 translation will give an IPv6-only host access to the IPv4 world and vice versa, however it consumes an IPv4 address for each IPv6-only device that desires translation -- exactly the same as a dual-stack deployment. Consequentially, stateless NAT64 is no solution to address the ongoing IPv4 address depletion. Stateless NAT64 is a good tool to provide Internet servers with an accessible IP address for both IPv4 and IPv6 on the global Internet. To aggregate many IPv6 users into a single IPv4 address, stateful NAT64 is required.
Malgré ses avantages, certain remarque http://blog.ipspace.net/2011/05/stateless-nat64-is-useless.html[] que le manque d'adresse IPv4 rend le NAT64 sans état inutile.
Figure 3: Type des adressses utilisées pour un NAT64 sans état
Le RFC 6146
Le NAT64 devrait donc être appelé NAPT (Network Address AND PORT Translation) car, dans l'écrasante majorité des cas, le traducteur n'aura pas assez d'adresses IPv4 pour tous les clients IPv6 qu'il sert (si on avait assez d'adresses v4, il n'y aurait guère de raison de migrer vers v6).
Figure 4: Type des adressses utilisées pour un NAT64 avec état
Stateful NAT64 multiplexes many IPv6 devices into a single IPv4 address. It can be assumed that this technology will be used mainly where IPv6-only networks and clients (ie. Mobile handsets, IPv6 only wireless, etc...) need access to the IPv4 internet and its services. The big difference with stateful NAT64 is the elimination of the algorithmic binding between the IPv6 address and the IPv4 address. In exchange, state is created in the NAT64 device for every flow. Additionally, NAT64 only supports IPv6-initiated flows. Unlike stateless NAT64, stateful NAT64 does `not' consume a single IPv4 address for each IPv6 device that wants to communicate to the IPv4 Internet. More practically this means that many IPv6-only users consume only single IPv4 address in similar manner as IPv4-to-IPv4 network address and port translation works. This works very well if the connectivity request is initiated from the IPv6 towards the IPv4 Internet. If an IPv4-only device wants to speak to an IPv6-only server for example, manual configuration of the translation slot will be required, making this mechanism less attractive to provide IPv6 services towards the IPv4 Internet.
Exemple d'un déploiement d'un NAT64 à état sur le réseau mobile
Comme décrit en début de chapitre, le déploiement d'un réseau seulement IPv6 peut s'avérer intéressant dans le cadre d'un réseau mobile type UMTS (3G). L'interopérabilité avec les services IPv4 peut alors être réalisée en traduisant les paquets IPv6 en paquets IPv4 à travers un dispositif NAT64, couplé à un relais-traducteur DNS64. L'intérêt d'un tel dispositif est qu'il est relativement simple à configurer côté équipement client : il suffit que celui-ci utilise l'adresse du DNS64 en tant que serveur de résolution de nom. La figure 5 montre la structure du réseau du point de vue IP. Le client est un mobile souvent un smartphone noté ME (Mobile Equipment) connecté à un réseau mobile interconnecté avec l'infrastructure IP au moyen d'un routeur noté GGSN (Gateway GPRS Support Node).
Figure 5: Accès à un serveur en IPv6
Dans la figure 5, un client cherche ici à joindre le service hébergé sur le serveur IPv6 example.org.
- Pour en connaître l'adresse IP, il interroge donc le serveur de résolution de nom, en l'occurrence le dispositif DNS64. L'interrogation du client concerne les enregistrements IPv6 (AAAA) car ceux-ci sont les seuls qui seront utilisables depuis le client connecté sur un réseau IPv6 seul (étape 1).
- Ce nom de domaine possède une résolution en IPv6 (il possède un enregistrement AAAA). Le dispositif DNS64 se comporte alors comme un résolveur de nom normal et transfère cet enregistrement au client en guise de réponse (étape2).
- Le client peut alors se connecter directement au service à partir de l'adresse IPv6 obtenue (étape 3).
Figure 6: Accès à un serveur en IPv4
Dans la figure 6, le client cherche maintenant à joindre un autre service, comme old.org. Or ce service ne possède pas de connectivité IPv4.
- Comme précédemment, le client va interroger son résolveur de nom, le DNS64, sur la présence d'un enregistrement AAAA pour le service (étape1).
- Le DNS64 interroge le service DNS (étape 2) sur les différentes adresses disponibles
- Le DNS64 n'obtient que des adresses de type IPv4 (enregistrement A) (étape 3).
- Ces enregistrements ne correspondent pas aux adresses attendues par le client. Le DNS64 va alors transformer les adresses IPv4 obtenues du service en adresses IPv6 afin de satisfaire la demande du client. Cette traduction d'adresse se fait conformément au RFC 6052 : dans notre exemple, le DNS64 complète le préfixe 64:ff9b::/96 avec l'adresse IPv4 obtenue (étape 4).
- Le client utilise donc cette adresse IPv6 comme destinataire de la communication. Ici, le navigateur du client ouvre une connexion TCP à destination d'une adresse appartenant au préfixe 64:ff9b::/96. Ce préfixe est routé dans l'infrastructure du réseau mobile vers le dispositif NAT64. Celui-ci reçoit donc les paquets en provenance du client et à destination de l'adresse transformée par le DNS64 (étape 5).
- Le NAT64 doit maintenant traduire ces paquets d'IPv6 vers IPv4. Il créé donc un en-tête IPv4 à partir des champs de l'en-tête IPv6, comme spécifié dans le RFC 6145. Pour l'adresse destination du paquet IPv4, le traducteur applique la transformation inverse de celle appliquée par le DNS64 : il extrait l'adresse IPv4 en soustrayant de l'adresse destination du paquet IPv6 le préfixe utilisé pour la traduction d'adresse dans l'infrastructure mobile, en l'occurrence 64:ff9b::/96. Ne pouvant représenter l'adresse IPv6 du client dans une adresse IPv4, le traducteur choisit une des adresses IPv4 à sa disposition comme adresse source (cette adresse devra être routée vers ce dispositif afin que le traducteur capte aussi les paquets retour à destination du client). Il conserve une trace en mémoire de la correspondance entre l'adresse du client et l'adresse IPv4 choisie, ainsi que des ports TCP source et destination utilisés comme informations contextuelles de la connexion afin de pouvoir effectuer la traduction inverse. Après avoir fait ces traitements, le NAT64 transmet des paquets IPv4 vers le service old.org fonctionnant avec le protocole du siècle dernier (étape 6).
Conclusion
La traduction des paquets d'une version du protocole IP vers une autre version rend possible des communications entre deux réseaux utilisant chacun des versions différentes, et ce de façon quasi transparente pour les extrémités. NAT64 effectue une traduction d'adresses de IPv6 vers IPv4 en sortie du réseau moderne vers le réseau ancien et l'inverse lorsque la réponse arrive.
Cette solution a les avantages et les inconvénients du NAT44 : si la configuration des clients est simple, ce mécanisme connait certaines limites comme la faible capacité à passer à l'échelle des traducteurs ainsi que l'impact sur les protocoles applicatifs (si ceux-ci transportent des adresses IP).
Il faut de plus noter, dans le cas d'un client IPv6 uniquement, que les applications et les protocoles utilisés par ce client devront être compatibles avec IPv6. Dans certains cas, ces conditions ne sont pas remplies et le client ne pourra pas alors profiter de l'interopérabilité rendue possible par le NAT64.
Le NAT64 constitue le composant du nouveau plan de migration à la place du plan envisagé au début et reponsant sur la double pile. Ce nouveau plan peut se décrire de manière synthétique par "tout le monde en IPv4" -> "certains réseaux en v4 seul et certains en v6 seul" -> "tout le monde en IPv6". Le premier originel est devenu obsolète car les noeuds ne peuvent plus avoir à la fois une adresse IPv4 et IPv6 du fait de l'épuisement des adresses IPv4. Cet état de fait conduit à l'apparition de noeuds avec IPv6 uniquement. Comme il y a des noeuds qui sont toujours en IPv4 uniquement car ils n'ont pas commencé à migrer. Ce pose alors le problème de la communication entre les noeuds uniquement IPv6 avec ceux uniquement IPv4. Les solutions de traduction comme NAT64 trouvent donc leur intérêt pour faire communiquer des machines utilisant des versions différentes du protocole IP.
Malgré ces inconvénients, ce mécanisme se développe de plus en plus car il devient intéressant aujourd'hui de pouvoir déployer des réseaux seulement IPv6 à la place de réseaux IPv4 privés (notamment quand l'espace d'adressage privé n'est plus suffisant pour adresser l'ensemble des clients). Certains opérateurs mobiles ont notamment fait ce choix pour leur réseau.
Pour aller plus loin
NAT64/DNS64
- Bagnulo, M.; Garcia-Martinez, A. and Van Beijnum, I. (2012). IEEE Communications Magazine, Vol. 50, No. 7, July. The NAT64/DNS64 tool suite for IPv6 transition.
- Cisco White paper (2011). NAT64—Stateless versus Stateful
- Cisco White paper (2012). NAT64 Technology: Connecting IPv6 and IPv4 Networks
- Poly Introduction IPv6 (JL) 6.5.4 Les relais de niveau réseau (NAT64)
- Poly Medi6 Lab, 3.3 Mise en place d'un relai de niveau réseau : NAT64 (pages 32 - 43)
RFC et leur analyse par S. Bortzmeyer
- RFC 6052 IPv6 Addressing of IPv4/IPv6 Translators Analyse
- RFC 6144 Framework for IPv4/IPv6 Translation Analyse
- RFC 6145 IP/ICMP Translation Algorithm Analyse
- RFC 6146 Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers Analyse
- RFC 6147 DNS64: DNS extensions for Network Address Translation from IPv6 Clients to IPv4 Servers Analyse
- RFC 6333 Dual-Stack Lite Broadband Deployments Following IPv4 Exhaustion Analyse
- RFC 7051 Analysis of Solution Proposals for Hosts to Learn NAT64 Prefix
- RFC 7050 Discovery of the IPv6 Prefix Used for IPv6 Address Synthesis Analyse
- RFC 7269 NAT64 Deployment Options and Experience Analyse