Network address translation

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Network Address Translation)
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Nat.

En réseau informatique, on dit qu'un routeur fait du network address translation (NAT) (« traduction d'adresse réseau » - voir la section « traduction » ou « translation ») lorsqu'il fait correspondre les adresses IP internes non uniques et souvent non routables d'un intranet à un ensemble d'adresses externes uniques et routables. Ce mécanisme permet notamment de faire correspondre une seule adresse externe publique visible sur Internet à toutes les adresses d'un réseau privé, et pallie ainsi l'épuisement des adresses IPv4.

La fonction NAT dans un routeur de service intégré (ISR) traduit une adresse IP source interne en adresse IP globale.

Ce procédé est très largement utilisé par les box internet (ou modem routeur) des fournisseurs d’accès pour cacher les ordinateurs domestiques derrière une seule identification publique.

Exemple[modifier | modifier le code]

Réseau sans NAT : les adresses des hôtes sont des adresses uniques et routées sur Internet.
Réseau avec NAT : les adresses des hôtes sont des adresses réutilisables. Le routeur de bordure fait la traduction d'adresse. La modification du plan d'adressage alloue désormais un réseau /16 par sous-réseau, s'affranchissant de la limite des 254 adresses possibles avec un /24.

Un campus est composé de 1 000 hôtes (ordinateurs, imprimantes, etc.), répartis dans 4 sous-réseaux. Sans utilisation du NAT, un tel campus nécessiterait l'attribution de presque 1 000 adresses IPv4 uniques et routées.

En connectant un tel campus à Internet via un routeur qui implémente NAT, il est possible de changer le plan d'adressage interne et d'utiliser des adresses non uniques (utilisées ailleurs dans le monde) et non routables sur Internet (voir RFC 1918). On parle aussi d'adresses publiques (uniques au monde) et privées (uniques seulement dans le réseau privé). Un des buts du NAT est de rendre les adresses privées invisibles depuis Internet.

On n'assignera que quelques centaines d'adresses à l'ensemble des adresses externes du NAT, sachant que les imprimantes (et certains autres équipements) n'ont pas besoin de communiquer avec l'extérieur de façon permanente (donc leurs adresses n'ont pas besoin d'être traduites).

Le NAT permet donc de diminuer significativement le nombre d'adresses IP uniques utilisées.

Implémentation du NAT[modifier | modifier le code]

Les correspondances entre les adresses privées (internes) et publiques (externes) sont stockées dans une table sous forme de paires (adresse interne, adresse externe). Lorsqu'une trame est émise depuis une adresse interne vers l'extérieur, elle traverse le routeur NAT qui remplace, dans l'en-tête du paquet TCP/IP, l'adresse de l'émetteur par l'adresse IP externe. Le remplacement inverse est fait lorsqu'une trame correspondant à cette connexion doit être routée vers l'adresse interne. Aussi, on peut réutiliser une entrée dans la table de correspondance du NAT si aucun trafic avec ces adresses n'a traversé le routeur pendant un certain temps (paramétrable).

IP interne IP externe Durée (s) Réutilisable ?
10.101.10.20 193.48.100.174 1 200 non
10.100.54.251 193.48.101.8 3 601 oui
10.100.0.89 193.48.100.46 0 non

Voici par exemple une table de NAT simplifiée. On supposera qu'une entrée pourra être réclamée si la traduction n'a pas été utilisée depuis plus de 3 600 secondes.

La première ligne indique que la machine interne, possédant l'adresse IP 10.101.10.20 est traduite en 193.48.100.174 quand elle converse avec le monde extérieur. Elle n'a pas émis de paquet depuis 1 200 secondes, mais la limite étant 3 600, cette entrée dans la table lui est toujours assignée. La seconde machine est restée inactive pendant plus de 3 600 secondes, elle est peut-être éteinte, une autre machine peut reprendre cette entrée (en modifiant la première colonne puisqu'elle n'aura pas la même IP interne). Enfin, la dernière machine est actuellement en conversation avec l'extérieur, le champ de Durée étant 0.

