19

是否可以使用 iptables 更改 UDP 数据包的目标端口?

我正在尝试让 SNMP 代理在 1620 而不是 162 上发送陷阱。不幸的是,到目前为止,我只设法更改了源端口:

iptables -t nat -A POSTROUTING -p udp --dport 162 -j SNAT --to :1620

4

6 回答 6

7

假设您知道要发送到哪台机器:

iptables -t nat -A OUTPUT -p udp --dport 162 -j DNAT --to-destination <dest-ip>:1620
于 2008-10-28T12:35:20.283 回答
6

您可以将 162 重定向到 1620

iptables -t nat -A PREROUTING -p UDP --dport 162 -j REDIRECT --to-port 1620
于 2008-11-13T08:54:54.930 回答
5

显然不支持这种用法。取自http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.txt

6.3.7. 更改本地生成连接的目的地

NAT 代码允许您在 OUTPUT 链中插入 DNAT 规则,但这
在 2.4 中并不完全支持(可以,但它需要一个新的
配置选项、一些测试和相当多的编码,所以除非有人签约 Rusty写它,我不希望它很快)。

当前的限制是您只能将目的地更改为
本地机器(例如,`j DNAT --to 127.0.0.1'),不能更改为任何其他机器,否则回复将无法正确翻译。

于 2008-10-31T05:57:44.733 回答
1

@PiedPiper 是对的。使用 DNAT,您必须指定一个 IP 地址,但我们只想进行端口重定向,因此 -j REDIRECT 在这种情况下可能会起作用。

http://www.netfilter.org/documentation/HOWTO//NAT-HOWTO-6.html#ss6.2

于 2008-10-28T11:38:10.367 回答
0

尝试使用 DNAT,而不是制作 SNAT。源端口会更改,因为 SNAT 意味着 SourceNAT,因此 DNAT 将为您工作。

于 2008-10-28T11:04:05.350 回答
0

您可以设置转移规则,然后使用修改后的端口重新注入数据包。

我在 Mac OS X 上做过一段时间,但在 Linux 上的原理相同: http ://blog.dv8.ro/2006/08/using-divert-sockets-on-mac-os-x.html

您基本上需要创建一个非常简单的透明代理。

于 2008-10-28T12:39:46.623 回答