RustDesk搭建指南

RustDesk是一款开源、支持自己部署服务端的远程桌面软件,且能够提供流畅的远程桌面体验。对于内网使用,或者团队内部等场景,RustDesk自部署服务端是非常适合的。此外,RustDesk也提供付费的专业版,支持更多的功能。当然,开源版就已经可以覆盖我们大多数使用场景。

不过,RustDesk的官方文档讲述得略微有点简单,对于初次接触的人来说可能有点迷糊,这里就来讲解一下RustDesk整体部署由哪些组件构成,如何部署并配置。

1,RustDesk部署架构

(1) 组成

完整的RustDesk部署由下列部分构成:

  • 客户端:也就是安装在我们电脑或者移动端上的RustDesk程序,用于控制其它设备,或者被其它设备控制
  • 服务端:多个客户端则需要借助RustDesk服务端才能相互建立连接,其服务端总体又包含下列两个服务器程序:
    • 信令服务器(hbbs):主要用于协调两个客户端之间的连接建立 ,就像是"介绍人",告诉双方客户端对方的IP和端口,使用哪种连接方式
    • 中继服务器(hbbr):作为中间人 角色,在两个客户端无法直接通信时(如NAT、防火墙、网络隔离环境),hbbr作为中继转发数据类似于远程桌面的"跳板机"或"中转服务器"

此外,hbbr中继服务器可以搭建多个构成一个集群。

(2) 连接过程

在RustDesk客户端之间建立远程桌面连接时,通常有两种连接方式:

  • 点对点直连(P2P打洞):当客户端两者之间可以直接通过IP地址访问时(例如内网环境),就相互之间直接通过相互的IP地址建立通道实现远程桌面的画面与控制指令传输
  • 中继连接(Relay):当客户端两者之间无法直接通过各自的IP地址相互访问时,双方就会都与hbbr服务器建立连接,所有数据从hbbr服务器中转传输,也就是说所有的流量都会经过hbbr服务器

总的来说:

  • 当RustDesk客户端启动时,就会与hbbs服务器建立连接,并向hbbs服务器发生自己的控制码、IP地址等信息
  • 当有两个客户端建立连接时,两者会通过hbbs服务器获取相互的IP地址,并尝试直接建立连接,如果:
    • 可以相互直接连接:则两者之间直接建立连接通道,实现远程控制,此时数据在两个设备之间直接进行传输
    • 不能相互直接连接:则两者之间都与hbbr服务器建立连接,以hbbr服务器作为中继节点实现远程控制,此时两个设备之间的数据流量都会经过hbbr服务器,因此如果hbbr服务器带宽过低,则可能导致卡顿

总体连接过程可以看官方文档中这张示意图:

2,服务端搭建方法

RustDesk服务端支持直接部署和使用Docker部署,这里将会分别讲解,大家视情况选择其一即可。

首先我们需要了解hbbshbbr所需端口以及作用:

  • hbbs
    • 21114 TCP协议,用于网页控制台,仅在专业版中可用
    • 21115 TCP协议,用于NAT类型测试
    • 21116 TCP和UDP协议,其中21116/UDP用于ID注册和心跳检测服务,21116/TCP用于TCP打洞和连接服务
    • 21118 TCP协议,用于支持网页客户端
  • hbbr
    • 21117 TCP协议,用于中继数据流量
    • 21119 TCP协议,用于支持网页客户端

一般来说,hbbs开放2111521116即可,hbbr开放21117即可。如果要支持网页客户端,则再开放hbbs21118hbbr21119端口。大家需要根据实际情况在云服务器防火墙先配置上述对应端口开放。

(1) Docker部署

容器化部署非常方便,我们首先拉取镜像:

bash 复制代码
docker pull rustdesk/rustdesk-server

然后创建数据卷用于存储和持久化服务器产生的数据、密钥等文件:

bash 复制代码
docker volume create rustdesk-data

最后分别部署hbbshbbr服务器即可:

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服务器外网地址:端口

可见上述过程:

  • 需要映射对应的端口到宿主机,尤其是hbbs21116需要同时映射TCPUDP协议
  • 由于上述是在同一台服务器部署hbbshbbr,因此两者数据目录可以挂载到同一数据卷,容器内的数据目录是/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页面下载hbbshbbr可执行文件:

解压后内容如下:

通常我们只需要hbbshbbr即可,上传至服务器的某个目录下,然后分别启动两者,建议使用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初次启动生成的公钥内容,粘贴来即可

最后确认,即可成功连接到我们自部署的服务器,回到主页左下角显示就绪说明连接成功:

到此,客户端配置完成。

参考文档:

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言