![我如何设置双 SSH 隧道,以便防火墙后面的两台机器 A 和 B 通过 ssh 连接到中央服务器,从而 A 可以通过 VNC 连接到 B?](https://linux22.com/image/751145/%E6%88%91%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%E5%8F%8C%20SSH%20%E9%9A%A7%E9%81%93%EF%BC%8C%E4%BB%A5%E4%BE%BF%E9%98%B2%E7%81%AB%E5%A2%99%E5%90%8E%E9%9D%A2%E7%9A%84%E4%B8%A4%E5%8F%B0%E6%9C%BA%E5%99%A8%20A%20%E5%92%8C%20B%20%E9%80%9A%E8%BF%87%20ssh%20%E8%BF%9E%E6%8E%A5%E5%88%B0%E4%B8%AD%E5%A4%AE%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%8C%E4%BB%8E%E8%80%8C%20A%20%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%20VNC%20%E8%BF%9E%E6%8E%A5%E5%88%B0%20B%EF%BC%9F.png)
我需要通过 VNC 从我的机器 A 连接到我朋友 B 的另一台机器。我们俩都无法打开传入端口 - 除非您购买基于静态 IP 的商业计划,否则 ISP 不允许隧道连接。顺便说一下,两者都是 Linux 系统
我们有一个具有完全访问权限的 Web 服务器,我们双方都可以通过 ssh 访问。我们如何设置从任一端到服务器的隧道,以便 VNC 正常工作?
我知道如何在两个系统之间设置 ssh 隧道,并且我相信通过先在 A 上运行 ssh 到 B,然后在 B 上运行 ssh 到 C,来实现 A->B->C 并不难。
但我需要 A->C 和 B->C 而不是 A->B 和 B->C
基本上,我认为我需要一个代理服务器 - 这可以通过 SSH 或某种 Linux 网络魔法来完成吗?
答案1
假设 C 是你们俩(A:您和 B:您的朋友)都可以访问的网络服务器。
C 的设置:将 gatewayports yes 添加到配置中
vim /etc/ssh/sshd_config
在底部添加“GatewayPorts yes”,以便远程主机将监听 0.0.0.0 接口而不是 127.0.0.1 接口
GatewayPorts 是
B 的设置:将本地主机的“port2”转发到远程主机(C)的“port1”
ssh -i auth.pem -R 0.0.0.0:端口1:本地主机:端口2[电子邮件保护]
A的设置:无需转发。
现在您可以使用 VNC 连接到 C 的端口 2,同时实际查看 B 的屏幕。
答案2
这可能是也可能不是您要找的答案,但有两种服务值得检查:
- 鰤鱼(https://vpn.net)
- 零层 (https://www.zerotier.com)
它们的作用大致相同。两者都允许您在多台计算机之间创建虚拟专用网络,而无需进行任何防火墙或端口转发配置。这两种服务都有免费套餐,但如果您需要连接多台计算机,ZeroTier 允许在其免费版本上连接更多计算机。两者都适用于 Linux、Windows 和 Mac OS(ZeroTier 也适用于许多其他平台)。