La plupart des pare-feu et routeurs implémentent le NAT pour permettre à plusieurs machines de partager une seule adresse IP publique.

Bénéfices du NAT[modifier | modifier le code]

Les adresses internes peuvent être choisies parmi les adresses définies dans la RFC 1918. Ainsi plusieurs sites peuvent avoir le même adressage interne et communiquer entre eux en utilisant ce mécanisme. Étant donné que les adresses internes sont réutilisées, on économise des adresses IP publiques, dont l'occupation, en IPv4, arrive à saturation.

On peut avoir moins d'adresses dans l'ensemble des adresses externes que ce qu'on a comme adresses IP à l'intérieur du réseau, si l'on met en place un mécanisme permettant de récupérer des adresses inutilisées après un certain temps (on appelle ceci un bail). Plus précisément, si une entrée dans la table des traductions n'est pas utilisée pendant un certain temps (paramétrable dans le serveur DHCP du réseau), cette entrée peut-être réutilisée : une autre machine avec une adresse interne va récupérer l'adresse externe.

On estime parfois que le NAT apporte un bénéfice en termes de sécurité car les adresses internes sont dissimulées. La sécurité des équipements derrière un NAT n'est cependant pas supérieure à celle qu'un pare-feu à états peut fournir[1].

Problèmes inhérents[modifier | modifier le code]

Bien que certaines applications s'en accommodent sans difficulté, le NAT n'est pas transparent vis-à-vis des applications du réseau et reporte une complexité additionnelle sur le fonctionnement des applications (RFC 2993, RFC 3027) :

  • Les communications entre postes qui se situent derrière des NAT posent un problème, c'est le cas des protocoles pair à pair.
  • La fragmentation éventuelle des paquets dans le réseau pose également un problème quand un NAT est traversé, car il n'est pas possible pour un hôte qui reçoit des fragments avec le même fragment id et des adresses IP source identiques d'identifier qu'ils appartiennent en réalité à deux hôtes différents derrière un NAT.
  • Certains protocoles, comme rlogin, imposent que le port source soit fixé à 512. La traversée d'un NAT empêche alors plus d'une session sortante par adresse publique.
  • IPSec pose également des problèmes lors de la traversée d'un NAT dans la mesure où l'en-tête authentifié par AH est altéré par le NAT.
  • Le protocole X Window pose également un problème, car les connexions TCP sont initiées par les clients vers le display.
  • rsh et rlogin utilisent un socket initié par le serveur vers le client pour l'erreur standard.

