如何更改特殊端口输出源地址?

如何更改特殊端口输出源地址?

我想将我的数据包从端口 25 更改为另一个内部地址(192.168.2.253)。

iptables -A OUTPUT -o em1 -p tcp --dport 25 -j SNAT --to 192.168.2.253

但我得到的输出是:

root@gateway:~# iptables -A OUTPUT -o em1 -p tcp --dport 25 -j SNAT --to 192.168.2.253
iptables: Invalid argument. Run `dmesg' for more information.

如何正确地做这件事?

dmesg 输出是:

https://gist.githubusercontent.com/thinksource/af08acd451380823257b/raw/5d720ce48bcb5ea27699bfcde63e4ccd92e2118c/dmesg%20output

答案1

要添加 NAT 规则,您需要在 NAT 表中执行此操作;在 iptables 命令行中添加“-t nat”。此外,您只能在 INPUT NAT 链(不是 OUTPUT)和入站接口(-i,不是 -o)上执行 SNAT。显然,您必须将哪个接口更改为数据包到达的接口,而不是数据包离开的接口

答案2

该目标只有在nat表的链SNAT中才有意义。POSTROUTING

您的规则的有效版本是:

iptables -t nat -A POSTROUTING -o em1 -p tcp --dport 25 -j SNAT --to-source 192.168.2.253

顺便说一句如果你的(输出)接口持有 IP 192.168.2.253,那么最好使用:

iptables -t nat -A POSTROUTING -o em1 -p tcp --dport 25 -j MASQUERADE

相关内容