如何使用 Iptables 转换 UDP 源端口号

如何使用 Iptables 转换 UDP 源端口号

我有一个 UDP 应用程序,它从通信的两端发送数据包,其入站源端口号等于目标端口号。文档还指出,如果涉及网络地址端口转换 (NAPT),此应用程序将无法工作。我已验证确实如此,并且 NAT(保留目标和源端口号)可以正常工作,有时称为“静态模式 NAT”。但是,我试图使用 NAPT(有时也称为“隐藏模式 NAT”)使此应用程序工作。我认为这可以使用 iptables 来实现,如下所示,在 Ubuntu 服务器端接收修改后的 UDP 源部件号:

hercules@pjjs12:~$ sudo iptables -t nat -I POSTROUTING 1 -p udp --dport 12000 -j SNAT --to-source :12000
hercules@pjjs12:~$ sudo iptables -t nat -I POSTROUTING 2 -p udp --dport 12001 -j SNAT --to-source :12001
hercules@pjjs12:~$ sudo iptables -t nat -I POSTROUTING 3 -p udp --dport 12002 -j SNAT --to-source :12002
hercules@pjjs12:~$ sudo iptables -t nat -I POSTROUTING 4 -p udp --dport 12003 -j SNAT --to-source :12003
hercules@pjjs12:~$ sudo iptables -t nat -I POSTROUTING 5 -p udp --dport 12004 -j SNAT --to-source :12004

当我运行该应用程序时,tcpdump 显示这不起作用。iptables -L命令还显示规则显然未被使用:

hercules@pjjs12:~$ sudo iptables -vxnL -t nat --line-numbers
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         
1           0        0 SNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:12000 to::12000
2           0        0 SNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:12001 to::12001
3           0        0 SNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:12002 to::12002
4           0        0 SNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:12003 to::12003
5           0        0 SNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:12004 to::12004
hercules@pjjs12:~$ sudo iptables -vxnL --line-numbers
Chain INPUT (policy ACCEPT 542660 packets, 30600115 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 1838 packets, 100767 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 562972 packets, 888057717 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         
hercules@pjjs12:~$ 

我必须承认这是我第一次尝试使用,iptables所以我完全不确定这是否可行,或者我是否忽略了真正基本的东西。如果对此有所帮助,我将不胜感激。

谢谢,

彼得

相关内容