RustDesk是一款开源、支持自己部署服务端的远程桌面软件,且能够提供流畅的远程桌面体验。对于内网使用,或者团队内部等场景,RustDesk自部署服务端是非常适合的。此外,RustDesk也提供付费的专业版,支持更多的功能。当然,开源版就已经可以覆盖我们大多数使用场景。
不过,RustDesk的官方文档讲述得略微有点简单,对于初次接触的人来说可能有点迷糊,这里就来讲解一下RustDesk整体部署由哪些组件构成,如何部署并配置。
1,RustDesk部署架构
(1) 组成
完整的RustDesk部署由下列部分构成:
- 客户端:也就是安装在我们电脑或者移动端上的RustDesk程序,用于控制其它设备,或者被其它设备控制
- 服务端:多个客户端则需要借助RustDesk服务端才能相互建立连接,其服务端总体又包含下列两个服务器程序:
- 信令服务器(hbbs):主要用于协调两个客户端之间的连接建立 ,就像是"介绍人",告诉双方客户端对方的
IP
和端口,使用哪种连接方式 - 中继服务器(hbbr):作为中间人 角色,在两个客户端无法直接通信时(如NAT、防火墙、网络隔离环境),
hbbr
作为中继转发数据类似于远程桌面的"跳板机"或"中转服务器"
- 信令服务器(hbbs):主要用于协调两个客户端之间的连接建立 ,就像是"介绍人",告诉双方客户端对方的

此外,hbbr
中继服务器可以搭建多个构成一个集群。
(2) 连接过程
在RustDesk客户端之间建立远程桌面连接时,通常有两种连接方式:
- 点对点直连(P2P打洞):当客户端两者之间可以直接通过IP地址访问时(例如内网环境),就相互之间直接通过相互的IP地址建立通道实现远程桌面的画面与控制指令传输
- 中继连接(Relay):当客户端两者之间无法直接通过各自的IP地址相互访问时,双方就会都与
hbbr
服务器建立连接,所有数据从hbbr
服务器中转传输,也就是说所有的流量都会经过hbbr
服务器
总的来说:
- 当RustDesk客户端启动时,就会与
hbbs
服务器建立连接,并向hbbs
服务器发生自己的控制码、IP地址等信息 - 当有两个客户端建立连接时,两者会通过
hbbs
服务器获取相互的IP地址,并尝试直接建立连接,如果:- 可以相互直接连接:则两者之间直接建立连接通道,实现远程控制,此时数据在两个设备之间直接进行传输
- 不能相互直接连接:则两者之间都与
hbbr
服务器建立连接,以hbbr
服务器作为中继节点实现远程控制,此时两个设备之间的数据流量都会经过hbbr
服务器,因此如果hbbr
服务器带宽过低,则可能导致卡顿
总体连接过程可以看官方文档中这张示意图:

2,服务端搭建方法
RustDesk服务端支持直接部署和使用Docker部署,这里将会分别讲解,大家视情况选择其一即可。
首先我们需要了解hbbs
和hbbr
所需端口以及作用:
hbbs
21114
TCP协议,用于网页控制台,仅在专业版中可用21115
TCP协议,用于NAT类型测试21116
TCP和UDP协议,其中21116/UDP
用于ID注册和心跳检测服务,21116/TCP
用于TCP打洞和连接服务21118
TCP协议,用于支持网页客户端
hbbr
21117
TCP协议,用于中继数据流量21119
TCP协议,用于支持网页客户端
一般来说,hbbs
开放21115
和21116
即可,hbbr
开放21117
即可。如果要支持网页客户端,则再开放hbbs
的21118
和hbbr
的21119
端口。大家需要根据实际情况在云服务器防火墙先配置上述对应端口开放。
(1) Docker部署
容器化部署非常方便,我们首先拉取镜像:
bash
docker pull rustdesk/rustdesk-server
然后创建数据卷用于存储和持久化服务器产生的数据、密钥等文件:
bash
docker volume create rustdesk-data
最后分别部署hbbs
和hbbr
服务器即可:
bash
# 部署hbbr服务器
docker run -id --name=rustdesk-hbbr \
-p 21117:21117 \
-v rustdesk-data:/root \
rustdesk/rustdesk-server hbbr
# 部署hbbs服务器
docker run -id --name=rustdesk-hbbs \
-p 21115:21115 \
-p 21116:21116 -p 21116:21116/udp \
-v rustdesk-data:/root \
rustdesk/rustdesk-server hbbs -r hbbr服务器外网地址:端口
可见上述过程:
- 需要映射对应的端口到宿主机,尤其是
hbbs
的21116
需要同时映射TCP
和UDP
协议 - 由于上述是在同一台服务器部署
hbbs
和hbbr
,因此两者数据目录可以挂载到同一数据卷,容器内的数据目录是/data
hbbs
的启动命令需要使用-r
指定中继服务器hbbr
的外网 地址和端口(一定要指定hbbr
服务器的外网地址而非内网地址,否则客户端走中继连接时hbbs
返回的是hbbr
的内网地址,最终导致无法连接),如果部署了多个hbbr
服务器,则每个地址之间使用英文逗号隔开,例如hbbs -r 172.30.22.116:21116,192.168.10.50:21116,10.0.0.100:21116
,此外还可以使用-p
参数改变hbbs
的主要端口,默认是21116
hbbr
的启动命令一般不需要直接指定参数,不过也可以使用-p
参数改变其主要端口,默认是21117
此外,在第一次启动hbbs
服务器时会生成一个密钥对 在数据目录下(容器中的/data
,上述已经挂载到数据卷),我们需要获取其公钥id_ed25519.pub
文件内容,后续需要配置到客户端里面。
上述挂载数据目录到rustdesk-data
数据卷,那么在宿主机上就可以使用下列命令查看公钥内容:
bash
cat /var/lib/docker/volumes/rustdesk-data/_data/id_ed25519.pub
得到一个字符串:

我们可以先拷贝下来备用。
到此,部署服务端完成。
(2) 直接部署
在服务端项目Github Releases页面下载hbbs
和hbbr
可执行文件:

解压后内容如下:

通常我们只需要hbbs
和hbbr
即可,上传至服务器的某个目录下,然后分别启动两者,建议使用screen
命令分别将两者挂在后台运行,这里不再赘述screen
命令的用法。
首先启动hbbr
服务器:
bash
./hbbr
可使用-p
参数更改端口,默认是21117
。
然后启动hbbs
服务器:
bash
./hbbs -r hbbr服务器外网地址:端口
一定要指定hbbr
服务器的外网地址而非内网地址!否则客户端走中继连接时hbbs
返回的是hbbr
的内网地址,最终导致无法连接。同样可以用-p
更改端口,默认是21116
。
同时,在第一次启动hbbs
服务器时会生成一个密钥对 在当前目录下,我们需要读取其公钥id_ed25519.pub
内容并记下,后续配置客户端需要。

3,配置客户端
在RustDesk客户端项目Github Release页面下载自己对应系统的客户端:

以桌面端为例,打开客户端后进入设置,找到网络配置,配置ID/中继服务器:

在配置页面,只需配置ID服务器地址和Key
字段即可:

上述:
- ID服务器填写
hbbs
服务器的地址端口即可,如果hbbs
服务器使用默认端口21116
,则可以省略端口号 Key
填写在部署时hbbs
初次启动生成的公钥内容,粘贴来即可
最后确认,即可成功连接到我们自部署的服务器,回到主页左下角显示就绪说明连接成功:

到此,客户端配置完成。
参考文档: