使用反向 ssh 隧道的 VNC 连接到远程主机

使用反向 ssh 隧道的 VNC 连接到远程主机

我有以下设置:

  • 没有公共 IP 地址的 Raspberry Pi
  • 公共“jumpserver”

目前我已经在 Raspberry 上运行 autossh 来连接到跳转服务器。

运行正常。我通过 ssh 连接到跳转服务器,然后从那里通过 ssh 连接到 Raspberry Pi。

现在我想在 Raspberry 上为游戏添加一个 VNC 客户端,这样我就可以从本地机器直接连接到它。我的计划是:

  • 在 Raspberry 上启动 VNC(端口 5901)
  • 使用 autossh 建立连接,在 localhost:5901 和 jumpserver:1702 之间创建反向隧道
  • 在跳转服务器上创建 iptable-entries,将端口 5555 上的传入流量转发到 localhost:1702

第一个问题是:这能这样工作吗?不确定 Raspberry 上的 vnc 端口是否与 autossh 的本地端口相同。或者我是否需要 autossh 的另一个本地端口,并且还要使用 Raspberry 上的 iptables 将来自 autossh 的传入流量转发到 VNC 端口?

任何帮助都将受到赞赏。

谢谢

我已经在跳转服务器上创建了这样的 iptable 条目,但它不起作用:

sudo iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination 127.0.0.1:1702
sudo iptables -t nat -A POSTROUTING -p tcp -d 127.0.0.1 --dport 1702 -j SNAT --to-source 127.0.0.1:5555

答案1

由于您也可以让 SSH 隧道直接侦听 0.0.0.0:5555,因此使用 DNAT-to-localhost 有点多余。(要实现这一点,请在隧道的侦听端启用 GatewayPorts,即在跳转服务器的 sshd_config 上 - 这GatewayPorts clientspecified将允许您将侦听地址指定为ssh -R选项的一部分。)

除了冗余之外,DNAT 规则似乎可以起作用(事实上甚至有一个专门用于 NAT 到本地主机的 REDIRECT 目标)。

另一方面,SNAT 规则毫无用处,而且你似乎搞混了源/目标端口的工作方式。与端口 5555 建立的连接不需要端口 5555(只有回复数据包才会这样;请记住 iptables NAT 将自动处理回复数据包的反向 NAT)。

相关内容