На сервере 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. Я погуглил и нашел
«Поскольку шлюз пытается отправить пакет, адрес отправителя которого отличается от него самого, он не будет пропущен».