在我的本地网络上,我可以轻松地通过 ssh 隧道进行 VNC 连接。我希望在国外也能这样做。
服务器设置为接受 WAN 端 ssh 连接,并且运行可靠。问题是,当我在国外时,我无法通过 ssh 隧道成功启动 VNC 会话。当我在 LAN 上执行相同操作时,使用了类似的隧道设置(运行完美)。
因此“从那边”,我可以连接 SSH,但是当我尝试将 VNC 连接到 127.0.0.1 时,我得到的是 UltraVNC:Connection failed - End of stream
可能的原因 - 另一个用户已在此 ID 上监听 - 连接不良...无论我使用什么端口。
幸运的是,TightVNC 提供了一定程度的日志记录。失败的连接记录如下:
[ 512/ 1904] 2015-03-22 10:33:34:617 : Initialization of socket stream and input/output gates...
[ 512/ 1904] 2015-03-22 10:33:34:617 : Connection is established
[ 512/ 1904] 2015-03-22 10:33:34:617 - Protocol stage is "Handshake".
[ 512/ 1904] 2015-03-22 10:33:34:647 - onDisconnect: Connection has been gracefully closed
[ 512/ 2060] 2015-03-22 10:33:35:719 - Process focus restoration in the RfbKeySym class
[ 512/ 2060] 2015-03-22 10:33:35:719 - Process focus loss in the RfbKeySym class
[ 512/ 2060] 2015-03-22 10:33:35:829 - Process focus restoration in the RfbKeySym class
成功的例子如下(从我的局域网来看):
[ 7536/ 2900] 2015-03-22 11:22:28:892 : Initialization of socket stream and input/output gates...
[ 7536/ 2900] 2015-03-22 11:22:28:892 : Connection is established
[ 7536/ 2900] 2015-03-22 11:22:28:892 - Protocol stage is "Handshake".
[ 7536/ 8032] 2015-03-22 11:22:28:946 client rect: 0, 0; 124, 31
[ 7536/ 8032] 2015-03-22 11:22:28:946 Desktop-window. (x, y): (0, 29); (w, h): (124, 2)
[ 7536/ 2900] 2015-03-22 11:22:29:040 - Server sent protocol version: RFB 003.008
[ 7536/ 2900] 2015-03-22 11:22:29:040 - Send to server protocol version: RFB 003.008
经过数周的苦苦思索、尝试不同的客户端以及尝试我能想到的任何端口转发配置(在任一侧的路由器上),我终于取得了突破。
我在 PuTTY - Dynamic 中设置了第二个 ssh 隧道,端口为 1080 (D1080)。然后我使用允许代理连接的 VNC 客户端 RealVNC VNC-Viewer,并将其指向本地主机端口 1080(类型 SOCKS 5)。
这。有效。我现在确信我的 VNC 会话是安全的,但前提是我在国外时必须通过本地 SOCKS 代理。缺点是我不能使用我最喜欢的客户端 UltraVNC Viewer。
另外,我不明白发生了什么;我正在寻找解释。为什么简单的 L5900 隧道在 LAN 中可以完成工作,而在 WAN 中却不能完成工作?
答案1
这里的问题是 PuTTY 中的 SSH 隧道设置。
根据网络教程,我使用服务器的 LAN IP 地址设置了我的 5900 SHH 隧道192.168.1.110
,因此它看起来像L5900 192.168.1.110:5900
在 PuTTY 中一样。目标主机也是如此192.168.1.110
。正如我们所知,这工作正常。
然后,我使用 PuTTY 配置了 SSH 会话,以便在国外使用。真丢脸,我在目标主机和隧道中都使用了 WAN IP。我现在意识到,当它收到发往端口 5900 的数据包时,OpenSSH 服务器会按照指示执行操作 - 它将它们转发到我的 NAT 路由器(或者无论如何尝试转发,因为指针指向 WAN 地址)。
配置 PuTTY 的可靠方法是始终使用 LAN IP 作为 5900 隧道。更好的是,在我的例子中,VNC 服务器与 OpenSSH 服务器位于同一台机器上,只需将其用于localhost
隧道即可,如 所示L5900 localhost:5900
。