我在使用时遇到问题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 发送请求