J'ai supprimé ma réponse d'origine, car je n'étais pas entièrement convaincue qu'elle était correcte. J'ai depuis eu le temps de mettre en place un petit réseau virtuel de VMs pour simuler le réseau en question. Voici l'ensemble des règles de pare-feu qui ont fonctionné pour moi (au iptables-save
format, pour le nat
tableau uniquement):
-A PREROUTING -d 89.179.245.232/32 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
-A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.10/32 -p tcp -m multiport --dports 22,25,80,443 -j MASQUERADE
La première POSTROUTING
règle est un moyen simple de partager la connexion Internet avec le LAN. Je l'ai laissé là pour être complet.
La PREROUTING
règle et la deuxième POSTROUTING
règle établissent ensemble les NAT appropriés, de sorte que les connexions au serveur via l'adresse IP externe puissent se produire, que les connexions proviennent de l'extérieur ou de l'intérieur du LAN. Lorsque les clients sur le LAN se connectent au serveur via l'adresse IP externe, le serveur considère que les connexions proviennent de l'adresse IP interne du routeur (192.168.2.1).
Fait intéressant, il s'avère qu'il existe quelques variantes de la deuxième règle POSTROUTING qui fonctionnent également. Si la cible est remplacée par -j SNAT --to-source 192.168.2.1
, l'effet est (sans surprise) le même que MASQUERADE
: le serveur voit les connexions des clients LAN locaux comme provenant de l' adresse IP interne du routeur . D'un autre côté, si la cible est modifiée en -j SNAT --to-source 89.179.245.232
, alors les NAT fonctionnent toujours, mais cette fois, le serveur voit les connexions des clients LAN locaux comme provenant de l' adresse IP externe du routeur (89.179.245.232).
Enfin, notez que votre PREROUTING
/ DNAT
règle d'origine -i ppp0
ne fonctionne pas, car la règle ne correspond jamais aux paquets provenant des clients LAN (car ceux-ci n'entrent pas dans le routeur via l' ppp0
interface). Il serait possible de le faire fonctionner en ajoutant une deuxième PREROUTING
règle uniquement pour les clients LAN internes, mais elle serait inélégante (IMO) et aurait encore besoin de se référer explicitement à l'adresse IP externe.
Maintenant, même après avoir présenté en détail une solution "en épingle à cheveux NAT" (ou "NAT loopback", ou "NAT réflexion", ou comme on préfère l'appeler), je pense toujours qu'une solution DNS à horizon partagé ... -avec des clients externes se résolvant à l'IP externe et des clients internes se résolvant à l'IP interne --- serait la voie la plus recommandée à prendre. Pourquoi? Parce que plus de gens comprennent le fonctionnement du DNS que le fonctionnement du NAT, et une grande partie de la construction de bons systèmes choisit d'utiliser des pièces qui sont maintenables. Une configuration DNS est plus susceptible d'être comprise, et donc correctement entretenue, qu'une configuration NAT obscure (IMO, bien sûr).