Win-Server-3-远程桌面网关协议实现原理

Win-Server-3-远程桌面网关协议实现原理

Scroll Down

Windows Server RD 网关实现原理:

1、远程桌面服务RDS与远程桌面网关RDGW简介

1.1 远程桌面服务介绍

远程桌面服务(Remote Desktop Services)最早是在Windows NT Server4.0中引入并且开始正式使用,在Windows Server 2008R2之前被称为终端服务(Terminal Services),在Windows Server 2008 R2开始该服务的名称变为远程桌面服务。

远程桌面服务可以实现很多功能,其中包括帮助Windows Server服务器实现承载多个并行的客户端会话,可以单会话实现远程运行,远程使用Web应用程序等功能。

为了实现上述功能,Windows Server远程桌面服务包含了六种关键角色:

角色名称角色作用
远程桌面网关实现认证的用户通过公用网络去连接位于私有网络中的虚拟桌面、远程应用以及基于会话的桌面
远程桌面连接代理允许用户去重新连接到他们已有的虚拟桌面、远程应用以及基于会话的桌面
远程桌面会话主机实现服务器去承载远程应用作为基于会话的桌面,用户可以使用远程桌面连接应用连接到会话主机去运行应用,存储文件,使用资源
远程桌面虚拟化主机实现用户可使用远程应用工具和桌面连接工具连接虚拟桌面
远程桌面网页访问实现用户可使用通过网页浏览器去访问远程应用和桌面连接
远程桌面授权服务实现一个服务器可以管理客户端访问授权,该授权可以允许每个设备或者用户连接基于远程桌面会话的服务器

1.2 远程桌面网关介绍

远程桌面网关(RemoteDesktop Gateway)是作为一个角色来实现允许被授权的用户通过公有网络来访问位于私有网络中的资源,资源可以是远程桌面会话主机、运行 RemoteApp 程序的RD会话主机服务器、启用了远程桌面的服务器或者个人电脑。远程桌面网关使用在安全超文本传输协议(HTTPS)上的远程桌面协议(RDP)来在公共网络中进行远程访问和在私有网络中的设备或者服务器之间建立一个安全加密的连接。

用户通过公共网络直接去尝试连接在防火墙后面的资源时,需要在防火墙上开启3389端口或者其他远程桌面的端口。如果不方便开启相应de端口,远程访问操作也就不能实现。

即便在防火墙上开启了3389端口也是不安全的,会对私有网络中存在并且开启了3389或相应远程桌面端口的服务器或者资源造成安全威胁,因为任何人都可以尝试远程桌面端口来进行服务器端的密码破解。

Windows Server远程桌面网关就可以很好的解决上述问题,远程桌面网关的特性如下:

• 不用配置虚拟专用网(VPN)就可以构建一个安全加密的连接。

• 提供了一种综合安全配置使得用户可以控制访问特殊的内部网络中的资源。

• 提供了点到点的远程桌面协议连接,而不是允许远程用户访问所有内部网络中的资源。

• 不用多余的配置便可以使得远程用户通过网络地址转换(NAT)来实现远程访问。

• 提供了两种授权方式来进行安全控制。

• 可以与网络访问保护(NAP)进行协作提供更安全的防护。

• 可以与微软互联网安全与加速服务器进行协作提供更安全的防护。

• 提供了友好的方式,可以帮助管理人员随时监控远程桌面网关状态,健康度和事件,已达到更好管理的目的

image.png

由图可以看出,在公网(Internet)的用户使用笔记本(Home Laptop)想访问公司内部的私有网络中(Corporate/Private Network)的服务器或台式机,首先需要先与远程桌面网关服务通过基于安全套字节层的远程桌面协议(RDP over SSL)建立一个安全的通信隧道,然后再通过远程桌面网关的远程桌面端口连接到公司内部的资源的远程桌面3389端口,这样就建立起了一条从用户到远程终端的安全通信链路。

2、远程桌面网关RDGW协议实现原理

整体实现过程个人理解:

**首先远程桌面网关协议集使用RDGW HTTP协议在客户端和远程桌面网关服务器之间建立一条隧道,然后同样使用RDGW HTTP协议利用该隧道在客户端和终端服务器之间建立一条通信通道,最后使用RDGW UDP协议进行数据传输。**隧道和通道共同维护活跃的通信连接。

2.1 远程桌面网关服务器协议(RDGWSP)过程

远程桌面网关使用了RPC over HTTP、HTTP以及UDP协议进行通道建立来实现用户与终端服务器之间的通信。

2.1.1 通道建立

隧道的建立分为从客户端到远程桌面网关服务器,再从远程桌面网关服务器到终端服务器两部分 ,这个过程包含了三个操作步骤:

image.png

**建立连接:**在建立连接的过程中,第一步,客户端会根据远程桌面网关服务器所支持的协议版本、服务器证书,通过TSProxyCreateTunnel 方法向远程桌面网关服务器建立一条隧道,远程桌面网关服务器会给客户端回复;第二步,客户端会使用TSProxyAuthorizeTunnel方法对远程桌面服务器执行授权规则,其中包括健康检查、强制用户对隧道认证操作授权;第三步,如果认证通过,客户端和远程桌面网关服务器能够发送和接收管理信息,客户端就可以调用TsProxyMakeTunnelCall方法来请求消息,并利用TsProxyCreateChannel方法在 已经建立好的隧道中建立一个通道来实现接下来的数据传输工作。