Un problème majeur se pose lorsqu'un protocole de communication transmet l'adresse IP de l'hôte source dans un paquet, ou des numéros de ports. Cette adresse n'étant pas valide après avoir traversé le routeur NAT, elle ne peut être utilisée par la machine destinataire. Ces protocoles sont dits « passant difficilement les pare-feu », car ils échangent au niveau applicatif (FTP) des informations du niveau IP (échange d'adresses) ou du niveau TCP (échange de ports), ce qui transgresse le principe de la séparation des couches réseaux.

Quelques protocoles de ce type sont : FTP, H.323, les protocoles faisant du poste-à-poste (IRC-DCC), les protocoles de gestion de réseau, DNS, certains messages ICMP, traceroute, le protocole SIP.

Pour pallier cet inconvénient, les routeurs NAT doivent inspecter le contenu, ils font alors office de passerelle applicative (Application-Level Gateway, ALG) et manipulent des paquets qui les traversent pour remplacer les adresses IP spécifiées par les adresses externes. Cela implique de connaître le format du protocole.

Le NAT ne fait que participer à la politique de sécurité du site, et ce n'est pas son objectif principal : une fois la traduction établie, elle est bidirectionnelle. Le NAT n'est donc pas un substitut au pare-feu.

Différents types de NAT[modifier | modifier le code]

NAT statique[modifier | modifier le code]

Où un ensemble d'adresses internes fait l'objet d'une traduction vers un ensemble de même taille d'adresses externes. Ces NAT sont dites statiques car l'association entre une adresse interne et son homologue externe est statique (première adresse interne avec première externe…). La table d'association est assez simple, de type un pour un et ne contient que des adresses. Ces NAT servent à donner accès à des serveurs en interne à partir de l'extérieur.

Il existe trois types de NAT statiques :

  • NAT statique unidirectionnel qui transfèrent uniquement les connexions de l'extérieur vers l'intérieur (attention, les paquets de retour sont aussi transférés). Le plus souvent lorsque la machine interne initie une connexion vers l'extérieur la connexion est traduite par une autre NAT dynamique.
  • NAT statique bidirectionnel qui transfèrent les connexions dans les deux sens.
  • NAT statique PAT (Port Address Translation du port serveur). Conjonction d'une NAT statique uni ou bidirectionnelle et d'une traduction du port serveur. Le nom PAT vient du fait que le port serveur/destination est transféré ; à ne pas confondre avec la NAT dynamique PAT.

NAT dynamique[modifier | modifier le code]

Routeur en mode PAT (Port Address Translation). Seule l'adresse de l'interface externe du routeur est utilisée. Le multiplexage/démultiplexage des IP internes se fait grâce aux numéros de ports (modifiés par le routeur).

Où un ensemble d'adresses internes est transféré dans un plus petit ensemble d'adresses externes. Ces NAT sont dites dynamiques car l'association entre une adresse interne et sa contrepartie externe est créée dynamiquement au moment de l'initiation de la connexion. Ce sont les numéros de ports qui vont permettre d'identifier la traduction en place : le numéro du port source (celui de la machine interne) va être modifié par le routeur. Il va s'en servir pour identifier la machine interne.

Il existe plusieurs types de NAT dynamiques :

  • NAT dynamique PAT (Port Address Translation du port client/source) où les adresses externes sont indifférentes (le plus souvent la plage d'adresses que votre fournisseur d'accès vous a attribuée). Le nom PAT vient du fait que le port source est modifié ; à ne pas confondre avec la NAT statique PAT.
  • Masquerading où l'adresse IP du routeur est seule utilisée comme adresse externe. Le masquerading est donc un sous-cas de la dynamique PAT.
  • NAT pool de source est la plus vieille des NAT. La première connexion venant de l'intérieur prend la première adresse externe, la suivante la seconde, jusqu'à ce qu'il n'y ait plus d'adresse externe. Dans ce cas exceptionnel le port source n'est pas modifié. Ce type de NAT n'est plus utilisé.
  • NAT pool de destination permet de faire de la répartition de charge entre plusieurs serveurs. Peu d'adresses externes sont donc associées avec les adresses internes des serveurs. Le pare-feu se débrouille pour répartir les connexions entre les différents serveurs.

Autre façon de catégoriser le NAT[modifier | modifier le code]

  • NAT de source où seule la source est traduite. Les NAT de source sont donc par exemple :
    • NAT dynamique PAT,
    • NAT dynamique masquerading,
    • NAT dynamique pool de source
  • NAT de destination où seule la destination est traduite. Les NAT de destination sont donc par exemple :
    • NAT statique unidirectionnelle (peut, mais dans de rares cas, être une NAT de source),
    • NAT dynamique pool de destination
  • NAT de service ou port permet de changer le port serveur de la connexion. Ce type de NAT est très souvent mixé avec les autres types de NAT.

Quelques subtilités :

  • Pour les types source et destination seule la direction du premier paquet d'une connexion est prise en compte (oubliez les paquets retours).
  • Les règles de NAT statiques bidirectionnelles ne sont classables, ni en source, ni en destination car elles font les deux.
  • On peut mixer les trois types de NAT, les quatre possibilités étant envisageables (S+D, S+P, D+P, S+D+P). Quand source et destination sont mixées on parle de NAT double.

Carrier Grade NAT[modifier | modifier le code]

Article détaillé : Carrier-grade NAT.

En raison de l'épuisement des adresses IPv4, les fournisseurs d'accès à Internet envisagent le recours à des NAT à grande échelle (carrier-grade NAT ou large scale NAT), ce qui n'est pas sans conséquence sur certaines applications.

Traversée des NAT[modifier | modifier le code]

À défaut de configuration explicite, les NAT rejettent généralement les connexions entrantes, ce qui cause des problèmes notamment pour les applications pair à pair.

Deux protocoles ont été développés pour permettre à des postes clients de demander l'ouverture et la redirection de ports déterminés au routeur NAT :

Des logiciels comme Skype utilisent d'autres techniques pour la communication entre pairs derrière des NAT[2]. pwnat[3] utilise une variante qui fait usage de messages ICMP pour la découverte du client.

NAT et IPv6[modifier | modifier le code]

L'IETF décourage le NAT avec IPv6 en raison des problèmes inhérents et du fait que l'espace d'adresse IPv6 est tel que l'économie d'adresse n'est pas nécessaire[4].

NAT : « traduction » ou « translation » d'adresses[modifier | modifier le code]

Il est très fréquent de trouver sur Internet l'expression « translation d'adresses », en particulier sur des forums et autres blogs, ainsi que toutes ses variations : « adresses translatées », « translation de port », etc. En revanche, bon nombre de ressources de référence (cours[5], documentation technique[6], documents édités par des équipementiers[7], etc.) parlent de « traduction » d'adresse.

Le choix des termes français pour désigner le NAT a souvent nourri de longs débats.

Une première analyse vient du fait que, dans son acception la plus courante, l'anglais « translation » est un faux-ami, et se traduit par « traduction ». Cependant, dans le cadre précis des mathématiques, l'anglais « translation » peut aussi désigner en français une « translation » (exemple : translation vectorielle). On peut noter en préambule que les langues pour lesquelles « translation » n'est pas un faux ami utilisent l'expression « traduction d'adresse »[8].

Il faut donc revenir au fonctionnement interne du NAT et à la définition des termes « translation » et « traduction » pour déterminer lequel des deux est le plus approprié.

Une translation décrit un déplacement ou « glissement » d'un objet « sans rotation, retournement ni déformation de cet objet ».

Une traduction consiste à mettre en « équivalence » un texte d'une langue vers une autre langue, sans en changer le sens. Il peut être question d'une langue au sens propre du terme (français, anglais, etc.) ou d'un type de langage (technique vers commun, juridique vers commercial...). Dans tous les cas, il s'agit de mettre en équivalence des termes entre-eux, termes piochés dans deux ensemble définis et connus.

Par définition, le NAT va mettre en équivalence des couples (adresse IP, port) avec d'autres couples (adresse IP, port), lesquels font partie d'ensembles définis au moment de la création des règles NAT. Le mécanisme sous-jacent va se baser sur une table d'équivalence interne, sorte de dictionnaire, peuplée initialement (NAT statique) ou à la volée (NAT dynamique), permettant de mettre ces couples en correspondance (dans un sens ou dans l'autre).

