如何通过 ssh 和 nat 将端口转发到另一台机器

如何通过 ssh 和 nat 将端口转发到另一台机器

我在使用时遇到问题ssh 端口转发和 nat 同时进行

情况:

机器 A 在端口 8080 上运行 Web 服务器 机器 B 是树莓派,其工作原理类似于小型路由器。它有两个网络接口(eth0 和 eth1)。eth0 连接到 LAN,并通过 LAN 连接到 WAN。eth1 仅连接到机器 A。它运行 ddclient 以进行 dyndns 连接。

目标:

我想通过ssh端口转发安全地连接到机器A到端口8080等。

我尝试过的:

在我的本地机器(MacBook)上我使用:

ssh -L 5903:127.0.0.1:5901 [email protected]

或者

ssh -L 5903:127.0.0.1:5901 pi@machine-b-ip

我可以使用以下命令连接到机器 B 上的 vnc 服务器(仅用于测试目的):

vnc://127.0.0.1:5903/

因此,我的假设是将端口 8080 从本地机器转发到机器 B,然后使用以下 iptable 规则将其“nat”到机器 A:

iptables -t nat -A POSTROUTING --out-interface eth1 -j MASQUERADE
iptables -A FORWARD --in-interface eth0 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i eth0 -m tcp --dport 8080 -j DNAT --to-destination 192.168.110.101:8080

我的其他 iptables 配置是:

iptables -t nat -A PREROUTING -p tcp -i eth0 -m tcp --dport 9090 -j DNAT --to-destination 192.168.114.151:8080
iptables -t nat -A POSTROUTING --out-interface eth1 -j MASQUERADE
iptables -A FORWARD --in-interface eth0 -s 192.168.178.20 -j ACCEPT
iptables -A FORWARD --in-interface eth0 -j DROP

我还在机器 B 上启用了 ssh GatewayPorts,但每次我想要连接时:

http://127.0.0.1:8080/

我收到错误“连接被拒绝”,日志显示“此服务未运行”。但如果我通过以下方式连接:

http://ip-machine-b:8080/

有用。

你能帮帮我吗?我尝试了几种解决方案,包括远程和本地 ssh 端口转发、ssh 多跳和 nat 等,但都没能找到适合我的方法。

提前谢谢你,多米尼克。

答案1

你不需要所有的 Iptables 规则来路由到你的第二个盒子。你可以做与 VNC 连接类似的操作

ssh ssh -L 8081:192.168.x.x:8080 [email protected]

其中 192.168.xx 是机器 A 的 IP 地址

然后您可以在本地机器上打开 Web 浏览器并连接到

 http:127.0.0.1:8081

这将允许您连接到内部网站,路由将由 ssh 处理。您的本地端口 8081 将通过 ssh 转发到 ssh 服务器。然后,服务器将通过端口 8080 向 MachineA 发送请求

相关内容