Usunąłem pierwotną odpowiedź, ponieważ nie byłem w pełni pewien, że jest poprawny. Od tego czasu miałem trochę czasu na skonfigurowanie małej wirtualnej sieci maszyn wirtualnych w celu symulacji danej sieci. Oto zestaw reguł zapory, które działały dla mnie (w iptables-save
formacie, tylko dla nat
tabeli):
-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
Pierwsza POSTROUTING
zasada to prosty sposób udostępniania połączenia internetowego LAN. Zostawiłem to dla kompletności.
PREROUTING
Zasada i druga POSTROUTING
zasada wspólnie ustalić odpowiednie NAT, dzięki czemu połączenia z serwerem poprzez zewnętrzny adres IP może się zdarzyć, niezależnie od tego, czy połączenia pochodzą z zewnątrz lub od wewnątrz sieci LAN. Gdy klienci w sieci LAN łączą się z serwerem za pomocą zewnętrznego adresu IP, serwer widzi połączenia jako pochodzące z wewnętrznego adresu IP routera (192.168.2.1).
Co ciekawe, okazuje się, że istnieje kilka odmian drugiej reguły POSTROUTING, które również działają. Jeśli cel zostanie zmieniony na -j SNAT --to-source 192.168.2.1
, efekt jest (co nie jest zaskakujące) taki sam jak MASQUERADE
: serwer widzi połączenia od lokalnych klientów LAN jako pochodzące z wewnętrznego adresu IP routera . Z drugiej strony, jeśli zmieniono cel na -j SNAT --to-source 89.179.245.232
, wówczas NAT nadal działają, ale tym razem serwer widzi połączenia od lokalnych klientów LAN jako pochodzące z zewnętrznego adresu IP routera (89.179.245.232).
Na koniec zauważ, że twoja oryginalna PREROUTING
/ DNAT
reguła z -i ppp0
nie działa, ponieważ reguła nigdy nie pasuje do pakietów pochodzących od klientów LAN (ponieważ te nie wchodzą do routera przez ppp0
interfejs). Można by to zrobić, dodając drugą PREROUTING
regułę tylko dla wewnętrznych klientów LAN, ale byłoby to nieeleganckie (IMO) i nadal musiałoby jawnie odnosić się do zewnętrznego adresu IP.
Teraz, nawet po dokładnym opisaniu rozwiązania „szpilka do włosów NAT” (lub „pętla NAT”, „odbicie NAT” lub cokolwiek innego, jak wolą to nazywać), nadal uważam, że rozwiązanie DNS z dzielonym horyzontem - -z klientami zewnętrznymi korzystającymi z zewnętrznego adresu IP i klientami wewnętrznymi korzystającymi z wewnętrznego adresu IP --- byłaby bardziej wskazana droga. Dlaczego? Ponieważ więcej osób rozumie, jak działa DNS, niż rozumie, jak działa NAT, a duża część budowania dobrych systemów decyduje się na części, które można konserwować. Konfiguracja DNS jest bardziej zrozumiała, a zatem poprawnie utrzymywana, niż tajemna konfiguracja NAT (oczywiście IMO).