Il se peut, dans certains cas particuliers, que des règles de NAT se limitent à modifier selon un schéma identique un ensemble de couples (adresse IP, port). Par exemple, une règle de NAT transformant toutes les adresses de 10.0.A.B:p vers 10.1.A.B:p (sans changer les octets A et B ni le port p). On pourrait alors penser à une translation au sens mathématique du terme, en imaginant un vecteur transformant l'espace des (adresse IP, port) de départ vers un espace topologiquement identique, sans déformation, effectuant un « glissement » sur le deuxième octet de l'adresse IP.

Cependant, cet exemple n'est qu'un sous-ensemble des possibilités offertes par le NAT. Un autre cas classique (le masquerading) permet à des ressources sur un réseau donné d'accéder à un autre réseau en masquant leur adresse IP source. L'ensemble des connexions venant de couples internes (adresse IP, port) est vu, de l'extérieur, comme venant d'une adresse IP unique, externe, avec un port modifié. Ainsi, le couple (adresse IP, port) source 10.1.A.B:p1 est remplacé par X.Y.Z.T:q1, et 10.1.C.D:p2 est, lui, remplacé par la même IP avec un port différent : X.Y.Z.T:q2. Le NAT opère donc une « déformation » de l'espace initial (modification du nombre d'adresses IP, réécriture des ports source sans lien avec les valeurs initiales). Il n'y a pas de cohérence logique commune entre les espaces internes et externes, en-dehors de la table de correspondance entre les couples (adresse IP, port) internes et externes, qui s'applique à chaque couple de manière indépendante. Le cas du masquerading ne peut pas être décrit comme une translation au sens mathématique du terme.

