Назад | Перейти на главную страницу

iptables DNAT на внешний IP без маскарадинга не работает

На сервере 1.1.1.1:

iptables -t nat -A PREROUTING -p tcp --dport 20000 -j DNAT --to-destination: 2.2.2.2:20000

iptables -t nat -A PREROUTING -p tcp --dport 20000 -j LOG --log-prefix pre20k

iptables -t nat -A POSTROUTING -p tcp --dport 20000 -j LOG --log-prefix post20k

На сервере 2.2.2.2:

iptables -t nat -A PREROUTING -p tcp --dport 20000 -j LOG --log-prefix pre20k

На клиенте 3.3.3.3:

nc 1.1.1.1 20000

В журналах 1.1.1.1 я вижу, что пакеты постмаршрутизации имеют SIP = 3.3.3.3 и DIP = 2.2.2.2 (а не 1.1.1.1, как в исходном пакете предварительной маршрутизации).

Однако ни один из пакетов, доставленных из 1.1.1.1, не достигает версии 2.2.2.2. Я не вижу их ни в журнале iptables, ни в tcpdump.

Зачем?

Машины, на которых я тестировал правила, находятся в облаке digitalocean. Я погуглил и нашел

«Поскольку шлюз пытается отправить пакет, адрес отправителя которого отличается от него самого, он не будет пропущен».