Back Home | FAQ ISDN/RNIS


Explication sur le fonctionnement du NAT (Network Address Translation)
et SUA (Single User Account) dans les routeurs TCP/IP.

Le NAT (dont la traduction française peut donner "translation d'adresse")
et le SUA ("Accès par adresse unique") ont de nombreux points communs.

Le Nat est le plus simple des deux. Voici le principe de fonctionnement :

Soit un routeur avec 2 interfaces :
. Coté LAN : Réseau d'entreprise avec un adressage interne type 10.0.0.0.
. Coté WAN : Réseau connecté à l'internet.
Ce réseau dispose d'une classe 'C' dont une seule adresse est actuellement
utilisée par l'interface elle-même.

Une personne connectée sur le réseau d'entreprise (qui a pour adresse 10.0.0.2
par exemple) lance son navigateur et essaye de se connecter à Internet.
Le premier paquet IP destiné à l'Internet est envoyé au routeur.
Ce dernier se dit : "Eps, 1 minute ... Je ne peux pas envoyer un paquet
qui a une adresse source en 10.0.0.2 car personne ne sera capable de renvoyer
une réponse. Prenons une adresse disponible parmi la classe 'C' et
remplaçons l'adresse privée 10.0.0.2 par cette adresse valide. Je notes dans
un coin que 10.0.0.2 a été traduit en "x.x.x.x".
Le paquet ainsi modifié peut partir vers l'Internet. Lorsque le destinataire
veut faire une réponse, il l'adresse à "x.x.x.x" qui est une adresse valide
dans la classe 'C'. Le paquet est routé jusqu'à notre routeur qui se dit :
"Le paquet a pour destination "x.x.x.x". Selon ma table, cette adresse est la
traduction de 10.0.0.2. Je remplace donc l'adresse de destination par 10.0.0.2
et je fais suivre le paquet".

Si une autre personne (disons 10.0.0.3) essaye de se connecter à Internet, le
routeur va chercher une adresse disponible dans la classe 'C' et faire
la même chose. Tant qu'il y a des adresses disponibles dans la classe 'C',
chacun peut utiliser Internet.
Un simple mécanisme de "timeout" permet de récupérer les adresses IP de la
classe 'C' lorsque elles ne sont plus utilisées pendant un certain temps.

Ce système NAT permet une légère sécurité :
Le seul moyen de rentrer sur le réseau interne est d'utiliser une adresse IP
valide parmi celles de la classe 'C'. Si le serveur qui a pour adresse ip
10.0.0.100 n'accède jamais à Internet, son adresse n'apparaîtra jamais dans
la table du routeur. Il sera ainsi impossible de contacter directement cet
ordinateur depuis l'extérieur.

Le système SUA.
Il y a bien un système NAT, mais avec une limitation : une seule adresse IP
(disons "y.y.y.y") - celle de l'interface elle-même - est disponible
pour faire tout le travail. Si nous ne faisons que remplacer les adresses
internes par celle de l'interface, il devient impossible de trier les réponses
lorsque elles reviennent. Il est alors nécessaire de trouver un moyen de
reconnaître les réponses afin de pouvoir les faire
suivre aux destinataires du réseau interne.

L'histoire bien connue du bon vieux port TCP.
Un ordinateur utilisant TCP/IP est un peu comme une rue avec plusieurs
maisons. Chaque logiciel qui parle sur le réseau est une maison avec son
numéro de rue : le numéro de port. Telle une adresse postale, chaque paquet
qui arrive contient l'adresse IP (nom de la rue) mais aussi le numéro de port auquel il est
destiné (numéro dans cette rue). En ville, les maisons d'une rue sont le plus souvent
"anonymes" alors que certaines maisons sont " remarquables " (café, théâtre, coiffeur)
Sous TCP/IP, les choses sont comparables : la plupart des ports sont
disponibles pour les logiciels quelconques, alors que certains ports sont
réservés à un usage particulier. Ces derniers sont les port prédéfinis.
Lorsque l'ordinateur démarre, certains programme se mettent en sommeil dans
l'attente de recevoir une requête sur un port prédéfini. Tous ces ports sont
dans la partie inférieur à 1024. Le port 23 par exemple est le service Telnet.
Les millions d'ordinateurs connectés à
Internet savent que le port 23 est destiné à répondre à un service Telnet.
Si il vient à l'idée d'une personne de reconfigurer son ordinateur pour
indiquer que le port telnet est désormais le 34, il sera impossible à
quiconque non informé d'utiliser ce service. Les logiciels client
peuvent utiliser n'importe quel port pour communiquer ...
encore faut-il le connaître lorsque il n'est pas standard.
Lorsque un serveur reçoit la requête d'un client, il sait toujours où envoyer
sa réponse car le numéro de port source est toujours inclue dans le paquet IP.
Tout ce système pour le service telnet est aussi vrai pour les autres
services (type FTP, HTTP, DNS, ...).

