我正在尝试将 UDP 端口 5060 上的所有传入流量重定向到端口 56790,并将所有传出流量从 5060 重定向到端口 56789。我使用了这些 iptables 规则:
iptables -t nat -I PREROUTING -p udp ! -s localhost --dport 5060 -j REDIRECT --to-port 56790
iptables -t nat -I OUTPUT -p udp ! -s localhost --sport 5060 -j REDIRECT --to-port 56789
在使用 ioctl 将接口设置为 PROMISCUOUS 模式后,我使用 RAW SOCKETS 监听两个端口。
我只在 56789 即 SENDING 端看到数据包,我在 56790 上看不到任何数据包,而 wireshark 显示许多数据包被传递到端口 5060。
为什么会发生这种情况?有任何想法吗?您认为这是 iptables 规则的问题还是与原始套接字有关?
[这是 ubuntu 10.04 和 iptables v1.4.4]
如果您想透明地将到达端口 5060/udp 的数据包重定向到端口 56790/udp,那么您需要两个 iptables 规则:一个用于传入数据包,一个用于将回复数据包(具有源端口 56790)映射回远程目标端口 5060:
相反,要将传出的数据包(从端口 5060 发送到端口 5060)重定向到端口 56789,请交换端口号: