使用iptables更改目标端口

时间:2008-10-28 10:20:17

标签: linux iptables

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

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

  

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

6 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:5)

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

  

6.3.7。更改本地生成的连接的目标

     

NAT代码允许您插入   DNAT规则在OUTPUT链中,但是   这在2.4中并不完全支持(它   可以,但它需要一个新的   配置选项,一些测试,   还有一点点编码,所以除非   有人跟Rusty签了合同,我   不会期待很快)。

     

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

答案 2 :(得分:5)

您可以将162重定向到1620

iptables -t nat -A PREROUTING -p UDP --dport 162 -j REDIRECT --to-port 1620

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

尝试使用DNAT,而不是制作SNAT。源端口发生变化,因为SNAT意味着SourceNAT,因此DNAT将为您工作。

答案 5 :(得分:0)

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

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

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