远程桌面 (RDP) + 隧道

远程桌面 (RDP) + 隧道

抱歉,故事太长了,我尽力讲清楚了。

* 一点背景 *

作为项目的一部分,我们需要能够使用远程桌面 (RDP) 从具有有效 IP 地址的服务器访问某些计算机(以下称为客户端)。这些客户端位于 NAT 后面(例如,位于 DSL 调制解调器+路由器后面),因此它们没有有效的 IP 地址,但调制解调器+路由器有。假设它们都在 Windows 7 Ultimate 上运行,并且没有防火墙、防病毒软件或任何阻止流量的程序。

* 迄今为止 *

首先想到的也是最合乎逻辑的做法是使用调制解调器上的端口转发选项。但是,实际情况是这些客户端正在运行一个应用程序(我们提供的),我们需要该应用程序而不是调制解调器进行端口转发,因为在部署系统后,我们将不知道路由器型号、配置等。此外,我们无法访问调制解调器设置。因此,假设此选项不可用。

* 对我们来说是可行的选择,当然,也是问题所在!*

转到下一个选项,即使用反向隧道(又称远程端口转发),我们更改了应用程序以创建 2 个套接字。一个用于与客户端上的 RDP 服务器通信,另一个用于连接到服务器(具有有效 IP 的服务器)以建立隧道。服务器上有另一个应用程序,它接收来自客户端的所有流量并将其发送到远程桌面客户端(通过另一个套接字),反之亦然。因此架构看起来像:

|RDP SERVER|<->|Socket1|<->|Socket2|<->The Internet<->|Socket3|<->|Socket4|<->|RDP Client|
------------- Client side -----------               ------------- Server Side -----------  

套接字 1 位于客户端的端口 17001 上,正在与客户端的端口 3389(RDP 服务器)通信
套接字 2 位于客户端的端口 17002 上,正在与服务器的端口 17002 通信
套接字 3 位于服务器的端口 17002 上,正在与客户端的端口 17002 通信
套接字 4 位于服务器的端口 17002 上,正在与服务器的端口 3389 通信(RDP 客户端)

从那时起,每当服务器上的用户想要与 NAT 后面的客户端建立远程桌面连接时,他都会连接到套接字 4,并且所有流量将重定向到套接字 3,后者又将流量传输到套接字 2,并从套接字 2 传输到套接字 1,反之亦然。

问题是,无论客户端和服务器如何连接,即使服务器和客户端位于同一网络中,彼此相邻,在 RDP 询问我客户端的密码后,它会随机执行以下操作之一:

  1. 有时它可以毫无问题地连接,我可以与计算机交互
  2. 有时它就停在那里
  3. 有时它会进入但在显示客户端屏幕之前就死机了。

我检查了连接,更换了调制解调器,更换了客户端和服务器,但情况仍然相同。我甚至在客户端上尝试了 ssh 服务器(自由软件) 并使用 putty 进行远程端口转发,结果 putty 出现奇怪的错误,导致连接断开。我开始抓狂了!有人知道发生了什么吗?

相关内容