我的网络设置由 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