题
是否可以使用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
您基本上需要创建一个非常简单的透明代理。