iptables nat show wrong source ip address

iptables nat show wrong source ipСнощи се натъкнах на нещо много странно което в последствие оправих, но реших да пиша за него в блога си защото сигурно и други са имали или имат такъв проблем. Става дума за следното :

Имам един рутер (debian) на който има вдигнати няколко реални айпи адреса, и които маскирам зад него. Всичко е 6 до момента в който ми се наложи да направя Port forwarding на няколко порта към едно от вътрешните айпита. Оказа се че виждам вместо клиентското source ip, айпито на рутера ми. Използвах следната настройка на firewall скрипта:

 

iptables -t nat -A POSTROUTING -o $internet -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp -d 87.97.x.x -i $internet --dport 22 -j DNAT --to 192.168.1.210:22
iptables -t nat -A PREROUTING -p tcp -d 87.97.x.x -i $internet --dport 80 -j DNAT --to 192.168.1.210:80
iptables -t nat -A PREROUTING -p tcp -d 87.97.x.x -i $internet --dport 113 -j DNAT --to 192.168.1.210:113
iptables -t nat -A PREROUTING -p tcp -d 87.97.x.x -i $internet --dport 443 -j DNAT --to 192.168.1.210:443

Така оставени нещата, Port forwarding-a работи ,но дефакто се получи така наречения :
iptables nat show wrong source ip address
След малко тестове, разбрах, че проблема идва заради маскирането – “MASQUERADE” тъй като самото то прави входящите и изходящи пакети да бъдат маскирани чрез айпи адреса на самия рутер. Така може да се дове до проблеми като моя или дори по-лошо – да се получи дупка в системата.

За целта смених MASQUERADE-то със следния ред:

iptables -t nat -A POSTROUTING -s 192.168.1.210 -j SNAT --to 87.97.x.x

И… проблема е решен 🙂