将客户端端口转发到我的电脑

将客户端端口转发到我的电脑

我需要通过服务器端口号 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它有效!

相关内容