D'autres configurations de NAT qui peuvent être étudiées (VIP partagées, SPAT...) ne respectent pas non plus les contraintes de non déformation nécessaire à la définition de translation. Ainsi, même s'il existe des cas particuliers pour lesquels le NAT pourrait être décrit comme une translation, ces cas ne sont que des exceptions.

La généralisation (à tort) de l'utilisation en français de l'expression « translation d'adresse » vient par conséquent de la confusion linguistique liée au terme anglais « translation », et de la méconnaissance du fonctionnement sous-jacent de cette technologie. L'expression « translation d'adresse » rejoint la liste des faux-amis couramment utilisés de manière abusive en informatique[9].

La bonne expression à utiliser en langue française pour désigner le NAT est « traduction d'adresse réseau ».

Notes et références[modifier | modifier le code]

  1. (fr) Stéphane Bortzmeyer, « La traduction d'adresses (NAT) apporte-t-elle vraiment de la sécurité ? »,‎ (consulté le 8 novembre 2012)
  2. An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol, Salman A. Baset and Henning Schulzrinne, 15 septembre 2004
  3. pwnat
  4. RFC 3002 P26
  5. http://infodoc.iut.univ-aix.fr/~cpb/enseignement/reseaux/semestre_2/cours/cours_4.pdf
  6. http://abcdrfc.free.fr/rfc-vf/pdf/rfc3022.pdf
  7. http://www.cisco.com/cisco/web/support/CA/fr/109/1094/1094970_nat-faq-00.html
  8. voir par exemple les versions de cette article dans Wikipedia en allemand, chinois, espagnol, italien, portugais, russe, suédois
  9. On y trouve notamment le mot « librairie » en lieu et place de « bibliothèque » pour traduire l'anglais « library » (bibliothèque logicielle)

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Sur les autres projets Wikimedia :

  • RFC 1631 - The IP Network Address Translator (NAT)
  • RFC 1918 - Address Allocation for Private Internets
  • RFC 2663 - IP Network Address Translator (NAT) Terminology and Considerations
  • RFC 2709 - Security Model with Tunnel-mode IPsec for NAT Domains
  • RFC 2993 - Architectural Implications of NAT
  • RFC 3022 - Traditional IP Network Address Translator (Traditional NAT)
  • RFC 3027 - Protocol Complications with the IP Network Address Translator (NAT)
  • RFC 3235 - Network Address Translator (NAT)-Friendly Application Design Guidelines
  • RFC 3715 - IPsec-Network Address Translation (NAT) Compatibility
  • RFC 3947 - Negotiation of NAT-Traversal in the IKE
  • RFC 5128 - State of Peer-to-Peer (P2P) Communication across Network Address Translators (NATs)
  • (en) NAT and Networks
  • (fr) La NAT dans tous ses détails