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初次启动生成的公钥内容,粘贴来即可

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

到此,客户端配置完成。

参考文档:

相关推荐
java叶新东老师3 小时前
git stash 命令详解
linux·运维·flink
写bug的羊羊4 小时前
CentOS 9 配置国内 YUM 源
linux·运维·centos
Johny_Zhao6 小时前
CentOS Stream 9上部署FTP应用服务的两种方法(传统安装和docker-compose)
linux·网络安全·信息安全·kubernetes·云计算·containerd·ftp·yum源·系统运维
C++ 老炮儿的技术栈7 小时前
在 Scintilla 中为 Squirrel 语言设置语法解析器的方法
linux·运维·c++·git·ubuntu·github·visual studio
白鹭8 小时前
基于LNMP架构的分布式个人博客搭建
linux·运维·服务器·网络·分布式·apache
java叶新东老师8 小时前
linux 部署 flink 1.15.1 并提交作业
linux·运维·flink
程序员JerrySUN9 小时前
Linux系统架构核心全景详解
linux·运维·系统架构
无敌的牛9 小时前
Linux文件理解,基础IO理解
linux·运维·服务器
未来之窗软件服务9 小时前
跨平台 WebSocket 服务器的设计与实现 —— 基于.NET 8 的跨操作系统解决方案linux,macos,windows——开发工具
linux·服务器·websocket·仙盟创梦ide·东方仙盟