我需要通过服务器端口号 38xxx 发送数据包,然后使用 UDP 协议从客户端端口号 48xxx 接收数据包。如何实现此端口转发才能成功接收数据包?我正在运行 Ubuntu 16.04。
答案1
在我的防火墙中,我做了几件事来在我的主计算机和我的 Intranet 计算机之间创建代理:
在FORWARD队列中,我有类似这样的内容:
iptables -A FORWARD -i eth0 -o eth1 -p tcp -m state --state ESTABLISHED,RELATED \
-m tcp ! -s 10.10.0.1 -d 10.10.1.2 ! --syn -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p udp -m state --state ESTABLISHED,RELATED \
-m udp ! -s 10.10.0.1 -d 10.10.1.2 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p icmp -m icmp --icmp-type any \
! -s 10.10.0.1 -d 10.10.1.2 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp -m tcp -s 10.10.0.1 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p udp -m udp -s 10.10.0.1 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p icmp -m icmp --icmp-type any \
-s 10.10.0.1 -j ACCEPT
我注意到 ICMP 可以帮助实现该行。如果您不想支持 TCP,显然不要添加该行。
我的FORWARD
定义不包括任何端口规范,这意味着所有数据包都会被转发,无论端口是什么。尝试添加源和目标端口命令,例如:
--sport 38000
--dport 43000
如果我是正确的,那么您必须查看多端口功能以包含一系列端口(类似于: ,它可能是开始和结束端口规范之间的-m multiport --dport 38000-38999
冒号(:
)而不是破折号( )[所以]。)-
38000:38999
然后在 NAT 过滤器中,我添加 POSTROUTING 命令如下:
iptables -t nat -A POSTROUTING -o eth1 -s 10.10.1.2 -j SNAT --to-source 10.10.0.1
IP 地址--to-source ...
必须位于同一个以太网卡上,但不必是同一个 IP 地址。如果您有静态 IP 地址,这很实用。就我而言,我实际上有eth0
我的静态 IP 地址,eth0:1
并且10.10.0.1
它有效!