我正在尝试通过 ssh 隧道从私有网络上的一台计算机实现 vnc 连接,并使用公共服务器作为中继,连接到另一个私有网络上的另一台计算机。可以用以下模式以图形方式描述:
|--------------| |----------| |--------------|
|locale machine| | server | |remote machine|
| ip: x.x.x.x |===>|ip:1.2.3.4|===>| ip: x.x.x.x |
| out:A| |in:B out:C| |in:D |
|--------------| |----------| |--------------|
让我解释一下:
- 本地计算机是我想要运行 VNC 客户端的计算机。它位于私有网络上,因此无法直接访问。
- 通过端口 A(我不太关心这个),它必须创建一个到服务器端口 B 的 SSH 隧道
- 服务器将传入消息从端口 B 重定向到端口 C(也不重要)
- 端口 C 由远程机器通过隧道将消息重定向到自身,以 VNC 服务器为目标。此机器也在私有网络上,因此我无法从本地机器或服务器直接通过 IP 定位它
困难在于,我们不知道源 IP 和目标 IP。唯一可以配置的是服务器,我可以按照自己想要的方式配置它。我们假设我无法编辑我的私有网络防火墙配置中的任何内容
我读了很多关于 SSH 隧道或带代理的 VNC 的教程和文章,但我不明白它是否能满足我的需求。所以,我真正想问的问题不是“怎么做?”而是“为什么以及如何解决你的解决方案?”。
此外,如果可能的话,我想用最简单的工具来实现它,例如,随时随地从我的 Android 检查我的计算机状态。
谢谢您的关注,并提前感谢您的帮助和解释。
编辑:如果这有帮助:
- 本地机器:OSx 10.10.5
- 服务器:具有非标准 ssh 端口的 Ubuntu 15.04 服务器
- 远程机器:Ubuntu 16.04 / Fedora 23
答案1
根据场景,Alexandre 需要一个位于公共互联网上的 VPN 设备/服务器。
区域机器建立隧道<==> VPN 服务器<==> 远程机器建立隧道|
一旦两台机器都通过隧道接入 VPN 设备,它们就可以看到对方,他就可以做他想要的工作了。
另一个解决方案是,Alexandre 使用防火墙/路由器打开隧道,然后通过防火墙/路由器的真实 IP 地址直接通过 VPN 连接到他的网络。这样可以省去中间人,达到同样的目的。
机器建立隧道<==>路由器/防火墙,然后他就可以访问他的服务器。