NAT/PAT
Introduction
NAT : Network Address Translation
PAT : Port Address Translation
IPv4 manquant d'adresses disponbiles, le pool d'adresses IPv4 a rapidement été consommé. Seulement la création d'un nouveau protocole est longue, et risquée, le délai était trop court. C'est pourquoi, en attendant IPv6, on inventa les adresses privées + NAT/PAT.
Principes
Quand un paquet TCP/UDP arrive sur un équipement faisant du NAT et/ou du PAT :
- L'équipement réécrit le port source et/ou destination (PAT)
- L'équipement réécrit l'adresse IP source et/ou destination (NAT).
NAT/PAT est choisi par les responsables du réseau, de la sécurité et/ou de l'application.
NAT
L'idée de NAT est de réécrire l'IP src/dst lorsqu'un paquet arrive sur un équipement, avant de le transférer. Dans quel cas est-il utilisé?
Exemple :
- Je suis un particulier avec une seule adresse IP publique (comme c'est le cas actuellement).
- Cette adresse est affectée au routeur (la box)
- Tous les postes du réseau domestique envoient leurs données en direction du net vers le routeur (les postes ayant des adresses privées).
- Le routeur réécrit les paquets et agrde en mémoire une table de conversion
- Au retour, le routeur réécrit la réponse.
Lorsque le poste envoie un paquet :
- Il met son adresse privée en adresse src
- Il met une adresse sur internet en adresse dst
- Il l'envoie au routeur grâce à Ethernet
- Le routeur récupère le paquet IP et le modifie : il change l'adresse src pour mettre la sienne.
- La réponse revient vers le routeur, avec le routeur en dst
- Le routeur regarde dans sa mémoire pour savoir qui avait contacté ce serveur
- Il remodifie le paquet réponse et le renvoie vers le poste.
Autre exemple avec de la répartition de charge:
- Plusieurs équipements ont la même fonction
- Un (autre) équipement dispose d'une VIP (Virtual IP)
- L'équipement VIP réécrit les paquets pour les renvoyer vers un des équipements disposant de la même fonction
- Il maintient une table pour TCP.
PAT
L'idée du PAT est que si un paquet TCP ou UDP arrive sur un équipement faisant du PAT, cet équipement réécrit le port source ou destination. Cela sert à rediriger un port vers un autre port ou à rediriger le port d'une adresse vers une autre adresse (c'est l'usage le plus courant).
Exemple :
- J'ai une seule IP publique
- Je redirige le port 80 vers un serveur web interne (avec une IP privée)
- Je redirige le port 25 vers un serveur SMTP interne (qui a lui aussi une IP privée)
Exemple 2 :
- J'ai une seule IP publique
- J'ai un serveur interne avec une IP privée, et celui-ci s'avère très compliqué à sécuriser (pour une raison ou une autre...)
- On redirige vers ce serveur uniquement le port concerné, ce qui évite d'avoir à trop complexifier la sécurité
PAT dynamique avec pool de destination : j'ai un port sur mon routeur qui peut rediriger au choix vers plusieurs ports différents. Par exemple, le port 80 de mon routeur redirige vers les ports 2000, 2045, 3000, 6000 d'une même machine.
- Généralement utilisé pour la répartition de charge
- Plusieurs processus écoutant sur des ports différents
- On répartit la charge sur les ports
Par exemple:
- J'ai une application en Ruby, avec un serveur application Thin (équivalent d'Apache)
- J'ai plusieurs instances Thin : une par CPU, chacune écoutant sur plusieurs CPU
- Le PAT dynamique avec pool permettra la répartition de charge.
Le PAT dynamique est souvent remplacé par du proxy + cache, comme avec NGinX. Il est aussi remplacé par un protocole intermédiaire plus performant : Mod_Jk (AJP13 : un protocole Java binaire) dans lequel tout est en web, et le serveur web discutera directement avec le serveur d'application Java en binaire pour optimiser les performances.