Les NAT dynamiques et les NAT statiques

NAT est l’acronyme de "Network Address Translation". Les NAT sont des règles mises en œuvre par les routeurs qui raccordent les réseaux locaux (d’entreprises ou de particuliers) à internet. Ces NAT indiquent aux routeurs comment modifier les en-têtes des paquets qui les traversent.
De tels réseaux locaux, utilisant par hypothèse IPv4, ne disposent généralement pas d’adresses publiques IP en aussi grand nombre que les postes (et éventuellement les serveurs) situés dans ces réseaux. Dans un tel réseau local, les ordinateurs, et plus généralement tous les dispositifs nécessitant une adresse IP, utilisent alors un plan d’adresses IP locales. Ces adresses IP locales n’ont pas d’existence sur internet : plusieurs réseaux locaux distincts peuvent utiliser ces mêmes adresses locales.
La passerelle reliant ce réseau local à internet joue un rôle de routeur.

Les NAT dynamiques

Le problème est que lorsqu’un de ces postes initie une connexion à un serveur externe, "sur internet", il ne peut pas se contenter de lui communiquer, en guise d’adresse de retour  – pour que ce serveur puisse lui répondre – son adresse IP locale, qui n’existe pas sur internet : de l’extérieur, on ne "voit" que l’adresse IP publique du branchement de ce réseau local à internet ou, éventuellement, un pool d’adresses publiques pour les réseaux locaux d’une certaine importance.
Le routeur concerné fournit alors une solution :
- dès le début de cette session, initiée par un poste du réseau local, le routeur modifie les trames IP qu’il voit passer en substituant l’adresse IP publique du réseau local (ou éventuellement une des adresses publiques) à l’adresse locale de ce poste, et généralement change aussi le port de communication.
Cette opération est une NAT "dynamique" :
- le serveur externe interrogé peut alors répondre en utilisant cette adresse publique et ce port de retour qu’on lui a communiqués,
- le routeur mémorise cette NAT pendant un certain temps, pour recevoir et pouvoir transmettre les réponses destinées à ce client local : dans ces trames de réponses, il remet l’adresse IP locale et le port utilisés par le poste local, à la place de l’adresse IP publique et du port connus du serveur externe;
- lorsqu’une NAT dynamique cesse d’être mémorisée par le routeur, celui-ci peut alors utiliser ce couple adresse/port publics pour une autre NAT dynamique, c’est-à-dire pour une autre connexion initiée par un – peut-être un autre – poste local.

Dans un paquet IP, ces substitutions d’adresses s’opèrent :
- dans l’en-tête IP du paquet, pour la substitution d’adresse IP,
- dans l’en-tête TCP ou UDP, pour la substitution de port de communication. Cet en-tête-ci se trouve au début de la zone de données IP du paquet, qui suit l’en-tête IP.

Il faut donc que le routeur mémorise cette NAT dynamique pendant le temps nécessaire à la session.
Dans le cas d’une session TCP, le routeur conserve une NAT dynamique en mémoire :
- jusqu’à ce qu’il voie le passage d’un segment FIN marquant explicitement la fin de la connexion,
- et sinon, pendant un temps qui, pour des connexions TCP, peut se compter en heures.
Dans le cas d’une session UDP (qui ne contient pas de segment FIN), le "timeout" est beaucoup plus court, de l’ordre de quelques dizaines de secondes.
En TCP et en UDP, ces timeouts sont paramétrables sur les routeurs utilisés par les grosses organisations informatiques, routeurs administrés par des professionnels.
On peut d’ailleurs aussi utiliser, en guise de routeur, un ordinateur sous un système d’exploitation fournissant des services analogues, par exemple une distribution Linux adaptée à cet effet (ou un système de la famille BSD).

Il existe en fait plusieurs types de NAT dynamiques, qu’on peut classer selon différents critères.

Les NAT dynamiques les plus fréquemment rencontrées sont mises en œuvre par les routeurs les plus simples, derrière lesquels se trouvent des réseaux locaux de taille modeste. C’est le cas de la quasi-totalité des réseaux locaux de particuliers, et souvent aussi des réseaux locaux de très petites entreprises. Ces réseaux ne disposent généralement que d’une seule adresse IP publique, exceptionnellement un pool d’un petit nombre d’adresses IP publiques.
Le routeur effectue alors des NAPT ("Network Address Port Translation"), terme utilisé par la RFC 2663, qui décrit notamment ce type de translation. Une NAPT substitue l’adresse IP publique disponible (ou une des adresses IP publiques disponibles) à l’adresse locale du poste, et change aussi le port de communication. Ce dernier changement permet des sessions initiées par différents postes locaux, "sortant" sur la même (ou les quelques mêmes) adresse(s) IP publique(s) disponible(s).
Pour préciser un peu le vocabulaire :
- les NAPT dynamiques sont souvent appelées "PAT" ("Port Address Translation"),
- ces NAPT sont tellement fréquemment utilisées qu’on les appelle aussi usuellement "NAT",
- lorsqu’une seule adresse IP publique est disponible, on utilise souvent le terme "Masquerading",
- et à l’opposé, si le nombre d’adresses IP disponibles rend superflu d’opérer des translations de ports, on utilise alors le terme "Basic NAT".

