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

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

  

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

有帮助吗?

解决方案

显然不支持此用法。摘自 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'),不对任何其他机器,否则答复不会   正确翻译。

其他提示

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

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

您可以将162重定向到1620

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

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

请参阅 http://www.netfilter .ORG /文档/ HOWTO // NAT-HOWTO-6.html#ss6.2

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

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

我已经在Mac OS X上做了一段时间,但它在Linux上的原理相同: http://blog.dv8。 RO / 2006/08 /使用-转移的套接字上-MAC-OS-x.html

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top