đ NAT â Translation d'Adresse (PAT, DNAT & iptables)
Guide complet IDEO-Lab sur la translation d'adresses (Couche 3), pilier d'IPv4.
Définition & Objectif
Network Address Translation. Ăpuisement IPv4.
NAT IPv4 RouteurIP Privées (RFC 1918)
192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8.
IP Publiques
Uniques, routables sur Internet, assignées par le FAI.
IP Publique WANNAT Statique (1-to-1)
1 IP Publique <-> 1 IP Privée. (Serveurs).
Statique 1-to-1NAT Dynamique (Many-to-Many)
Pool d'IP Privées -> Pool d'IP Publiques. (Legacy).
Dynamique PoolPAT / NAPT (Overload)
Many-to-One. (99% des usages). Utilise les Ports (L4).
PAT NAPT MasqueradingTable d'état NAT
Suivi des connexions (IP:Port <-> IP:Port).
Stateful Table NATPort Forwarding (DNAT)
NAT Entrant. (IP Pub:Port -> IP Priv:Port).
Port Forwarding DNATvs. Proxy & VPN
NAT (L3/L4) vs Proxy (L7) vs VPN (Tunnel).
Proxy VPNProblĂšmes (Protocoles)
Rupture End-to-End, ProblĂšmes (FTP, SIP, IPsec AH).
End-to-End FTP SIPSolution : ALG
Application Layer Gateway. "NAT intelligent" L7.
ALG FirewallSolution : NAT-Traversal
IPsec (UDP 500/4500), STUN/TURN (VoIP/WebRTC).
NAT-T STUN UDP 4500Outil : iptables (Linux)
Table `nat` (POSTROUTING, PREROUTING).
iptables Linux Netfilteriptables : MASQUERADE
La cible PAT (SNAT) pour IP Publique dynamique (eth0).
MASQUERADE POSTROUTINGiptables : DNAT
La cible Port Forwarding (PREROUTING).
DNAT PREROUTINGLe "Traducteur" d'Adresses
NAT (Network Address Translation), ou "Translation d'Adresse RĂ©seau", est une fonction (gĂ©nĂ©ralement exĂ©cutĂ©e par un routeur ou un firewall) qui modifie (réécrit) les informations d'adressage IP (Source ou Destination) dans l'en-tĂȘte d'un paquet IP (Couche 3) lorsqu'il traverse la frontiĂšre entre deux rĂ©seaux (typiquement, le LAN et le WAN).
Il agit comme un traducteur, permettant à des appareils utilisant des adresses IP "privées" (non-routable) de communiquer avec des appareils sur "Internet" (IP publiques).
La Raison d'Ătre : L'Ăpuisement d'IPv4
Le protocole IPv4 (ex: 80.1.2.3) utilise des adresses 32 bits, offrant un maximum de ~4.3 milliards d'adresses uniques.
Dans les années 1990, il est devenu évident que ce ne serait pas suffisant pour connecter tous les appareils (PC, téléphones, serveurs) de la planÚte. L'épuisement officiel des blocs a eu lieu dans les années 2010.
Le NAT a été inventé comme une solution (un "pansement") pour permettre à des centaines d'appareils (un LAN d'entreprise) de partager une seule adresse IP publique, économisant ainsi massivement l'espace d'adressage IPv4.
Pour que le NAT fonctionne, l'IETF a réservé (dans le RFC 1918) des plages d'adresses spécifiques pour un usage privé (LAN). Ces adresses sont non-routables sur l'Internet public.
| Plage (Classe) | Préfixe CIDR | Usage typique |
|---|---|---|
10.0.0.0 Ă 10.255.255.255 | 10.0.0.0/8 (16.7M adresses) | Grandes entreprises (Classe A). |
172.16.0.0 Ă 172.31.255.255 | 172.16.0.0/12 (1M adresses) | Entreprises (Classe B), AWS VPC. |
192.168.0.0 à 192.168.255.255 | 192.168.0.0/16 (65k adresses) | Réseaux domestiques, TPE (Classe C). |
Adresse Spéciale (Loopback & APIPA)
- Loopback (
127.0.0.1) : "localhost". Fait référence à votre propre machine. - APIPA (
169.254.0.0/16) : Adresse d'auto-assignation si un appareil ne parvient pas Ă contacter un serveur DHCP.
Une Adresse IP Publique est une adresse qui n'est pas dans les plages RFC 1918. Elle est :
- Unique au monde (Ă un instant T).
- Routable sur l'Internet global.
- AssignĂ©e par votre FAI (ISP), qui la loue lui-mĂȘme Ă un RIR (ex: RIPE en Europe).
Statique vs. Dynamique
- Dynamique : (Particuliers) Le FAI vous assigne une IP (souvent via DHCP) qui peut changer (ex: à chaque redémarrage de la box).
- Statique (Fixe) : (Entreprises) Le FAI vous garantit une IP qui ne change jamais. C'est obligatoire pour héberger un serveur (Web, Email, VPN) car les enregistrements DNS doivent pointer vers une adresse stable.
Le NAT Statique crée un mappage permanent (1-to-1) entre une adresse IP publique et une adresse IP privée.
Usage : Hébergement de Serveurs
Utilisé lorsque vous possédez un "bloc" d'IP publiques de votre FAI et que vous souhaitez dédier une IP publique à un serveur interne (ex: serveur de messagerie).
Table de NAT Statique (Exemple)
| IP Publique (WAN) | IP Privée (DMZ) | Service |
|---|---|---|
| 80.1.2.100 | 172.16.1.10 | Serveur Web |
| 80.1.2.101 | 172.16.1.11 | Serveur Mail (MX) |
| 80.1.2.102 | 172.16.1.12 | Serveur VPN |
Le firewall translate automatiquement tout le trafic (tous les ports) Ă destination de 80.1.2.100 vers 172.16.1.10.
C'est différent du Port Forwarding (DNAT), qui mappe des *ports* spécifiques d'une seule IP publique.
(Historique / Moins courant) Le NAT Dynamique mappe un pool d'IP privées à un pool (plus petit) d'IP publiques.
Fonctionnement (Premier arrivé, premier servi)
- Pool Privé : 192.168.1.0/24 (254 utilisateurs)
- Pool Public : 80.1.2.100 Ă 80.1.2.150 (51 IP)
- User 1 (192.168.1.10) se connecte. Le routeur lui assigne 80.1.2.100.
- User 2 (192.168.1.11) se connecte. Le routeur lui assigne 80.1.2.101.
- ...
- User 52 (192.168.1.61) se connecte. Le routeur n'a plus d'IP publique disponible.
- User 52 est bloqué (ne peut pas accéder à Internet).
Ce type de NAT n'est plus utilisé car il est inefficace. Il a été remplacé par le PAT (NAT Overload).
PAT (Port Address Translation) ou NAPT (Network Address Port Translation), aussi appelé NAT Overload ou Masquerading, est le type de NAT utilisé par 99% des réseaux (y compris votre Box Internet).
Il permet à plusieurs (Many) IP privées (ex: 65 000) de partager une seule (One) IP publique.
Le Secret : Les Ports (Couche 4)
Le routeur ne se contente pas de translater l'IP (L3), il translate aussi le Port Source (L4) pour suivre les connexions (sessions).
Exemple de Flux
IP Publique du Routeur : 80.1.2.3 --- 1. RequĂȘte de PC A --- De: 192.168.1.50:12345 (Port Source alĂ©atoire) Vers: Google (8.8.8.8):443 --- 2. RequĂȘte de PC B --- De: 192.168.1.60:54321 Vers: Netflix (52.1.2.3):443 --- 3. Le Routeur (NAT) réécrit et envoie --- Paquet A: De: 80.1.2.3:60001 (Nouveau Port Source) Vers: 8.8.8.8:443 Paquet B: De: 80.1.2.3:60002 (Nouveau Port Source) Vers: 52.1.2.3:443 --- 4. Quand Google rĂ©pond Ă 80.1.2.3:60001 --- Le routeur consulte sa table (voir 3.1) et sait qu'il doit renvoyer le paquet Ă 192.168.1.50:12345.
Le PAT (NAT Overload) (voir 2.3) fonctionne car le routeur est Stateful : il mémorise chaque session sortante dans une Table d'état NAT (ou "State Table").
Exemple de Table d'Ătat (SimplifiĂ©e)
| Interne (Source) | Destination (WAN) | Traduction (Source NAT) | Ătat |
|---|---|---|---|
| 192.168.1.50:12345 | 8.8.8.8:443 | 80.1.2.3:60001 | ESTABLISHED |
| 192.168.1.60:54321 | 52.1.2.3:443 | 80.1.2.3:60002 | ESTABLISHED |
Flux (Entrant)
- Un paquet arrive sur le routeur (WAN).
- Source : 8.8.8.8:443, Destination : 80.1.2.3:60001
- Le routeur consulte sa table d'état.
- Match ! Il sait que
80.1.2.3:60001correspond Ă192.168.1.50:12345. - Il réécrit l'IP/Port de destination et envoie le paquet sur le LAN.
Si un paquet arrive sur le port 80.1.2.3:55555 (non sollicité), la table n'a pas d'entrée, le paquet est bloqué (Implicit Deny). C'est pour cela que le NAT agit comme un firewall basique.
Le NAT/PAT (Source NAT) gĂšre le trafic sortant (LAN -> WAN). Mais comment un utilisateur Internet (WAN) peut-il initier une connexion vers un serveur (LAN) ?
Réponse : Port Forwarding (Redirection de Port), aussi appelé DNAT (Destination NAT).
L'Ouverture de Port
C'est une rĂšgle statique configurĂ©e sur le routeur qui dit : "Tout trafic arrivant sur mon IP publique, sur un port spĂ©cifique, doit ĂȘtre réécrit et redirigĂ© vers une IP privĂ©e spĂ©cifique."
Exemple de RĂšgles (Box Internet)
| Nom | Protocole | Port Externe (WAN) | IP Interne (LAN) | Port Interne |
|---|---|---|---|---|
| Serveur Web | TCP | 80 | 192.168.1.100 | 80 |
| Serveur Web (S) | TCP | 443 | 192.168.1.100 | 443 |
| Jeu (Minecraft) | TCP | 25565 | 192.168.1.50 | 25565 |
| SSH (Admin) | TCP | 2222 | 192.168.1.50 | 22 |
Dans le dernier exemple (translation de port), l'admin se connecte Ă 80.1.2.3:2222, et le routeur le redirige vers 192.168.1.50:22.
Ces trois technologies masquent l'IP, mais sont fondamentalement différentes.
| CritĂšre | NAT (PAT) | Proxy (HTTP) | VPN (Tunnel) |
|---|---|---|---|
| Niveau OSI | Couche 3/4 (Réseau/Transport) | Couche 7 (Application) | Couche 3/4 (Encapsulation) |
| Fonction | Traducteur (IP/Port) | Médiateur (Intermédiaire) | Tunnel (Encapsulation) |
| Conscience (Client) | Transparent (Client l'ignore) | Conscient (Client doit ĂȘtre configurĂ©) | Conscient (Client doit lancer un logiciel) |
| Protocole | Agnostique (Tout trafic IP) | Spécifique (HTTP, SOCKS) | Agnostique (Tout trafic IP) |
| Chiffrement | Non (par défaut) | Non (par défaut) | Oui (Objectif principal) |
Le NAT est un "hack" qui casse le principe "end-to-end" d'Internet (l'idée que chaque appareil peut initier une connexion vers un autre).
Un serveur sur Internet ne peut pas initier une connexion vers un PC (192.168.1.50) caché derriÚre un NAT.
Protocoles "Cassés" par le NAT
Le NAT pose problĂšme aux protocoles qui (1) ne sont pas TCP/UDP, ou (2) qui intĂšgrent des informations IP/Port dans leur charge utile (Payload L7).
- IPsec (AH) : (Voir 3.2 du guide VPN) Le mode AH signe l'en-tĂȘte IP. Le NAT modifie l'en-tĂȘte IP. La signature devient invalide et le paquet est rejetĂ©.
- FTP (Mode Actif) : Le client (derriÚre NAT) dit au serveur : "Connecte-toi à moi sur 192.168.1.50, port 5000". Le serveur FTP (sur Internet) ne peut pas router vers cette IP privée.
- VoIP (SIP) : Le protocole SIP (initiation d'appel) envoie la "prochaine" adresse de connexion (ex: 192.168.1.50:9000) dans le payload L7. L'autre partie ne peut pas joindre cette IP.
Un ALG est une fonction "intelligente" d'un firewall/routeur qui effectue une Inspection Profonde (DPI) pour "réparer" les protocoles cassés par le NAT.
Exemple (ALG pour FTP)
- Le firewall (avec ALG) inspecte le trafic FTP (Port 21).
- Il détecte la commande "Active Mode" du client :
PORT 192.168.1.50:5000. - L'ALG réécrit le paquet à la volée :
PORT 80.1.2.3:60003(son IP publique). - Il crĂ©e une rĂšgle NAT/ACL temporaire (DNAT) pour autoriser le serveur FTP Ă se connecter Ă
80.1.2.3:60003.
ProblÚme : Les ALGs sont complexes et causent souvent plus de problÚmes qu'ils n'en résolvent (surtout avec SIP), et sont inutiles si le trafic est chiffré (le firewall ne peut pas lire le payload).
Ce sont des techniques (cÎté client/serveur) pour "traverser" le NAT sans avoir besoin d'un ALG.
NAT-T (IPsec)
ProblÚme : Le protocole ESP (IP 50) est bloqué par les PATs.
Solution : Les deux extrémités du VPN (lors de IKE sur UDP 500) détectent qu'il y a un NAT. Elles décident alors d'encapsuler tout le trafic ESP (normalement L3) à l'intérieur de paquets UDP (Port 4500).
Le routeur NAT ne voit que du trafic UDP normal (80.1.2.3:4500) et le laisse passer.
STUN / TURN (VoIP, WebRTC)
Utilisé par les applications (Zoom, Teams, jeux) pour gérer le NAT.
- STUN : Un protocole simple. Le client (PC A) contacte un serveur STUN sur Internet. Le serveur STUN répond : "Voici l'IP:Port publique (
80.1.2.3:60001) que je vois, c'est ton adresse NATée." PC A peut alors envoyer cette IP publique à PC B. - TURN : (Plan B si STUN échoue, ex: NAT Symétrique). Le trafic est relayé. PC A envoie à TURN, TURN envoie à PC B. (Coûteux en bande passante).
Sur Linux, le NAT est géré par Netfilter (le framework firewall du noyau). On le configure avec l'outil iptables et sa table spécifique : -t nat.
La Table nat
Cette table contient des "chaßnes" (chains) qui s'appliquent à différents moments du traitement d'un paquet.
| ChaĂźne | Moment | Usage |
|---|---|---|
PREROUTING | DÚs réception (Avant Routage) | DNAT (Port Forwarding). (Modifier la destination). |
POSTROUTING | Juste avant de sortir (AprĂšs Routage) | SNAT / MASQUERADE (Modifier la source). |
OUTPUT | Trafic généré localement | (Usage rare). |
C'est la rĂšgle pour transformer un PC Linux en "Routeur Internet" (PAT / NAT Overload).
Cible : MASQUERADE
Utilise la chaĂźne POSTROUTING (car on modifie la source *aprĂšs* avoir dĂ©cidĂ© d'oĂč le paquet sort).
# Activer le routage (IP Forwarding) sysctl -w net.ipv4.ip_forward=1 # Configurer la rĂšgle de NAT (PAT) # -t nat : Utilise la table NAT # -A POSTROUTING : Ajoute Ă la chaĂźne POSTROUTING # -o eth0 : S'applique au trafic sortant sur l'interface WAN (eth0) # -j MASQUERADE : Cible = "Masque" le trafic avec l'IP de eth0 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
MASQUERADE est idéal pour les IP publiques dynamiques (FAI).
Cible : SNAT
Si vous avez une IP publique statique (ex: 80.1.2.3), utilisez SNAT (plus efficace) :
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 80.1.2.3
C'est la rĂšgle de DNAT (Destination NAT). Elle utilise la chaĂźne PREROUTING (car on modifie la destination *avant* que le routeur ne dĂ©cide oĂč l'envoyer).
Cible : DNAT
# Activer le routage
sysctl -w net.ipv4.ip_forward=1
# 1. RĂšgle DNAT (Rediriger le port 80 vers un serveur web interne)
# -i eth0 : Trafic entrant sur l'interface WAN
# -p tcp --dport 80 : Port 80
# -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
-j DNAT --to-destination 192.168.1.100:80
# 2. RĂšgle Firewall (OBLIGATOIRE)
# (Autoriser ce trafic (maintenant destiné à 192.168.1.100)
# Ă ĂȘtre "forwardĂ©" (routĂ©) vers le LAN)
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 \
-d 192.168.1.100 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT| Type | Nom Technique | Direction | Ratio (Public:Privé) | Usage |
|---|---|---|---|---|
| PAT (Overload) | Source NAT (SNAT) / Masquerading | Sortant (LAN -> WAN) | 1-to-Many | 99% des usages (Box Internet, Entreprise). Permet au LAN d'accéder à Internet. |
| Static NAT | Static NAT | Entrant / Sortant | 1-to-1 | Héberger un serveur (ex: Mail) qui nécessite sa propre IP publique dédiée. |
| Port Forwarding | Destination NAT (DNAT) | Entrant (WAN -> LAN) | 1 (Port) to 1 (Port) | Héberger un service (Jeu, Web) quand on n'a qu'une seule IP publique. |
| Dynamic NAT | Dynamic NAT | Sortant | Many-to-Many (Pool) | (ObsolĂšte) Partage d'un pool d'IP (plus petit que le LAN). |