Indépendamment d’un tel classement, un aspect important est la possibilité ou non, pour un ordinateur extérieur autre que le serveur auquel s’est connecté le poste local – connexion qui a créé une NAT dynamique dans le routeur – de bénéficier "à l’envers" de cette NAT dynamique pour joindre ce poste local. Il s’agirait alors d’une autre session, initiée de l’extérieur, et distincte de celle ayant provoqué la création de cette NAT.
C’est possible la plupart du temps, sous réserve évidemment que le routeur n’ait pas déjà supprimé cette NAT dynamique de sa mémoire (fin explicite de session, ou timeout).
Toutefois, certaines NAT dynamiques interdisent cet usage, en imposant des règles supplémentaires :
- une NAT dynamique est appelée "Restricted Cone NAT" si elle ne peut être utilisée "à l’envers" que par un ordinateur extérieur de même adresse IP que celui qui a déjà été contacté, de l’intérieur du réseau, via cette NAT dynamique. Une seule adresse IP extérieure est donc reconnue par cette NAT.
- une NAT dynamique appelée "Port Restricted Cone NAT" ajoute une contrainte supplémentaire : le port de communication utilisé par cet ordinateur extérieur doit lui aussi être identique à celui visé lors de la session, initiée de l’intérieur, qui a provoqué la mise en place de cette NAT dynamique.
Ces deux types de NAT dynamiques offrent donc une certaine sécurité contre des attaques profitant de NAT dynamiques.
Une NAT dynamique autre que ces deux types-là peut, par comparaison, être appelée "Full Cone NAT".
Dans certaines présentations utilisant un vocabulaire plus commercial, ces 3 types de NAT sont aussi parfois appelés respectivement : "Moderate NAT", "Closed NAT" (ou "Strict NAT"), et "Open NAT".

Dans tous les cas, les NAT dynamiques permettent donc les connexions vers l’extérieur, et parfois aussi venant de l’extérieur, mais elles ne peuvent être créées que par des connexions initiées de l’intérieur. En l’absence d’une connexion initiée de l’intérieur du réseau local, aucune NAT dynamique ne peut permettre de recevoir une communication venant de l’extérieur car … une telle NAT n’existe alors pas dans la mémoire du routeur.

Les NAT statiques

Ce sont des NAT paramétrées par l’administrateur du routeur, et utilisées pour gérer les connexions initiées de l’extérieur. Le terme "statique" souligne le fait qu’elles existent en permanence – en tout cas tant qu’elles sont paramétrées -, même en l’absence de toute session en cours : elles sont donc en permanence prêtes à prendre en charge une session initiée de l’extérieur.

Le principe est de prendre en charge un message adressé sur l’adresse IP publique du réseau (ou une de ses adresses publiques), et sur un port donné. Une NAT statique indique alors au routeur de remplacer ces données de destination par l’adresse IP locale de l’ordinateur visé, dans le réseau local, et éventuellement de changer aussi le port de communication. Bien évidemment, le routeur effectue les substitutions inverses dans les réponses de cet ordinateur local à l’ordinateur extérieur appelant.

Modifiant ainsi les données de destination, les NAT statiques sont aussi parfois appelées DNAT ("Destination Network Address Translation"). Et par opposition, les NAT dynamiques, qui modifient les données de la source, sont alors parfois appelées SNAT ("Source Network Address Translation").
Il faut être conscient que, même en écartant certains termes commerciaux, le vocabulaire dans le domaine des NAT n’est ni d’une rigueur absolue ni d’une clarté évidente. Ainsi :
- une "NAT statique PAT" n’est rien d’autre qu’une NAT statique normale (aussi appelée NAPT, voir ci-dessus), le terme "PAT" ne soulignant qu’une "Port Address Translation" est effectuée. Le point important est que cette translation concerne les données de destination, puisqu’il s’agit d’une NAT statique.
- une "NAT dynamique PAT" effectue aussi une "Port Address Translation", mais sur les données de la source, puisqu’il s’agit d’une NAT dynamique.

Dans la pratique, les NAT statiques servent à rendre joignables, de l’extérieur, des serveurs hébergés dans un réseau local. Toutefois, deux types de contraintes sont alors à prendre en compte.

1) Sauf cas particulier où on peut avertir les postes extérieurs au réseau local, on doit tenir compte que les appelants de l’extérieur s’adressent à ces serveurs sur des ports de communication usuels : TCP 80 pour un serveur Web, par exemple.
Il en résulte que le nombre de sites de même type (http, ftp, ou autre) qu’on peut ainsi héberger dépend en principe étroitement du nombre d’adresses IP publiques dont on peut disposer. Certes, divers moyens permettent de repousser cette contrainte, par exemple :
- un même serveur http (même adresse IP locale dans le réseau) peut héberger plusieurs sites qu’on distingue alors par des noms de domaines différents,
- un serveur OpenVPN peut transférer à un autre serveur, dans le réseau local, les paquets qui ne le concernent pas (par exemple des paquets https). Ainsi, le même port public TCP 443 peut être utilisé de l’extérieur par des clients OpenVPN et des clients d’un serveur https hébergé dans le même réseau local.

2) Il convient aussi d’envisager les conséquences possibles d’une attaque réussie contre un de ces serveurs, qui donnerait à l’attaquant un contrôle suffisant sur ce serveur pour menacer le reste du réseau local. C’est la raison d’être des DMZ ("Demilitarized Zone"), sous-réseaux hébergeant de tels serveurs. Selon les besoins de communication entre le réseau local et la (ou les) DMZ(s), l’emplacement et le paramétrage d’un pare-feu doivent faire l’objet d’une grande attention de la part de l’administrateur d’un tel réseau…

 

On peut envisager de paramétrer dans le routeur des NAT statiques, non seulement pour des serveurs, mais aussi pour des postes de travail pouvant alors être joints de l’extérieur, pour des communications de poste à poste : téléphonie sur IP, visiophonie. Mais une telle démarche peut a priori engendrer des problèmes :
- ces NAT statiques "gèlent" un certain nombre de couples adresse/port publiques, pour un type de connexion qui, pour chacun de ces postes clients, ne représente a priori qu’une (petite) partie des connexions qu’il est susceptible d’utiliser;
- surtout, il faut faire connaitre ces ports "externes", et faire en sorte que les logiciels appelants, de l’extérieur, utilisent spontanément ces ports, même si ceux-ci ne sont standardisés nulle part… Ici aussi, il faut pouvoir avertir les postes extérieurs au réseau local.
Dans ce domaine, une solution classique est le protocole  "IGD" ("Internet Gateway Device Protocol", appelé aussi parfois "IGDP"), utilisé notamment par les applications de type UPnP ("Universal Plug and Play"). Le protocole IGD permet à des postes locaux d’obtenir de leur routeur l’ouverture d’une NAT statique à leur profit, pour pouvoir être joints de l’extérieur. Ceci :
- nécessite d’informer l’extérieur si une translation de ports est opérée, par exemple à cause du nombre de postes concernés en regard du nombre d’adresses IP publiques disponibles pour ce réseau local : c’est alors à la charge des logiciels utilisant ce protocole IGD;
- présente un avantage pratique : le paramétrage de ces NAT statiques du routeur se fait alors sans intervention manuelle. De plus, à la fin de la session (de communication, de jeu vidéo, ou autre), ces NAT sont supprimées;
- mais souffre d’un inconvénient majeur : la possibilité de paramétrer ainsi le routeur via des programmes tournant sur des postes locaux pose de graves questions de sécurité. C’est pourquoi les équipements professionnels utilisés en entreprise ne reconnaissent généralement pas le protocole IGD.

 

Finalement, pour accepter les communications de poste à poste initiées de l’extérieur du réseau local, les NAT dynamiques fournissent généralement la solution retenue. Mais ceci nécessite alors le recours à des opérations informatiques préalables :
- il faut d’abord qu’une connexion soit initiée de l’intérieur du réseau local pour créer une NAT dynamique dans la mémoire du routeur,
- si une NAT dynamique peut être utilisée "à l’envers" par un autre ordinateur que la destination initiale, il faut pouvoir transmettre le détail de cette NAT à cet autre ordinateur. On notera à ce sujet que le routeur n’informe pas les postes locaux du détail des NAT dynamiques qu’il met en l’œuvre…
- et en présence d’une NAT de type "Restricted Cone" (ou plus, "Port Restricted Cone"), on devine que la solution passera par l’emploi d’un proxy externe.

 

 

WebRTC et les NAT
Les NAT dynamiques et les NAT statiques
La signalisation SIP et les NAT
Le protocole SDP
Les protocoles STUN et TURN
Le protocole ICE