Windows上的远程桌面+隧道

时间:2013-09-23 19:32:58

标签: c# sockets networking remote-desktop rdp

对不起,我试着说清楚。

*一点背景*

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

*到目前为止*

首先想到的是在调制解调器上使用端口转发选项。但是,这里的真实场景是这些客户端正在运行一个应用程序(用C#编写并且我们已经提供)并且我们需要应用程序来执行端口转发而不是调制解调器,因为在我们部署了系统后我们赢了不知道路由器型号,配置等。此外,我们将无法访问调制解调器设置。因此,假设此选项不可用。

*我们可行的选择,当然,问题! *

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

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

套接字1在客户端的端口17001上,并与客户端(RDP服务器)的端口3389进行通信 套接字2在客户端的端口17002上,并且与服务器的端口17002进行通信 套接字3在服务器的端口17002上,并与客户端的端口17002进行通信 套接字4在服务器的端口17002上,并与服务器(RDP客户端)的端口3389进行通信

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

问题是,无论客户端和服务器如何连接,即使服务器和客户端位于同一网络中,在RDP向我询问客户端密码后,它也会随机执行以下操作之一依据: 1.有时它连接没有问题,我可以与计算机进行交互 2.有时它会在那里停止 3.有时它进入并且在显示客户端屏幕之前就已经死了。

我检查了连接,更改了调制解调器,更改了客户端和服务器,它仍然是相同的。我甚至在客户端(freesshd)上尝试了一个ssh服务器,并将putty用于远程端口转发,结果是putty上的奇怪错误导致连接丢弃。我开始拔头发了!有什么想法发生了什么?

1 个答案:

答案 0 :(得分:0)

首先,谢谢大家没有回答我的问题!它帮助我弄清楚出了什么问题。

我想在这里分享解决方案,因此寻找类似问题答案的其他人可能会有所了解。

答案:

信不信由你,这与调试有关!在发布这个问题几天后,我发现如果我没有调试代码,它就可以了。我的问题解决了,所以我没有理会这个原因。

但是,大约三天前,在编写一个必须与用户交互的Windows服务的过程中,我不小心碰到了一些让我明白错误的文章。

我越走越深,发现当你开始远程连接时,你几乎开始了新的session。你猜怎么着?您的调试器附加到在另一个Windows会话中运行的进程,因此视频渲染器未分配给新会话,并且所有地狱都将破坏!

当然,这是我对这个问题的理解,但似乎揭开了神秘面纱!