« NAT protège le réseau comme un pare-feu. »
NAT traduit des adresses et des ports. Il peut rendre une connexion entrante impossible en l’absence de traduction, mais il ne remplace ni une politique de filtrage ni l’analyse des flux autorisés.
01Construire le laboratoire
chmod +x module4-nat-lab.sh
sudo ./module4-nat-lab.sh setup
Le namespace externe m4n-wan connaît seulement le réseau 203.0.113.0/24. Il ne possède aucune route vers 10.50.0.0/16.
02Observer l’aller sans retour
Lance un serveur HTTP externe :
sudo ip netns exec m4n-wan python3 -m http.server 8080 --bind 203.0.113.2
Dans un autre terminal :
sudo ip netns exec m4n-r1 tcpdump -ni any 'tcp port 8080'
Puis depuis le client :
sudo ip netns exec m4n-cli curl --max-time 3 http://203.0.113.2:8080/
03Ajouter le masquerade
cat > /tmp/m4-nat.nft <<'EOF'
flush ruleset
table ip nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname "wan0" ip saddr 10.50.0.0/16 masquerade
}
}
EOF
sudo ip netns exec m4n-r1 nft -f /tmp/m4-nat.nft
sudo ip netns exec m4n-cli curl -s http://203.0.113.2:8080/ | head
Comprends ce qui change réellement
Le routeur remplace la source 10.50.20.21 par son adresse WAN 203.0.113.1. Le serveur externe sait répondre à cette adresse locale. Conntrack mémorise la traduction et restitue la destination privée au retour.
04Publier un serveur interne
Arrête le serveur externe. Lance ensuite le service interne :
sudo ip netns exec m4n-srv python3 -m http.server 8080 --bind 10.50.30.10
Ajoute la règle DNAT dans la chaîne prerouting :
sudo ip netns exec m4n-r1 nft add rule ip nat prerouting iifname "wan0" ip daddr 203.0.113.1 tcp dport 8080 dnat to 10.50.30.10:8080
sudo ip netns exec m4n-wan curl -s http://203.0.113.1:8080/ | head
05Distinguer NAT et filtrage
| Question | NAT | Pare-feu |
|---|---|---|
| Quelle adresse apparaît sur le WAN ? | Décide la traduction | Ne change pas l’adresse |
| Quel port interne reçoit la connexion ? | DNAT peut le modifier | Autorise ou bloque |
| Qui a le droit de se connecter ? | Ne suffit pas | Décision de politique |
| Le retour appartient-il à la même connexion ? | Conntrack restitue la traduction | Conntrack peut autoriser l’état established |
Publie vers une adresse inexistante
- remplace temporairement la destination DNAT par
10.50.30.99; - capture ARP sur
srv0dans le routeur ; - relance la requête externe ;
- montre que le routeur cherche une machine qui ne répond pas ;
- rétablis
10.50.30.10.
06Nettoyer
sudo ip netns exec m4n-r1 nft flush ruleset
sudo ./module4-nat-lab.sh cleanup
✓Ce que tu retiens
Le SNAT ou masquerade donne une source routable aux connexions sortantes. Le DNAT publie une destination interne. Ces traductions s’appuient sur l’état de connexion, mais elles ne définissent pas à elles seules une politique de sécurité.