是否可以使用iptables更改UDP数据包的目标端口?
我正在尝试让SNMP代理在1620而不是162上发送陷阱。不幸的是到目前为止我只能设法更改源端口:
iptables -t nat -A POSTROUTING -p udp --dport 162 -j SNAT --to:1620
答案 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
您基本上需要创建一个非常简单的透明代理。