有过 Windows 使用经验的人对于远程桌面(Remote Desktop Protocol ,RDP)一定不会陌生。RDP 是由微软公司开发的一种专有协议,它为用户提供了通过网络连接到另一台计算机的图形界面。在使用上,用户需要使用 RDP 客户端软件,而在远程另一台计算机则需要运行 RDP 服务器软件。
简介
可以通过如下命令安装。
apt install xrdp
默认 xrdp
使用 /etc/ssl/private/ssl-cert-snakeoil.key
配置文件,不过仅对 ssl-cert
用户组成员可读,可以通过如下命令将 xrdp
添加到这个用户组。
adduser xrdp ssl-cert
另外,xrdp
不支持 Gnome 直接链接会报 Oh no! Something has gone wrong
的错误,详细可以查看 Issues 2293 的内容。
所以,可以安装 xface
进行适配,命令如下。
----- 安装相关的软件包
apt install xfce4
----- 选择默认的管理器,选择 startxfce4
update-alternatives --config x-session-manager
----- 如果已经安装,那么重启
systemctl restart xrdp xrdp-sesman
协议详解
可以通过 tcpdump
进行抓包,以 xrdp
为例,命令如下。
tcpdump -nnX -i lo tcp port 3389
tcpdump -nnX -i lo tcp port 3389 -w /tmp/rdp.cap
通过 Wireshark 分析的时候可能 TLS 加密,此时参考 Wireshark TLS 进行分析,对应的私钥文件可以通过 /var/log/xrdp.log
查看,一般是 /etc/xrdp/key.pem
文件。
Client Server
|-------------------- X.224 Connection Request PDU ---------------------->|
|<------------------- X.224 Connection Confirm PDU -----------------------|
| |
|------ MCS Connect Initial PDU With GCC Conference Create Request ------>|
|<---- MCS Connect Response PDU With GCC Conference Create Response ------|
| |
|------------------- MCS Erect Domain Request PDU ----------------------->|
|------------------- MCS Attach User Request PDU ------------------------>|
|<------------------- MCS Attach User Confirm PDU ------------------------|
|================== MCS Channel Join Request PDU(s) =====================>|
|<================= MCS Channel Join Confirm PDU(s) ======================|
|
|------ Authentication Type Selected By Client ------>|
|<------ Authentication Challenge From Server --------|
|-------- Authentication Response From client ------->|
|<------------- Authentication Result ----------------|
| |
|---------------- Share Desktop Flag ---------------->|
|<---- Server Init(FrameBuffer PixelFormat Name) -----|
参考
协议
- Remote Desktop Services Protocols Overview(PDF) 官方的协议文档,以及 RDP(html) 的介绍。
- T123 TPKT 的协议介绍,详见第 8 章。
- X224 编码方式可以查看 13 Structure and encoding of TPDUs 中的内容。
- T.122 MCS 协议层内容,用于多点通讯处理。
- T.124 Generic Conference Control, GCC 规范。
- T.125
实现
一些常见的实现。