Le NAT (Network Address Translation) réécrit les adresses IP des paquets qui traversent un routeur. C'est lui qui permet à toutes les machines d'un réseau privé (192.168.x.x) de partager une seule IP publique pour sortir sur Internet. On distingue le SNAT (réécrit l'adresse source, trafic sortant) et le DNAT (réécrit la destination, c'est le port forwarding). Ce guide explique les deux sens, le rôle central du suivi de connexion (conntrack), le CGNAT des fournisseurs d'accès, et pourquoi IPv6 s'en passe, le tout avec un lab Linux en iptables et nftables.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre le NAT : pourquoi et comment il partage une IP publique.
- Distinguer SNAT et DNAT, et savoir dans quelle chaîne chacun agit.
- Faire du port forwarding sous Linux (iptables et nftables).
- Lire une entrée conntrack pour voir une traduction en direct.
- Reconnaître le CGNAT et comprendre le double NAT.
- Savoir pourquoi IPv6 n'utilise pas de NAT.
Qu'est-ce que le NAT ?
Section intitulée « Qu'est-ce que le NAT ? »Le NAT réécrit les adresses IP (et souvent les ports) dans l'en-tête des paquets qui traversent un routeur. Son usage dominant : faire sortir un réseau d'adresses privées vers une IP publique partagée.
Les plages privées (RFC 1918) ne sont pas routables sur Internet :
| Plage | Notation |
|---|---|
10.0.0.0/8 | classe A privée |
172.16.0.0/12 | classe B privée |
192.168.0.0/16 | classe C privée |
Le NAT a retardé l'épuisement d'IPv4 en laissant des milliers de machines partager quelques IP publiques. Voir le détail de ces plages dans le guide IP et sous-réseaux.
SNAT et DNAT : les deux sens du NAT
Section intitulée « SNAT et DNAT : les deux sens du NAT »Tout le NAT se résume à quelle adresse on réécrit et dans quelle chaîne :
| SNAT | DNAT | |
|---|---|---|
| Réécrit | IP source | IP destination |
| Sens | trafic sortant | trafic entrant |
| Chaîne | POSTROUTING | PREROUTING |
| Usage | partager une IP publique | port forwarding |
Pourquoi ces chaînes ? Le DNAT agit en PREROUTING parce que la nouvelle destination doit être connue avant que le noyau décide où router le paquet. Le SNAT agit en POSTROUTING parce que l'IP de sortie n'est connue qu'après le choix de l'interface.
# SNAT dynamique (MASQUERADE) : prend l'IP de l'interface de sortiesudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# SNAT fixe : IP publique connue (plus performant)sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.1
# DNAT : redirige le port 80 entrant vers un serveur internesudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:8080sudo nft add table ip natsudo nft add chain ip nat prerouting { type nat hook prerouting priority dstnat \; }sudo nft add chain ip nat postrouting { type nat hook postrouting priority srcnat \; }
# SNAT dynamique / fixesudo nft add rule ip nat postrouting oifname "eth0" masqueradesudo nft add rule ip nat postrouting oifname "eth0" snat to 203.0.113.1
# DNATsudo nft add rule ip nat prerouting iifname "eth0" tcp dport 80 dnat to 192.168.1.10:8080MASQUERADE, SNAT et PAT
Section intitulée « MASQUERADE, SNAT et PAT »Trois termes prêtent à confusion :
- MASQUERADE est un SNAT dynamique : il prend automatiquement l'IP de l'interface de sortie. Idéal quand l'IP publique est attribuée par DHCP (elle peut changer). C'est ce qu'utilise le guide homelab réseau pour partager Internet.
- SNAT
--to-sourcefixe une IP publique connue : plus performant (pas de recalcul à chaque connexion), à privilégier sur IP fixe. - PAT (Port Address Translation, ou « NAT overload ») désigne le fait que plusieurs machines partagent une seule IP, distinguées par le port source réécrit. En pratique, le masquerade domestique est du PAT.
| Type | Rapport | Usage |
|---|---|---|
| NAT statique 1:1 | une IP privée -> une IP publique dédiée | exposer un serveur |
| PAT (n:1) | N machines -> 1 IP publique | box, masquerade |
conntrack : le NAT suit les connexions
Section intitulée « conntrack : le NAT suit les connexions »Le NAT ne s'applique qu'au premier paquet d'un flux. Ensuite, le suivi de connexion (conntrack) de Netfilter mémorise la traduction et l'applique automatiquement aux paquets suivants et aux réponses.
conntrack -L affiche deux tuples par connexion : l'original (ce que l'émetteur envoie) et le reply (ce que le noyau attend en retour). Quand il y a NAT, le reply n'est pas l'inverse de l'original. Voici une entrée réelle issue du lab, où un client privé 10.0.0.10 sort vers 1.1.1.1 :
icmp 1 29 src=10.0.0.10 dst=1.1.1.1 type=8 ... src=1.1.1.1 dst=172.17.0.5 type=0 ...Lecture : le client envoie depuis 10.0.0.10, mais le serveur répond à 172.17.0.5, l'IP de la passerelle après SNAT. Ce décalage entre les src=/dst= des deux lignes est la signature du NAT.
conntrack -L # toutes les connexions suiviesconntrack -L --src-nat # uniquement les connexions SNATconntrack -L --dst-nat # uniquement les connexions DNATLe port forwarding en pratique
Section intitulée « Le port forwarding en pratique »Exposer un service interne vers l'extérieur, c'est du DNAT. Mais une règle DNAT seule ne suffit pas : c'est l'erreur la plus fréquente.
-
Activer le routage IP
Fenêtre de terminal sudo sysctl -w net.ipv4.ip_forward=1# persistant : net.ipv4.ip_forward=1 dans /etc/sysctl.d/99-nat.conf -
Ajouter la règle DNAT (PREROUTING)
Fenêtre de terminal sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80 -
Autoriser le flux dans FORWARD
Fenêtre de terminal sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
Le lab confirme la règle DNAT en place :
-A PREROUTING -p tcp -m tcp --dport 9090 -j DNAT --to-destination 10.0.0.10:8080Sans ip_forward=1 et sans règle FORWARD qui accepte le trafic (la chaîne a souvent une politique DROP), le DNAT semble inerte. C'est le piège classique du port forwarding.
Les types de NAT et le casse-tête P2P
Section intitulée « Les types de NAT et le casse-tête P2P »Pour la VoIP, les jeux et le P2P, le comportement du NAT compte. Quatre types classiques (RFC 3489), du plus permissif au plus strict :
| Type | Comportement |
|---|---|
| Full-cone | mapping fixe ; tout hôte externe peut joindre le port public |
| Restricted-cone | seul un hôte déjà contacté (même IP) peut répondre |
| Port-restricted | restriction sur l'IP et le port externes |
| Symmetric | un mapping public différent par destination |
Le NAT symétrique casse le P2P : un serveur STUN apprend à l'hôte son IP:port public, mais avec un NAT symétrique, le port alloué pour parler au pair diffère de celui vu par STUN. L'adresse apprise est inutilisable. D'où trois briques en VoIP/WebRTC :
- STUN : découvre l'adresse publique (marche sauf en symétrique).
- TURN : serveur relais quand le direct échoue (toujours fonctionnel, mais coûteux).
- ICE : choisit le meilleur chemin parmi les candidats, et bascule sur TURN si besoin.
CGNAT : quand le fournisseur partage l'IP
Section intitulée « CGNAT : quand le fournisseur partage l'IP »Le CGNAT (Carrier-Grade NAT) mutualise une IP publique entre plusieurs abonnés chez le fournisseur d'accès. Il utilise la plage dédiée RFC 6598 : 100.64.0.0/10, choisie pour ne pas entrer en collision avec le RFC 1918 des réseaux domestiques.
Si vous voyez une adresse en 100.64.x.x sur le WAN de votre box, vous êtes en double NAT (NAT de la box + CGNAT du fournisseur). Conséquence concrète : le port forwarding devient impossible côté client, donc pas d'auto-hébergement direct. Les contournements : demander une IPv4 publique au fournisseur, ou passer par un tunnel/relais.
NAT et IPv6 : pourquoi on s'en passe
Section intitulée « NAT et IPv6 : pourquoi on s'en passe »En IPv6, le NAT n'est en principe pas nécessaire : l'espace d'adressage est assez vaste pour donner une adresse globale unique à chaque machine, ce qui restaure la connectivité de bout en bout.
- NAT66 (IPv6 vers IPv6) est déconseillé par l'IETF (RFC 5902).
- NPTv6 (translation de préfixe) existe pour des cas précis (multi-homing) mais reste marginal.
- L'approche recommandée : préfixe global routable + pare-feu IPv6 à états qui bloque l'entrant par défaut. Même protection perçue que le NAT, sans casser le bout-en-bout.
En 2026, la position est stable : pas de NAT en IPv6, la sécurité passe par le pare-feu, pas par la traduction d'adresse.
Pièges courants
Section intitulée « Pièges courants »- Oublier
ip_forward=1: le noyau ne route pas, le DNAT paraît inerte. - Oublier la règle FORWARD : politique
DROP, le trafic redirigé est jeté malgré un DNAT correct. - Hairpin NAT : accéder à son service via son IP publique depuis le LAN échoue souvent (le serveur répond en direct au client local sans repasser par le routeur). Correctif : un SNAT sur le trafic interne -> interne pour forcer le retour par le routeur.
- Confondre SNAT et DNAT : SNAT en POSTROUTING (source, sortant), DNAT en PREROUTING (destination, entrant). Inverser ne produit aucun effet.
- Double NAT (CGNAT + box) : empile deux traductions et casse le port forwarding.
À retenir
Section intitulée « À retenir »- Le NAT réécrit les adresses IP pour faire passer un réseau privé (RFC 1918) derrière une IP publique partagée.
- SNAT réécrit la source en POSTROUTING (sortie) ; DNAT réécrit la destination en PREROUTING (entrée, port forwarding).
- MASQUERADE = SNAT dynamique (IP de l'interface) ; le masquerade domestique est en réalité du PAT (partage par les ports).
- Le NAT s'appuie sur conntrack : le décalage entre les tuples original et reply est la signature d'une traduction.
- Le port forwarding exige
ip_forward=1et une règle FORWARD, pas seulement le DNAT. - Le CGNAT (
100.64.0.0/10) partage l'IP du fournisseur et empêche le port forwarding côté client. - IPv6 n'utilise pas de NAT : adresses globales + pare-feu à états (NAT66 déconseillé).
FAQ : questions fréquentes sur le NAT
Section intitulée « FAQ : questions fréquentes sur le NAT »Réécrire les adresses
Le NAT (Network Address Translation) réécrit les adresses IP (et souvent les ports) des paquets qui traversent un routeur. Usage principal : faire sortir un réseau d'adresses privées (RFC 1918) derrière une IP publique partagée.| Plage privée | Notation |
|---|---|
10.0.0.0/8 |
classe A |
172.16.0.0/12 |
classe B |
192.168.0.0/16 |
classe C |
Source ou destination
| SNAT | DNAT | |
|---|---|---|
| Réécrit | IP source | IP destination |
| Sens | sortant | entrant |
| Chaîne | POSTROUTING | PREROUTING |
| Usage | partager une IP | port forwarding |
DNAT + forwarding + FORWARD
# 1. Activer le routage IP
sudo sysctl -w net.ipv4.ip_forward=1
# 2. DNAT en PREROUTING
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.10:80
# 3. Autoriser le flux dans FORWARD
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
Le DNAT seul ne suffit pas : sans ip_forward=1 et sans règle FORWARD qui accepte le trafic (la chaîne est souvent en DROP), la redirection paraît inerte. C'est l'erreur numéro un du port forwarding.Un SNAT dynamique
Le MASQUERADE est un SNAT dynamique : il prend automatiquement l'IP de l'interface de sortie.sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
C'est idéal quand l'IP publique est attribuée par DHCP et peut changer : le noyau la relit à chaque fois. Sur une IP fixe, SNAT --to-source 203.0.113.1 est plus performant (pas de recalcul).Techniquement, le masquerade domestique est du PAT (Port Address Translation) : plusieurs machines partagent une seule IP, désambiguïsées par leur port source réécrit.Le NAT du fournisseur d'accès
Le CGNAT (Carrier-Grade NAT) partage une IP publique entre plusieurs abonnés chez le fournisseur d'accès. Il utilise la plage dédiée RFC 6598100.64.0.0/10, choisie pour ne pas entrer en collision avec le RFC 1918 des réseaux domestiques.Si le WAN de votre box affiche une adresse en 100.64.x.x, vous êtes en double NAT (NAT box + CGNAT fournisseur). Conséquences :- le port forwarding devient impossible côté client ;
- pas d'auto-hébergement direct.
Non, IPv6 s'en passe
En IPv6, le NAT n'est en principe pas nécessaire : l'espace d'adressage est assez vaste pour donner une adresse globale unique à chaque machine, ce qui restaure la connectivité de bout en bout.- NAT66 (IPv6 vers IPv6) est déconseillé par l'IETF (RFC 5902).
- NPTv6 (translation de préfixe) existe pour des cas précis (multi-homing) mais reste marginal.