Préliminaires :
Pour afficher la table NAT :
$ iptables -t nat -L
Pour remettre la table à zéro :
$ iptables -t nat -F
L'écriture des règles NAT n'est pas symétrique ! On translate les adresses privés en publique en sortant du rx privé. Par ailleurs la configuration du NAT s'effectue avec 'iptables' sur la passerelle uniquement !
NAT Statique : association 1 @priv et 1 @pub (action SNAT / DNAT)
a) Paquet Entrant dans le Réseau Privé
On modifie l'adresse de destination (DNAT) avant le routage (PREROUTING).
$ iptables -t nat -A PREROUTING -d @pub -i ethin -j DNAT --to-destination @priv
La translation inverse est implicite lors de la réponse.
b) Paquet Sortant vers le Réseau extérieur
On modifie l'adresse source (SNAT) après le routage (POSTROUTING).
$ iptables -t nat -A POSTROUTING -s @priv -o ethout -j SNAT --to-source @pub
La translation inverse est implicite lors de la réponse.
NAT Dynamique : association N @priv et 1 @pub (action MASQUERADE) avec @priv une adresse de réseau et mask un masque en nb de bits
$ iptables -t nat -A POSTROUTING -s @priv/mask -j MASQUERADE
En résumé :
Exemple
Considérons les réseaux privés 192.168.0.0/24 et 192.168.1.0/24 connectés à la passerelle immortal d'adresse publique 140.77.13.2 (eth1). Pour mettre en place du NAT dynamique pour ces réseaux privés, je recommande :
immortal$ iptables -t nat -A POSTROUTING -s 192.168.0.0/23 -o eth1 -j MASQUERADE
Port Forwarding
On veut mettre en place du port forwarding entre la passerelle immortal (147.210.20.1) port 2222 et le port 22 (SSH) de syl dans le réseau privé (192.168.0.3).
immortal$ iptables -t nat -A PREROUTING -d 147.210.20.1 -p tcp --dport 2222 -j DNAT --to 192.168.0.3:22 atg$ ssh toto@147.210.20.1 # SSH vers immortal atg$ ssh -p 2222 toto@147.210.20.1 # SSH vers syl