<?xml version="1.0" encoding="utf-8"?>
<rfcdesc title="IAB thoughts on IPv6 Network Address Translation" num="5902" status="informational">
<authors><author>D. Taler (Microsoft)</author><author>L. Zhang (UCLA)</author><author>G. Lebovitz (Juniper)</author></authors>
<rfcdate><month>July</month><year>2010</year></rfcdate>
<date>2010-07-17</date>
<content>
<p>Les mécanismes de traduction d'adresse (<wikipedia name="Network Address Translation">NAT</wikipedia>)
ont toujours suscité des polémiques, en raison de leur remise en cause
des principes d'architecture de
l'<wikipedia>Internet</wikipedia>. Avec <wikipedia>IPv4</wikipedia>,
ces mécanismes sont nécessaires en raison de la <link
local="epuisement-adresses-ipv4">pénurie d'adresses</link> qui fait
que, par exemple, un particulier n'a aucune chance d'obtenir plus
qu'une adresse IPv4, même s'il a chez lui plusieurs équipements
IP. Mais en <wikipedia>IPv6</wikipedia> ? La pénurie disparait. Est-ce
que le NAT doit donc disparaitre avec elle ? Dans ce
<wikipedia name="Request for comments">RFC</wikipedia>, l'<wikipedia name="Internet Architecture Board">IAB</wikipedia> étudie la
question et donne une réponse, certes hostile au NAT, mais très étayée
et pointant du doigt quelques problèmes qui peuvent pousser certains à
déployer du NAT IPv6 malgré tout.</p>
<p>La question initiale est pratique (section 1 du RFC) : l'<wikipedia name="Internet Engineering Task Force">IETF</wikipedia>
doit-elle normaliser des mécanismes de <wikipedia name="Network Address Translation">NAT</wikipedia> pour
<wikipedia>IPv6</wikipedia> ? Elle ne l'avait pas fait pour
<wikipedia>IPv4</wikipedia>, considérant, à juste titre, que c'était
un bricolage ayant trop d'effets néfastes et, résultat, le NAT a quand
même été largement déployé, de manière non standardisée. Le groupe de
travail <link local="behave-wg">behave</link> de
l'IETF a été créé bien plus tard pour essayer de documenter ce
bricolage et ses conséquences, et pour trouver des solutions
partielles à certains de ses inconvénients.</p>
<p>Évidemment, pas mal de participants à l'IETF craignent que la même
chose se produise avec IPv6. Selon un scénario possible, l'IETF,
attachée aux principes de l'<wikipedia>adresse IP</wikipedia> unique,
de la <wikipedia>neutralité du réseau</wikipedia>,
et de la transparence de bout en bout (<rfc num="4924"
local="true"/>), refuserait fermement de normaliser des solutions de
NAT IPv6 et celles-ci seraient déployées quand même, menant à une
prolifération de routeurs NAT différents et gardant l'actuel cauchemar
que vivent les applications, notamment
<wikipedia>pair-à-pair</wikipedia>. Mais la situation est-elle la même
qu'avec IPv4 ?</p>
<p>Les opposants à cette vision font remarquer que la motivation
initiale du déploiement du NAT pour IPv4 était uniquement la pénurie
d'adresses. (Je me souviens bien de mon émerveillement quand le
premier routeur NAT utilisable, un PC <wikipedia>Linux</wikipedia>
avec ce qui s'appelait à l'époque <foreign>IP
masquerading</foreign>, est apparu vers 1995. Soudainement, le particulier pouvait avoir
plusieurs machines <wikipedia name="Internet Protocol">IP</wikipedia> chez lui.) Cette pénurie
disparaissant avec IPv6, la motivation du NAT disparait
aussi. Compte-tenu des défauts du NAT, où un équipement intermédiaire
interfère avec la relation entre deux machines, il ne faudrait surtout
pas déployer des NAT IPv6 et donc pas les normaliser.</p>
<p>Ce n'est pas et de loin la première fois que la question se
pose. Ainsi, le <rfc num="4864"/> avait déjà discuté des avantages et
inconvénients des NAT. Où en est-on aujourd'hui ?</p>
<p>Pour évaluer la possibilité que des systèmes de NAT soient déployés
pour IPv6, même en l'absence de pénurie d'adresses, la section 2 du
RFC étudie successivement les motivations possibles pour le NAT ou, en
d'autres termes, les bénéfices perçus par certains utilisateurs.</p>
<p>Premier avantage perçu (section 2.1), dispenser de renumérotation. Avec un
routeur NAT devant son réseau, celui-ci peut avoir des adresses IP
stables, indépendantes des adresses vues de l'extérieur. Si celles-ci
changent (par exemple parce qu'on a changé de <wikipedia name="Fournisseur d'accès à Internet">fournisseur d'accès</wikipedia>), il suffit de reconfigurer
le routeur et tous les autres problèmes de renumérotation (<rfc
num="5887" local="true"/>) sont évités. Notre <rfc num="5902"/>
note que cet argument saute si on dispose d'adresses
<wikipedia xml:lang="en" name="Provider-independent address space">PI</wikipedia> mais que celles-ci posent d'autres
problèmes, les mécanismes de routage actuels de l'Internet ne pouvant
peut-être pas gérer un trop grand nombre de préfixes PI.</p>
<p>Autre motivation parfois citée pour déployer du NAT, le désir
d'être <foreign><wikipedia name="Multi-homing">multi-homé</wikipedia></foreign> (section
2.2). Aujourd'hui, la seule solution qui isole le routage mondial du
<foreign>multi-homing</foreign> est le NAT. Autrement, il faut
utiliser des adresses <wikipedia xml:lang="en" name="Provider-independent address space">PI</wikipedia> qui sont routées
globalement. Les techniques basées sur la <link
local="separation-identificateur-localisateur">séparation de
l'identificateur et du localisateur</link> ne sont pas encore
prêtes. Donc, bien que la solution à base de NAT ne fournisse pas tous
les services qu'on attend du <foreign>multi-homing</foreign> (par
exemple, elle ne protège pas les sessions déjà établies d'une
défaillance d'un des fournisseurs), elle reste tentante.</p>
<p>Pour un <wikipedia name="Fournisseur d'accès à Internet">FAI</wikipedia>, le NAT a un autre avantage : il
permet d'homogénéiser la configuration des réseaux locaux des
clients. Avec le NAT, tous les clients ont
<computer>192.168.0.0/24</computer>, tous les routeurs
<wikipedia name="Customer Premises Equipment">CPE</wikipedia> ont l'adresse
<computer>192.168.0.1</computer>, etc. Cela peut simplifier le
<wikipedia name="Services d'assistance">support utilisateur</wikipedia> (section 2.3). En IPv6, un
mécanisme équivalent serait d'utiliser les adresses locales au lien
(section 2.5.6 du <rfc num="4291" local="true"/>) mais il y a trop peu
d'expérience pratique aujourd'hui pour juger de la validité de cette
approche.</p>
<p>Lorsqu'on demande à un <wikipedia>administrateur réseaux</wikipedia> pourquoi il utilise du NAT alors qu'il dispose de
suffisamment d'adresses, il répond souvent « la sécurité ». Cet
argument est souvent <link local="nat-et-securite">vague et peu étayé</link>. En creusant un peu, on peut
trouver deux propriétés du NAT qui ont un rapport avec la sécurité. La
première est le fait de dissimuler partiellement le réseau, sa
structure et les machines qui s'y connectent (section 2.4). L'idée est
que, sans faire reposer toute la sécurité du réseau sur cette
dissimulation, on peut toutefois se dire qu'il n'y a aucune raison que
le monde entier puisse analyser facilement le réseau, ce qui
faciliterait la préparation d'une éventuelle attaque. Ainsi, le NAT
permet de rendre plus difficile le recensement des machines (section
2.4.1). Cachées derrière le routeur NAT, les machines ne sont plus
accessible à un comptage, par exemple. Dans ce domaine, la plupart des
administrateurs réseau surestiment beaucoup les protections fournies
par le NAT. Un article comme « <foreign><link url="http://www.cs.columbia.edu/~smb/papers/fnat.pdf">A
technique for counting NATted hosts</link></foreign> » montre bien que le NAT n'empêche nullement
le recensement des machines. Des mécanismes de NAT plus complexes
pourraient permettre de limiter certaines des attaques que décrit
Bellovin (pas celles par <foreign>fingerprinting</foreign>, par
exemple) mais
ils seront aussi plus difficiles à traverser pour des services comme
<wikipedia name="Session Initiation Protocol">SIP</wikipedia> ou <wikipedia name="Stream Control Transmission Protocol">SCTP</wikipedia>. La règle
traditionnelle s'applique ici : les progrès de la sécurité se font
presque toujours au détriment de la facilité d'usage. Notre RFC
détaille les contre-mesures possibles mais il n'en existe aucune de
miraculeuse. La machine derrière le NAT ne doit donc pas se sentir en
complète sécurité.</p>
<p>À défaut de cacher les machines, peut-on cacher la topologie du
réseau (section 2.4.2) ? Là encore, l'étude indique un résultat
mitigé. On peut dans une certaine mesure rendre l'analyse du réseau
interne plus difficile mais on ne peut pas la rendre impossible et ces
améliorations de la dissimulation seront presque toujours au détriment
des usages du réseau. Bref, comme le résume la section 2.4.3, le NAT
fournit davantage une sécurité perçue qu'une sécurité réelle. Et les
vrais gains de sécurité seront obtenus en empêchant les techniques de
traversée de NAT comme <wikipedia name="Simple Traversal of UDP through NATs">STUN</wikipedia>, ce qui diminuera
l'utilité du réseau.</p>
<p>La deuxième propriété du NAT qui peut sembler augmenter la sécurité
est l'impossibilité de faire une connexion depuis l'extérieur vers une
machine NATtée (section 2.5). <link local="nat-et-securite">En fait</link>, cette propriété n'a rien de
spécifique au NAT : tout <wikipedia name="Pare-feu (informatique)">pare-feu</wikipedia> à <wikipedia
name="Stateful firewall" xml:lang="en">états</wikipedia> en fait autant et il n'y a
pas besoin du NAT pour avoir ce résultat.</p>
<p>Une fois examinées les bonnes (et moins bonnes) raisons de faire du
NAT, même en IPv6, la section 3 de notre RFC prend de la hauteur et
essaie de voir quelles sont les conséquences architecturales du
NAT. Il n'y a pas de doute que le NAT a des avantages : si les gens le
déploient, c'est bien qu'ils y trouvent des bénéfices. La vraie
question est donc plutôt « Quel est le coût à payer, notamment pour
les autres ? ». Le RFC ne mentionne pas cet exemple mais, aujourd'hui,
le déploiement massif des NAT est payé essentiellement par les
développeurs d'application (qui doivent consacrer beaucoup d'efforts
et une grande partie de leur code réseau à contourner les NAT, à
l'aide de solutions comme <wikipedia xml:lang="en" name="Traversal Using Relay NAT">TURN</wikipedia> - <rfc num="5766" local="true"/>) et par les utilisateurs (dont certaines applications
marchent ou ne marchent pas selon le spécificités du système NAT
rencontré). L'administrateur réseaux qui déploie le NAT pour se
faciliter la vie transmet donc
les coûts à d'autres. Les <rfc num="2993" local="true"/> et <rfc num="4924" local="true"/>
discutent plus en détail ce point.</p>
<p>Donc, avant de décider de normaliser un service de NAT, il ne faut
pas seulement considérer les avantages perçus par ceux qui les
déploient (la section 2 couvrait ces avantages) mais aussi les
conséquences globales. Le principe (qui est au c&#x153;ur de
l'architecture de l'Internet) est que deux machines qui
<emphasis>veulent</emphasis> se parler (le
<wikipedia name="Pare-feu (informatique)">pare-feu</wikipedia> peut donc légitimement filtrer le
trafic qu'on ne veut pas) doivent pouvoir le faire sans se soucier du
NAT, c'est-à-dire sans avoir à déployer des solutions complexes comme <wikipedia xml:lang="en" name="Interactive Connectivity Establishment">ICE</wikipedia> - <rfc num="8445"
local="true"/>. Le programmeur, au lieu de consacrer l'essentiel de
son code à contourner les NAT, devrait pouvoir tenir pour acquise une
connectivité de bout en bout. Des techniques comme la référence
(j'indique l'adresse IP à laquelle la suite du trafic doit être
envoyé) sont triviales avec l'architecture normale de l'Internet et
cauchemardesques avec les NAT.</p>
<p>Bref, l'objectif est que le système NAT, s'il existe, n'aie un
effet que purement local et pas, comme actuellement, des conséquences
pour tous les utilisateurs. Est-ce possible ?</p>
<p>La section 4 regroupe les solutions qui permettent d'atteindre les
avantages cités plus haut (notamment le <foreign>multihoming</foreign>
et la non-nécessité de renuméroter) en <emphasis>trois
classes</emphasis> :
<enum>
<item>Adresses <wikipedia xml:lang="en" name="Provider-independent address space">PI</wikipedia> systématiques : très simple
et marchant très bien, cette approche a pour principal inconvénient de
faire porter un gros effort sur le système de routage mondial, qui
doit gérer les adresses de tout le monde, sans possibilité
d'agrégation. Le sujet a fait l'objet de nombreux travaux comme, par
exemple, « <foreign><link url="http://www.nanog.org/meetings/nanog44/presentations/Monday/Roisman_lightning.pdf">Extending the Life of Layer 3 Switches in a 256k+ Route World</link></foreign> ».</item>
<item>Adresses uniques et stables en local, mais utilisation d'un
<wikipedia name="Tunnel (réseau informatique)">tunnel</wikipedia> pour communiquer avec le reste du
monde. C'est l'approche de la plupart des techniques comme
<wikipedia xml:lang="en" name="Locator/Identifier Separation Protocol">LISP</wikipedia> et elle est rare aujourd'hui.</item>
<item>Adresses stables en local, avec traduction d'adresses avant
d'atteindre l'Internet. C'est ce que fait le NAT et cette classe de
solutions est la plus difficile à combiner avec la connectivité de
bout en bout. C'est toutefois possible, si la traduction est
réversible. (C'était le cas du NAT original, où toute adresse interne
était mise en correspondance avec une et une seule adresse externe,
mais c'est moins vrai avec les déploiements actuels, où les adresses
IP globales sont partagées et où des numéros de
<wikipedia>port</wikipedia> sont alloués dynamiquement pour désambiguer.)</item>
</enum></p>
<p>Maintenant, place à la conclusion. La section 4.1 résume les
pensées de l'IAB : le NAT est une mauvaise idée, car il est très
difficilement compatible avec la transparence du réseau (<rfc
num="4924" local="true"/>), celle-ci étant la clé du succès de l'Internet. Mais certains
problèmes (comme le <foreign>Multihoming</foreign>) ne sont pas encore
traités par l'IETF. Il ne suffit donc pas de dire que le NAT est
négatif, il faut encore travailler à fournir des solutions pour les
problèmes qu'il semble traiter. Dans tous les cas, toute évaluation
d'une nouvelle norme (que ce soit du NAT ou pas) devrait se faire en
priorité sur le critère de la transparence du réseau aux applications.</p>
</content>
</rfcdesc>
