Un très bête sniff wireshark te le montrera très vite :
Soit un client à l'adresse 192.168.0.10 qui veut causer avec le serveur web
- Sans SNAT :
- Code: Tout sélectionner
192.168.0.10:xxxxx -> 192.168.0.2:80 SYN est reçu par le routeur qui DNAT :
192.168.0.10:xxxxx -> 192.168.0.1:80 SYN est reçu par le serveur web qui répond donc logiquement :
192.168.0.1:80 -> 192.168.0.10:xxxxx SYN ACK qui est reçu par le client... Qui refuse ce paquet, car il s'est pour sa part adressé à 192.168.0.2
- Avec SNAT :
- Code: Tout sélectionner
192.168.0.10:xxxxx -> 192.168.0.2:80 SYN est reçu par le routeur qui DNAT + SNAT :
192.168.0.2:yyyyy -> 192.168.0.1:80 SYN est reçu par le serveur web qui répond donc logiquement :
192.168.0.1:80 -> 192.168.0.2:yyyyy SYN ACK qui est reçu par le routeur.. Qui cherche dans son conntrack pour voir que c'est une connexion snatée, et donc "DéSNATte" :
192.168.0.2:80 -> 192.168.0.10:xxxxx SYN ACK est reçu par le client qui est content, et donc
192.168.0.10:xxxxx -> 192.168.0.2:80 ACK ce paquet sera lui aussi envoyé au vrai serveur et la connexion est établie.
On voit bien que ce n'est pas du totu optimal pour le réseau, car tous les paquets sont envoyés en double, mais le vrai serveur est complétement masqué du client.
Une manière plus élégante pour le réseau serait d'heberger un serveur web sur le "routeur" avec une simple 302 REDIRECT HTTP qui renverrai vers le bon serveur, et ainsi la suite de la connexion se ferait vers le serveur directement.
Mieux encore, modifier le DNS pour indiquer que le serveur web est à 192.168.0.1.
Mais je suppose que tu as tes raisons de procéder ainsi.
Attention, pour le FTP ce sera un peu plus sioux et il te faudra trouver les modules adaptés pour les conntrack ftp, car ce protocole utilise deux connexions dont une sur un port variable.
t.
One hundred thousand lemmings can't be wrong...