我使用 Ubuntu 计算机作为路由器。它有一个本地连接的网络eth0
,并且还通过另一个接口和 OpenVPN 内部连接到互联网。
我设置了 NAT 端口转发,这样我就可以访问所连接子网中的几个设备。
sudo iptables -A FORWARD -o eth0 -i tun0 -j ACCEPT
sudo iptables -A FORWARD -o eth0 -i tun0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -t nat -A PREROUTING -p udp -i tun0 --dport 14550 -j DNAT --to-destination 192.168.1.50:60000
sudo iptables -t nat -A PREROUTING -p tcp -i tun0 --dport 5000 -j DNAT --to-destination 192.168.1.2:5000
从子网我可以正常访问互联网,并且从任何其他计算机我都可以访问转发到端口 5000 的 TCP 服务器。
Ubuntu 路由器 eth0 接口的 IP 为 192.168.1.1,UDP 服务器的 IP 为 192.168.1.50。
我不知道如何让 UDP 转发工作。
tcpdump
显示我子网内的 UDP 服务器处于活动状态,并且它可以并且确实与充当路由器的 ubuntu 计算机通信。
当我试图从外部接触它时,却一无所获。
谢谢
答案1
从您提供的信息来看,无法直接确定您的 FORWARD 策略是否允许转发。如果不允许,则您没有将 DNATted 流量从 tun0 转发到 eth0 的规则。
答案2
您的 UDP 规则的 DNAT 末尾的 IP 地址部分似乎多了一个“。”。我认为您在尝试添加规则时可能收到了错误,但可能没有注意到。也许您应该提供iptables转储纳特桌子。
答案3
抱歉,我们已经解决了。连接的 UDP 服务器在与不同子网通信时出现问题。当子网与直接连接的子网不匹配时,它不会发送任何响应。否则配置有效。