Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

RFC 7225: Learning NAT64 PREFIX64s using Port Control Protocol (PCP)

Date de publication du RFC : Mai 2014
Auteur(s) du RFC : M. Boucadair (France Telecom)
Chemin des normes
Réalisé dans le cadre du groupe de travail IETF pcp
Première rédaction de cet article le 19 mai 2014


Lorsqu'on est situé derrière un routeur NAT64, parce qu'on n'a pas d'adresse IPv4 et qu'on dépend de ce routeur pour la communication avec les vieux systèmes qui sont encore uniquement en IPv4, on peut, la plupart du temps, ignorer ce que fait ledit routeur et, notamment, le préfixe qu'il utilise pour synthétiser des adresses IPv6 à partir des adresses IPv4 des systèmes archaïques. C'est la cuisine interne du routeur. Mais, parfois, ce n'est pas possible et on aurait besoin de connaître ce préfixe pour faire la synthèse d'adresses IPv6 soi-même. Ce nouveau RFC décrit une option du protocole PCP permettant d'apprendre le préfixe de synthèse.

Un petit rappel sur NAT64, normalisé dans le RFC 6146. Lorsqu'on a un réseau purement IPv6, mais qu'on veut pouvoir communiquer avec les machines purement IPv4, une des techniques possibles est d'installer un routeur NAT64 qui va faire de la traduction d'adresses d'IPv6 vers IPv4 et retour. Les machines du réseau étant purement IPv6, il faut qu'elles trouvent une adresse IPv6 lorsqu'elles demandent, même si la machine avec qui elles veulent communiquer n'en a pas. NAT64 est donc inséparable de DNS64 (RFC 6147) qui synthétise ces adresses IPv6 en les préfixant avec un préfixe spécial, que le routeur NAT64 reconnaîtra (RFC 6052). Le choix de ce préfixe est une décision locale et les machines du réseau local purement IPv6 ne connaissent pas ce préfixe. La plupart du temps, cela ne les gêne pas. Elles croiront parler en IPv6 avec leur partenaire. Mais, parfois, cela pourrait être utile. Par exemple, dans certains protocoles (par exemple SIP), il y a des références : Alice écrit à Bob en IPv6, le routeur NAT64 transmet à Bob en IPv4 et Bob, voyant une session en IPv4, répond à Alice « envoies les paquets à l'adresse 192.0.34.19 ». Le routeur NAT64 n'analyse pas les paquets SIP et ne peut donc pas traduire cette référence. C'est donc Alice qui doit le faire, ce qui implique de connaître le préfixe à utiliser, pour que le routeur NAT64 sache quoi faire de ces paquets. Le RFC 7051 faisait le tour des possibilités existantes pour découvrir ce préfixe et le RFC 7050 proposait une solution. Notre RFC 7225 en suggère une autre.

PCP (RFC 6887) est un protocole (assez récent et encore très peu déployé) de communication entre une machine sur un réseau local et la box qui relie ce réseau à l'Internet. Son utilité principale est pour l'ouverture de trous dans le NAT, pour permettre, par exemple, les connexions entrantes. Il permet la définition d'options qui ajoutent des possibilités comme celle décrite dans ce RFC, PREFIX64.

La section 3 de notre RFC décrit le cahier des charges. On veut :

  • distinguer les adresses IPv6 natives de celles qui ont été synthétisées par NAT64.
  • pouvoir synthétiser des adresses IPv6 pour NAT64, à partir d'adresses IPv4, même quand DNS64 n'est pas disponible ou utilisable.
  • permettre l'utilisation de DNSSEC.
  • gérer des cas compliqués comme la découverte du préfixe lorsque le préfixe dépend de la destination.
  • fonctionner même s'il y a plusieurs routeurs NAT64 sur le réseau local (avec des préfixes différents, sinon, cela ne serait pas drôle).

La section 4 du RFC 7051 contient des études de cas plus détaillées. Par exemple, on peut souhaiter avoir son propre résolveur DNS, sur sa machine, et donc on doit faire la synthèse des adresses IPv6 soi-même. Cela nécessite de connaître le préfixe utilisé sur ce réseau local. Il existe de nombreuses raisons pour avoir un résolveur local sur sa machine mais le RFC en cite surtout une : pouvoir faire du DNSSEC proprement, c'est-à-dire avec validation locale. Autre cas où un mécanisme pour apprendre le préfixe est nécessaire, celui cité plus haut où une application transmet des références, sous forme d'une adresse IP. Cela ne concerne pas que SIP, cité plus haut (RFC 3261 et RFC 4566) mais aussi WebRTC (RFC 8825), BitTorrent (lorsque le tracker indique les adresses des leechers et seeders), etc.

La section 4 du RFC décrit le format de la nouvelle option, PREFIX64, de numéro 129 (cf. le registre IANA). Le point important est que, pour chaque préfixe IPv6 listé dans le champ Prefix64, il y a une liste (pouvant être de taille nulle) de préfixes IPv4 pour lesquels ce préfixe s'applique.

Que doit faire le serveur PCP avec cette option ? Lorsque le client le demande (en mettant l'option PREFIX64 dans sa requête), le serveur lui répond poliment, avec le préfixe que lui, serveur, utilisera pour les synthèses d'adresses IPv6. Le serveur a le droit d'envoyer cette option PREFIX64 même si on ne lui a rien demandé. Il peut y avoir plusieurs occurrences de l'option si le serveur PCP (le routeur NAT64) utilise plusieurs préfixes.

Et le client ? Il peut demander explicitement le préfixe, en utilisant l'option PREFIX64 avec une valeur spéciale pour le préfixe (::/96). Attention à ne pas paniquer si la réponse contient plusieurs préfixes IPv6, c'est normal. Le client ne doit pas garder en vrac les préfixes mais les laisser associés à un serveur PCP particulier (au cas où il y en ait plusieurs sur le réseau, ce qui est rare, mais permis).

Des exemples d'usage figurent dans la section 5, avec un exemple détaillé pour le (compliqué) cas de SIP : le client SIP (le softphone, qui n'a que IPv6) va envoyer une requête PCP de type MAP avec les options PORT_SET et PREFIX64. Il récupère les ports à utiliser et le préfixe, mettons 2001:db8:122::/48. Avec les informations sur son adresse IPv4 externe, il va construire une offre SDP, qui ne contiendra que de l'IPv4. Ensuite, le logiciel fait une requête SIP INVITE, en IPv6, en utilisant une adresse de destination formée à partir du préfixe et de l'adresse IPv4 du serveur SIP. Le routeur NAT64, voyant ce préfixe, va ensuite faire son travail (conversion en v4, transmission). Pareil pour le message de routeur (l'acceptation de l'appel). Notez que l'« intelligence » était presque entièrement dans le client : le routeur NAT64 n'a pas d'ALG.

À ma connaissance, il n'existe encore aucun client ou serveur PCP avec cette option.


Téléchargez le RFC 7225

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)