2008-10-28 113 views
18

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

我试图让一个SNMP代理对1620发出的陷阱,而不是162.遗憾的是到目前为止,我只设法改变源端口:

的iptables -t NAT -A POSTROUTING -p UDP --dport 162 -j SNAT --to:1620

回答

4

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

6.3.7。改变本地产生的连接

NAT代码允许你在OUTPUT链插入 DNAT规则,但
这不是完全2.4的支持(这 能的目标,但它需要一个新的
配置选项,一些测试, 和一点点的编码,所以除非有人约定Rusty写它,我 不会期待它很快)。

目前的限制是你 只能更改目的地,以
本地计算机(如:`ĴDNAT --to 127.0.0.1' ),而不是任何其他机器,否则答复不会 被正确翻译。

0

而不是使SNAT的,试着用DNAT。由于SNAT意味着SourceNAT,因此源端口发生更改,因此DNAT将为您工作。

+0

获得DNAT工作,你需要-p指定一个ip地址作为 - 到 - 目的地 – PiedPiper 2008-10-28 11:06:26

+0

这在这种情况下不会有太大问题,但是DNAT规则似乎也不起作用。该规则未命中,发送的数据包未被修改。 – 2008-10-28 11:11:45

+0

您不能在POSTROUTING链上使用DNAT。 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#DNATTARGET – borodimer 2008-10-28 17:11:38

4

假设你知道你发送到哪个机:

iptables -t nat -A OUTPUT -p udp --dport 162 -j DNAT --to-destination <dest-ip>:1620 
5

你可以重定向162到1620

的iptables -t NAT -A PREROUTING UDP --dport 162 -j REDIRECT --to端口1620