NAT : Translation d’adresse
I. Définition
Le mécanisme de translation d’adresses (aussi appelé Network Address Translation ou NAT) a été conçu pour répondre à la pénurie d’adresses IP utilisées avec le protocole IPv4.
REMARQUE : à terme, le protocole IPv6 devrait résoudre le manque d’adresses, puisque le passe d’un mécanisme 32bits à 128bits (soient 16 octets).
Le fonctionnement du NAT consiste à utiliser une seule adresse IP routable (ou un nombre limité d’adresses IP), afin de connecter l’ensemble des machines du réseau. Ceci permet de réaliser une translation au niveau de la passerelle de connexion à Internet entre l’adresse interne de la machine souhaitant se connecter (qui est non routable) et l’adresse IP de la passerelle.
Ce processus permet de sécuriser le réseau interne, puisqu’il masque totalement l’adressage interne. Vu d’un observateur extérieur au réseau, toutes les requêtes semblent provenir de la même adresse IP.
II. Types de translation
Selon les cas de figure, on va distinguer deux types de traduction (ou translation) :
- Translation statique
- Translation dynamique
Lorsqu’on associe une adresse IP publique à une adresse IP privée (interne au réseau), on appelle cela de la translation NAT statique. Le routeur (ici, il s’agirait plus d’une passerelle), permet ainsi d’associer à une adresse IP privée (exemple : 192.168.20.1), une adresse publique routable sur Internet (157.54.130.1) et de faire la traduction, dans le sent sortant, comme dans le sens entrant tout en modifiant l’adresse directement dans le paquet émis.
ATTENTION : Ce type de translation permet alors de connecter des machines du réseau interne à Internet, de manière transparente, sans pour autant résoudre le problème de pénurie d’adresses IP. En effet, pour le nombre d’adresses internes à associer il faut le même nombre d’adresses routables.
Le mécanisme de NAT dynamique permet de partager une adresse IP routable entre plusieurs équipements du réseau privé. Ainsi, vues de l’extérieur, toutes les machines du réseau d’adressage interne possèdent virtuellement la même adresse IP.
En langage anglais cela se traduit par du IP masquerading : il s’agit de mascarade IP qui est synonyme de translation NAT dynamique.
De plus, pour fonctionner ce système s’appuie également sur la translation de port (aussi appelée Port Address Translation ou PAT). Il s’agit de l’affectation d’un port source différent lors de chaque requête de telle sorte à pouvoir maintenir une correspondance entre les requêtes du réseau interne et les réponses des systèmes provenant d’Internet, toutes adressée à l’adresse IP du routeur.
NOTE : le mécanisme de PAT est également appelé NAT Overloading ou surcharge du NAT, puisque tel est son rôle.
III. Implémentation du NAT
Les correspondances entre les adresses privées (internes) et publiques (externes) sont généralement engrangées dans une table, sous forme de paire {Adresse interne, Adresse externe}. Lorsqu’une trame est transmise depuis une adresse privée vers l’extérieur, elle traverse le routeur NAT, qui remplace, dans l’entête du paquet TCP/IP, l’adresse de l’émetteur par l’adresse IP externe.
Le remplacement inverse est effectué lorsqu’une trame correspondant à cette même connexion doit être routée vers l’adresse interne. Il est donc aisé de réutiliser une entrée dans la table de correspondance du NAT, à condition qu’aucun trafic, avec ces adresses, n’ait traversé le routeur pendant un certain laps de temps paramétrable.
Exemple : table NAT simplifiée
Dans cet exemple, si aucun trafic ni aucune translation n’est apparu depuis 3600 secondes (pour la seconde ligne), l’entrée pourra être réclamée puisqu’elle est marquée comme réutilisable. Le champ durée marquant 0 signifie que la machine est déjà en conversation.
Bien que beaucoup d’applications utilisent favorablement le NAT sans difficulté, ce mécanisme n’est pas anodin et peut poser quelques problèmes à certaines applications du réseau et fait alors porter une complexité additionnelle sur le fonctionnement de ces applications.
Parmi les problèmes que l’on peut rencontrer, on peut citer :
- Les communications entre postes derrière un NAT (cas des protocoles peer-to-peer).
- Le protocole IPSec : son entête est modifié et devient alors illisible.
- Le protocole XWindow : les connexions TCP, initiées par les clients vers le display.
En règle générale, le mécanisme de NAT pose problème lorsqu’un protocole de communication transmet l’adresse IP de la machine source, dans un paquet et/ou des numéros de ports. L’adresse n’étant pas valide, après franchissement du routeur NAT, elle ne peut être employée par la machine destinataire.
REMARQUE : Pour pallier à cet inconvénient, les routeurs NAT doivent inspecter le contenu, en manipulant les paquets les traversant, afin de remplacer les adresses IP spécifiées, par les adresses externes. Cela implique de connaître le format du protocole posant problème.
IMPORTANT : le mécanisme NAT ne fait que participer à la politique de sécurité d’un site, mais ce n’est pas son objectif principal. Une fois la translation effectuée, celle-ci est bidirectionnelle. On peut donc dire que le NAT n’est pas un substitut des pare-feu.
Exemple : imaginons le réseau d’entreprise suivant :
Ainsi, pour se connecter au serveur web de l’exemple, depuis un poste en interne, il suffit d’exécuter l’url : http://192.168.1.20:80 (l’indication du port est optionnelle, mais, uniquement dans le cas où la valeur est 80).
Dans le cas où l’on souhaite atteindre ce serveur web depuis l’extérieur, il faut suivre le circuit rouge du schéma) et exécuter l’url http://85.152.44.14:80. C’’est le NAT qui effectuera la translation en http://192.168.1.20:80.
Il suffit d’appliquer ce mode de fonctionnement aux autres serveurs autorisés à disposer d’une translation d’adresses tel que le serveur Extranet de l’exemple ci-dessus (circuit bleu).
REMARQUE : dans le cadre du mécanisme NAT, on peut rencontrer des interfaces réseau appelées virbrx. Il s’agit d’interface “Virtual Bridge X“, issue du monde Xen, fournit par la bibliothèque de virtualisation libvirt pour interconnecter le monde interne, au monde externe de la machine et permettre au système NAT d’être opérationnel. Cela est généralement utilisé comme un pont (ou bridge) et se configure dans le répertoire /etc/sysconfig/network-scripts, via le script ifcfg-virbr0 suivant (par exemple) :
NAME= ""
BOOTPROTO=none
MACADDR=""
TYPE=Bridge
DEVICE=virbr0
NETMASK=255.255.255.0
MTU=""
BROADCAST=192.168.0.255
IPADDR=192.168.0.1
NETWORK=192.168.0.0
ONBOOT=yes
Lorsque le pont est créé, il faut faire en sorte de router le trafic et d’activer l’option de NAT :
# echo 1 > /proc/sys/net/ipv4/ip_forward (routage)
# iptables –t NAT –A POSTROUTING –o <WAN> -s 192.168.0.0/24 –j MASQUERADE (natage)
Dans le prochain chapitre, nous allons voir comment configurer une adresse IP sous Linux, de manière simple et de manière avancée.