将端口从一台设备转发到不同网络上的另一台设备

将端口从一台设备转发到不同网络上的另一台设备

我的网络设置由 3 台计算机(设备 A、B、C)组成。设备 A、B 和 C 使用交换机通过以太网连接。只有设备 A 可以访问互联网(wifi 路由器,端口 8000-8002 转发给它)。

假设设备 A、B 和 C 正在运行 HTTP 服务器,我希望从设备 D(Internet 上某处的计算机)访问该服务器。然而,设备 D 只能通过设备 A 访问 B 和 C,需要一些端口魔法。

我们假设有以下地址和职位:

Device A: 
  192.168.5.100 (wlan0)  
  10.42.0.1 (eth0)
  server on port 80
Device B:
  10.42.0.2 (eth0)
  server on port 80
Device C:
  10.42.0.3 (eth0)
  server on port 80
Device D:
  somewhere on the Internet

我将如何转发:

Device D -> 192.168.5.100:8000 (A) -> 10.42.0.1:80 (A)
Device D -> 192.168.5.100:8001 (A) -> 10.42.0.2:80 (B)
Device D -> 192.168.5.100:8002 (A) -> 10.42.0.3:80 (C)

我尝试过使用 iptables,使用不同的命令,例如

sudo iptables -t nat -A PREROUTING -p tcp --dport {from_port} -j DNAT --to-destination {to_ip}:{to_port}
sudo iptables -t nat -A POSTROUTING -d {to_ip} -p tcp --dport {to_port} -j SNAT --to-source {from_ip}

在哪里

from_ip is 192.168.5.100
from_port is either 8000, 8001, or 8002
to_ip is either 10.42.0.1, 10.42.0.2, or 10.42.0.3
to_port is 80

但我没有成功。

我在命令中做错了什么,或者有比使用 iptables 更好的替代方法吗?如果有帮助的话,我可以物理访问所有 3 台计算机,但设备 A 上没有图形界面。设备 A 和 B 始终在 Linux 上,而设备 C 有时在 Windows 上,有时在 Linux 上。

答案1

# Enable routing
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
# Forward specific ports to specific destinations
sudo iptables -t nat -A PREROUTING -p tcp -i wlan0 --dport 8000 -j DNAT --to-destination 10.42.0.1:80
sudo iptables -t nat -A PREROUTING -p tcp -i wlan0--dport 8001 -j DNAT --to-destination 10.42.0.2:80
sudo iptables -t nat -A PREROUTING -p tcp -i wlan0 --dport 8002 -j DNAT --to-destination 10.42.0.3:80
# Enable NAT (aka Masqurade)
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

相关内容