我需要更改来自本地进程的所有 UDP 数据包的传出端口号。例如:
local machine
udp dest:192.168.10.1/255.255.255.0 port 2222
应该变成(离开本地机器之前):
udp dest:192.168.10.1/255.255.255.0 port 3333
我尝试的是这个 iptables 规则:
iptables -t nat -A OUTPUT -d 192.168.10.1/255.255.255.0 -p udp --dport 2222 -j DNAT --to-destination :3333
但是它也会更改目标 IP 地址。从 serverfault 中的另一个问题中,我看到根据 netfilter 文档 (http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.txt,第 6.3.7 节)iptables 无法做到这一点。
我的问题是如何在 Linux 中完成此任务?也许还有其他工具可以完成这项工作?
答案1
我想不出有什么工具可以立即实现这一点。这种情况非常罕见,因为如果仅更改端口,则无法创建正确的双向 NAT 映射。您真的只需要单向流量吗?
但是,您始终可以编写自己的 netfilter 模块(这并不难)并以任何您想要的方式更改数据包头。