Pour en revenir au SUA, voilà ce qui se passe lorsque un utilisateur du réseau
interne veut accéder au service Telnet sur Internet. Le paquet IP émis comportera
l'entête suivante :

Source IP=10.0.0.2
Source Port=40077
Destination IP=123.45.67.89 (host désirée)
Destination Port=23 (le port telnet du host voulu)

Après la modification apportée par le routeur, le paquet ressemble à :

Source IP=y.y.y.y (l'adresse IP de l'interface Numeris elle-même)
Source Port=9000 (un port quelconque choisi par le routeur)
Destination IP=123.45.67.89
Destination Port=23

Le SUA sait désormais que le port 9000 correspond à l'adresse IP 10.0.0.2
avec le port 40077. Si une réponse parvient au routeur (adresse y.y.y.y) sur
le port 40077, il va consulter sa mémoire et va s'apercevoir qu'il faut
traduire cette réponse vers la machine 10.0.0.2 sur le port 40077 et la faire
suivre. L'ordinateur y.y.y.y verra alors arriver une réponse tout à fait
correcte. Si d'autre requête doivent être effectuer, le routeur procédera de
la même manière en utilisant les port suivant disponible (9001, 9002, ...)
Étant donné qu'il y a plus de 64000 ports disponibles, les seules limitations
sont la taille mémoire, la vitesse du processeur ou la vitesse de la
liaison.

Le système SUA garantie une sécurité un peu supérieur au simple NAT puisque
le pirate doit alors deviner le numéro de port et qu'il n'a aucun moyen de
contrôler l'assignation de ces ports. Quand bien même le pirate trouverai un
port, il ne peut pas savoir quel service est utilisé derrière car les ports
sont alloués " aléatoirement " en fonction des services demandés.

Un problème se pose lorsque le réseau interne comporte des application
fonctionnant en mode serveur et non plus en mode client. Tant que le serveur
est utilisé en interne, il n'y a aucun problème : le SUA n'a rien à voir.
Lorsque le client se trouve à l'extérieur, il y a un gros problème. Imaginons
qu'un personne sur internet veuille accéder au service telnet sur un serveur
du réseau interne. Il essayera alors d'atteindre la machine y.y.y.y sur le
port 23 (celui du telnet). Malheureusement, le SUA va être bien embarassé par
ce paquet, car aucune correspondance existe pour le port 23. Ce port n'a
jamais été utilisé " en sortie " et donc le routeur ne peut faire aucune
correspondance.

Une solution existe. Elle consiste à convertir tous les paquets " sans
correspondance " vers une adresse IP par défaut sans changer quoi que ce soit
sur le numéro de port. Cette solution permet de résoudre le problème, mais un
seul serveur pourra être atteint de cette manière. Ceci permet par exemple de
faire fonctionner un et un seul serveur Web.

Un cas souvent mal compris est celui du protocole X-windows.
En effet, dans le cas de cette application, le serveur n'est pas celui qu'on croit.
Lors d'un acces Telnet, la personne qui veut se connecter à ce service est le
client, et la machine qui répond est le serveur .... logique ... Dans le cas
X-windows, le client est le programme lui-même, et le serveur est votre
logiciel d'affichage. Pour cette raison, c'est bien le programme fonctionnant
sur l'ordinateur distant qui initialise la connexion. Si le programme se trouve
sur internet et que vous voulez le faire apparaître sur votre fenêtre
d'affichage, le problème décrit ci-dessus se pose. Il en est de même avec les
logiciels de communication point-à-point tel que les jeux ou les logiciels de
téléphonie. Les deux bouts sont alors client et serveur en même temps.

Auteur : Ernst Lopes Cardozo (e.lopes.cardozo@aranea.nl)
Traduction : Vincent Gillet (vincent@isicom.fr)
======================================================================