2.1.2 数据传输:

image.png

数据传输过程将允许从客户端到终端服务器进行数据传输工作,在这个过程,远程桌面网关服务器扮演者一个中间代理者的角色 。远程桌面网关客户端会与远程桌面网关服务器建立一个连接,然后远程桌面服务器再跟终端服务器建立一条独立的连接,这样,从客户端到终端服务器的这条逻辑链路称为一条通道,而这条通道只能建立在隧道之内,但一个隧道可以容纳多条通道同时通信。

2.1.3 结束过程:

结束过程是去终止通道和隧道的过程, 其中包含了关闭通道 、取消等待消息、关闭隧道三个子过程。远程桌面网关客户端都可以发起结束过程。

2.2 远程桌面网关超文本协议(RDGW HTTP)

远程桌面网关超文本协议(RDGW HTTP)使用超文本协议(HTTP)来创建两条通信通道,分别负责接收来自远程桌面网关服务器和发送数据到远程桌面网关服务器,每一条通道被加密协议SSL所保护,这也是部署远程桌面网关服务器最常用的一种协议。

RDGW HTTP使用HTTP协议来实现四个过程,分别为建立连接认证与创建隧道和通道数据传输以及关闭连接

2.2.1 建立连接与认证过程

image.png

OUT 和 IN 通道是一条HTTP1.1连接,如果远程桌面网关服务器和远程桌面网关客户端支持WebSocket协议,那OUT通道和IN通道便可实现双向通信功能,如果不支持,则OUT通道负责远程桌面网关的数据发送,而IN通道则负责数据输入工作。通道建立完成后进行认证过程。

2.2.2 认证与创建隧道和通道过程

image.png

这个过程中,首先客户端与远程桌面网关服务器交换版本和能力协调信息;然后客户端向远程桌面网关服务器发出创建隧道的请求,远程桌面网关服务器对客户端进行回复;然后客户端向远程桌面网关服务器发出隧道认证请求,远程桌面网关服务器对其进行回复;隧道认证完成后,客户端便会基于该隧道向远程桌面网关服务器发出创建通道的请求,远程桌面网关服务器对其回复。

2.2.3 数据和服务器消息交换过程

在数据和服务器消息交换过程中,远程桌面网关服务器和客户端使用IN通道和OUT通道来进行数据的发送工作,另外会通过Keep-alive消息来实现检测服务器和客户端状态的功能。远程桌面网关服务器会不定时发送服务消息和重认证请求来确保客户端的有效性。

2.2.4 连接关闭过程

image.png

在连接关闭过程中,远程桌面客户端和远程桌面服务器都可以关闭通道,如上图所示,客户端发起通道关闭,其中包括关闭通道和关闭隧道两步。

2.3 远程桌面网关用户数据报文协议(RDGW UDP)

远程桌面用户数据报协议被设计用来穿越防火墙在远程桌面网关客户端和终端服务器中间进行传输图形图像,音频视频数据的协议。该协议会在远程桌面网关客户端上创建一个隧道后在隧道内创建一条连接客户端和终端服务器的通道,而远程桌面网关服务器会以一个代理的形式,数据通过这条建立好的通道进行传输。数据在远程桌面网关服务器到和远程桌面网关客户端使用用户数据报文协议进行传输,远程桌面网关客户端会与远程桌面网关服务器进行数据包传输层安全性协议(DTLS)握手后建立一条安全通道,进行相应的连接建立、数据传输以及关闭过程。

2.3.1 DTLS握手过程

image.png

DTLS握手过程会首先在远程桌面网关客户端和远程桌面网关服务器之间建立起一条安全的通道。握手的过程由两个操作组成,首先远程桌面网关客户端会通过可靠的方式发送第一个数据包,这个数据包会不断地重复发送给服务器端直到收到服务器的相应,如果在相应的次数内客户端没有收到服务器端的相应,则会标识本次连接建立的过程失败。其他的DTLS握手过程都是通过不可靠的方式进行的,所有丢失的数据包都不会进行重传操作,客户端和服务器端负责丢失数据包重传的任务,过程如图所示

2.3.2 连接建立过程

image.png
客户端发送相应次数的连接请求数据包到远程桌面网关服务器,直到收到远程桌面网关服务器发送的响应包。远程桌面网关服务器会使用该数据包的cookie中指定的IP地址来建立一条UDP连接,之后远程桌面网关服务器会存储连接建立的结果,并发送给客户端。

2.3.3 数据传输过程

这个过程实现了数据通过远程桌面网关服务器在远程桌面网关客户端和终端服务器之前的传输。UDP会建立一条逻辑的隧道和一条客户端和终端服务器的端到端的连接后进行数据的传输工作

2.3.4 关闭过程

image.png

这个过程会终止UDP通道以及所有在客户端和网关服务器之间的连接。客户端和网关服务器都可以发送DISC_PKT_Structure数据包来实现该过程

参考内容:
1、Windows Server远程桌面网关深入浅出.pdf