NAT et PAT: c’est quoi donc ?
Date: 19/07/2011 | Catégories: Open-source,Planet-libre,Reseau,Web | Tags: définition,nat,pat
Sur ce blog, j'aborde régulièrement des sujets technologiques en relation avec les réseaux informatiques. Une des question récurrente concerne la translation d'adresses (et de ports) dans les réseaux IPv4. Nous allons donc essayer dans ce billet d'expliquer le fonctionnement des mécanismes NAT ("Network Address Translation" / Translation d'adresses) et PAT ("Port Address Translation" / Translation de port).
Pourquoi ?
Toutes les machines connectées (PCs, serveurs, imprimantes réseau, smarthphones, télévisions multimédias...) disposent d'une adresse ("adresse IP") permettant de l'identifier sur le réseau. Il existe deux sortes d'adresses: les privées et les publiques.
Une adresse privée est seulement valable sur un réseau privé et ne peut donc pas être utilisé pour communiquer sur un réseau public comme Internet. En effet, Internet n'accepte de véhiculer que des adresses publiques. Le principal intérêt de l'utilisation d'adresses IP privées est de disposer d'un grand nombre d'adresses pour bâtir ses réseaux privées (entreprises, domicile...) et ainsi de palier au cruel manque d'adresses IP publiques du réseau IP version 4.
Les plages d'adresses IP v4 privées sont les suivantes (source Wikipédia):
La version 6 permettra de résoudre en partie ce problème en proposant pas moins de "667 millions de milliards d'adresses IP disponibles par mm2 de la surface de la Terre" (source Wikipédia).
Le déploiement d'IP v6 n'étant pas encore finalisé (ou même commencé...). Il est indispensable d'utiliser les technologies de NAT et de PAT pour permettre aux machines disposant d'adresses privées de pourvoir communiquer sur Internet.
Comment ?
NAT
On active le mécanisme de NAT sur les routeurs faisant le lien entre les réseaux privées et publics. Le principe général est de remplacer l'adresse IP source privée de la machine par l'adresse IP publique du routeur.
L'exemple le plus répandu est celui d'un PC client domestique (brave bête) voulant surfer sur Internet (vers un serveur Web par exemple) à travers une Box (routeur Freebox, Livebox, (+*)box...) disposant d'une fonction de NAT dynamique.
Le PC client va émettre un paquet sur sont réseau avec comme adresse source son adresse privée. La Box (qui active par défaut le mécanisme NAT dynamique), va remplacer dans le paquet l'adresse privée du PC par son adresse publique. Elle va en parallèle de cela garde en mémoire l'association (Adresse IP privée du PC > Adresse IP publique du serveur / Port client-serveur). Le serveur va donc recevoir par Internet ce paquet modifié auquel il va répondre avec un paquet de retour ayant pour adresse de destination l'adresse IP publique de la Box. Celle-ci va recevoir le paquet et finalement remplacer l'adresse IP publique de la Box par l'adresse privée du PC.
Il est donc possible avec une seule adresse IP publique de faire communiquer simultanément sur Internet plusieurs machines d'adresses IP privées.
Exemple de configuration du NAT sur une FreeBox:
Exemple de configuration du NAT sur un routeur GNU/Linux:
Voici un exemple de configuration d'un PC routeur sous GNU/Linux placé derrière votre Box et permettant de remplacer la fonction NAT de cette dernière (qu'il faudra configurer en "mode bridgé").
On part sur l'hypothèse ou votre PC dispose:
- d'une interface eth0 dans le plan d'adressage IP privée (vers le LAN)
- d'une interface eth1 dans le plan d'adressage IP public de votre FAI (vers la Box)
- d'une configuration IP correcte (serveur DNS, passerelle par défaut...)
Il faut donc saisir les lignes suivantes dans un script shell lancé au démarrage de votre machine:
iptables --table nat --flush
iptables --table nat --delete-chain
iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
service iptables restart
PAT
La lecture du chapitre précédant à mis en évidence le fait que l'on ne peut pas utiliser une adresse privée pour se déplacer sur Internet. Ainsi, si vous souhaitez héberger un serveur dans un réseau disposant d'une plage d'adresse IP privée, il va falloir ruser. En effet, dans ce cas précis, le NAT n'est d'aucune utilité car il ne fonctionne que pour les sessions à l'initiative des machines se trouvant sur le réseau privée. Dans notre cas, nous avons besoin d'un mécanisme permettant de rendre visible une machine depuis Internet. C'est le PAT qui va nous offrir cette fonctionnalités.
Prenons l'exemple d'une personne voulant héberger son serveur Web (en écoute sur le port TCP/80) chez lui, derrière sa Box.
Le client va envoyer une requête HTTP vers l'adresse IP publique de la Box (via la résolution DNS). La Box, préalablement configurée avec une redirection du port 80 vers le serveur (PAT), va remplacer l'adresse destination du paquet (l'adresse publique de la Box) par celle du serveur (l'adresse privée du serveur). Le serveur va ensuite répondre en utilisant son adresse IP privée comme adresse source. La Box va ensuite remplacer celle-ci par son adresse IP publique.
Le PC client aura donc l'impression que le serveur Web est hébergé par votre Box.
Exemple de configuration du PAT sur une FreeBox:
Exemple de configuration du PAT sur un routeur GNU/Linux:
Voici un exemple de configuration d'un PC routeur sous GNU/Linux placé derrière votre Box et permettant de remplacer la fonction PAT de cette dernière (qu'il faudra configurer en "mode bridgé").
On part sur l'hypothèse ou votre PC dispose:
- d'une interface eth0 dans le plan d'adressage IP privée (vers le LAN)
- d'une interface eth1 dans le plan d'adressage IP public de votre FAI (vers la Box)
- d'une configuration IP correcte (serveur DNS, passerelle par défaut...)
Il faut donc saisir les lignes suivantes dans un script shell lancé au démarrage de votre machine:
iptables --table nat --flush
iptables --table nat --delete-chain
iptables -t nat -A PREROUTING -p tcp --dport 80 -p DNAT --to-destination 192.168.0.1
echo 1 > /proc/sys/net/ipv4/ip_forward
service iptables restart
Nous voici arrivés à la fin de ce billet, n'hésitez pas à poser des questions complémentaires dans les commentaires ci-dessous.