RustDesk部署小记
1. 什么是RustDesk
RustDesk 是一款开源的远程桌面控制软件,允许用户通过互联网或局域网远程访问和控制其他计算机。它类似于 TeamViewer、AnyDesk 、ToDesk、向日葵等商业远程桌面工具,但 RustDesk 强调隐私、安全和自托管能力,适合个人和企业使用。
主要特点
- 跨平台支持:支持 Windows、macOS、Linux、Android、iOS 等主流操作系统。甚至可以在树莓派等嵌入式设备上运行。
- 开源与隐私保护:代码完全开源(基于 MIT 和 Apache 双协议),用户可以审查代码,确保无后门或数据泄露风险。默认使用端到端加密(基于 NaCl 加密库),保护远程连接的安全。
- 自托管选项:用户可以搭建自己的中继服务器(替代官方服务器),避免依赖第三方服务,适合企业内网或对隐私要求高的场景。
- 轻量高效:客户端体积小,资源占用低,连接延迟低,支持 60fps 的高帧率远程控制。
- 功能丰富:文件传输、剪贴板同步、远程终端、多显示器支持、会话录制等。支持无人值守访问(通过设置固定密码)。
- 多编解码器支持:支持 VP8 / VP9 / AV1 软件编解码器和 H264 / H265 硬件编解码器。
官方网站:RustDesk官网
项目地址:RustDesk开源项目地址
2. RustDesk 架构
RustDesk 采用 C/S(客户端-服务器) 和 P2P(点对点)混合架构,具体分为以下模块:
| 组件 | 作用 |
|---|---|
| 客户端(Client) | 运行在你的设备上(Windows,macOS,Linux,Android, iPhone)用于连接两个设备的软件,它负责监听来自客户端的连接请求,并在建立连接后向客户端发送屏幕更新和接收输入事件。 |
| 中继服务器(Relay Server) | 运行在服务器上,充当客户端之间的桥梁,转发来自一方的数据包到另一方。在某些环境中(如经过 NAT 出网)设备之间无法进行 P2P 连接,可以用服务器来中转 |
| 信令服务器(ID Server) | 管理客户端在线状态、ID 解析(类似“电话簿”)。用于维护客户端及中继服务器的连接信息,促进设备之间建立 P2P 连接。 |
| P2P 直连 | 在 NAT 穿透成功时,客户端直接通信,避免服务器中转,降低延迟。 |
+-------------------+ +-------------------+ +-------------------+
| Client A |<----->| Relay Server |<----->| Client B |
| (被控端) | | (中继转发) | | (控制端) |
+-------------------+ +-------------------+ +-------------------+
↑ ↑ ↑
| P2P 直连 (优先尝试) | 信令交互 | P2P 直连 (优先尝试)
| | |
+-------------------+ +-------------------+ +-------------------+
| ID Server | | 自托管服务器 | | NAT 穿透 |
| (在线状态管理) | | (可选私有化部署) | | (UPnP/STUN/TURN) |
+-------------------+ +-------------------+ +-------------------+
在 RustDesk 的自托管架构中,hbbs 和 hbbr 是两个核心服务器组件,分别承担不同的角色。
2.1 hbbs(ID 服务器)
- 身份与状态管理:维护所有客户端的在线状态(类似“电话簿”),负责解析客户端 ID 到 IP/端口的映射。同时生成和分配唯一的 设备 ID。
- NAT 穿透协调:协助客户端之间建立 P2P 直连(通过 STUN 协议交换公网信息)。
- 访问控制:支持配置白名单/黑名单,限制非法设备连接(需在启动参数或配置文件中设置)。
简单来说就是:hbbs 是RustDesk的中介服务器(Broker Server),用于管理和协调客户端连接。它帮助客户端找到并建立P2P连接。hbbs 负责维护客户端的在线状态,并处理连接请求。当客户端A希望连接客户端B时,它会向hbbs发送请求,hbbs会帮助它们建立连接。
[!tip]
hbbss仅处理信令(不转发实际数据),所以资源占用极低。
2.2 hbbr(中继服务器)
- 数据中继转发:当客户端无法直接 P2P 连接时(如复杂的 NAT 环境),负责转发音视频、文件传输等流量。
- 流量加密中转:即使中继流量,数据仍保持端到端加密(
hbbr无法解密内容)。 - 带宽管理:支持限制单个会话的带宽(通过启动参数配置)。
简单来说就是:RustDesk 中继服务器,如果P2P无法连接,会使用hbbr进行流量中继。hbbr 是RustDesk的中继服务器(Relay Server),用于在两台客户端之间进行连接中继。它允许无法直接建立P2P连接的客户端通过中继服务器进行通信。当客户端A和客户端B之间无法建立直接连接时,它们会通过hbbr中继服务器进行数据传输。
[!tip]
关键特性:
- 高性能转发:基于 Rust 的异步 I/O(tokio),支持高并发连接。
- 无状态设计:不存储客户端数据,仅做实时转发。
P2P直连说明:
- RustDesk 首先尝试建立直接 P2P 连接,如果 P2P 失败,将使用中继服务器。
- 确认连接方式,首先连接到远程主机,可以将鼠标移动到工具栏图标(绿色图标),将显示它是直接连接还是通过中继服务器连接。
使用端口说明:
| 序号 | 服务 | 端口 | 协议 | 用途 | 是否可选 |
|---|---|---|---|---|---|
| 1 | hbbs | 21114 | TCP | 用于 Web 控制台API,仅在专业版中可用 | 可选 |
| 2 | hbbs | 21115 | TCP | NAT类型测试 | 必选 |
| 3 | hbbs | 21116 | TCP/UDP | UDP用于ID注册和心跳服务,TCP用于TCP打洞和连接服务 | 必选 |
| 4 | hbbr | 21117 | TCP | 用于Relay服务 | 必选 |
| 5 | hbbs | 21118 | TCP | 用于支持Web客户端 | 可选 |
| 6 | hbbr | 21119 | TCP | 用于支持Web客户端 | 可选 |
3. 部署rustdesk-server
4. 为什么现在推荐部署 RustDesk
当前是部署 RustDesk 自建中继服务器的绝佳时机,尤其是因为国内多家公有云厂商近期推出了轻量高带宽服务器。这些服务器以低成本、高性能和充足带宽著称,非常适合运行 RustDesk 的中继和信号服务器。以下是具体理由:
- 成本效益高:轻量服务器通常提供 1 核 CPU、1 GB 内存起步的配置,已足以满足 RustDesk 服务器的最低硬件需求,且价格亲民,年费甚至可能低至 30(如某些活动价格),大大降低了自建服务器的门槛。
- 高带宽支持:RustDesk 的中继服务器在处理多用户连接和数据传输时对带宽要求较高,而国内轻量高带宽服务器提供的 200M 无限带宽和 BGP 接入,足以支持稳定、低延迟的远程连接,特别适合远程办公或团队协作场景。
- 快速部署与扩展:这些服务器通常支持 Docker 一键部署,结合 RustDesk 的开源特性,你可以快速搭建并根据需求灵活扩展,无论是个人使用还是企业级应用都游刃有余。
- 本地化优势:依托国内云服务商的服务器,连接速度更快,延迟更低,特别适合在中国大陆地区使用,规避了国际链路可能带来的不稳定性和速度瓶颈。
需要注意的是,近期有不法分子利用 RustDesk 进行诈骗活动。如果有人通过电话要求你安装 RustDesk,尤其是你不认识或不信任的人,请立即挂断电话并拒绝安装,以保护你的隐私和财产安全。

5. 部署RustDesk
我这里直接演示docker-compose的方式进行部署。
networks:
dozzle_default:
external: false
services:
hbbs: # RustDesk ID/Rendezvous 服务器
container_name: hbbs
ports:
- 21115:21115 # 用于 NAT 类型测试的 TCP
- 21116:21116 # TCP打孔
- 21116:21116/udp # UDP心跳/ID服务器
- 21118:21118 # 如果要运行web客户端,则使用TCP进行web套接字
image: rustdesk/rustdesk-server:latest
command: hbbs
volumes:
- /www/dk_project/dk_app/RustDesk/hbbs:/root
environment:
- 'RELAY=example.com' # 运行这些容器的服务器的【IP:port】或域名
- 'ENCRYPTED_ONLY=1' # 开启加密,开启之后,双方都需要输入key才可建立连接
#- 'KEY=自定义key' # 自定义KEY,去掉这一行可以自动生成
networks:
- dozzle_default
depends_on:
- hbbr
restart: unless-stopped
hbbr: # RustDesk 中继服务器
container_name: hbbr
ports:
- 21117:21117 # TCP中继
- 21119:21119 # 如果要运行web客户端,则使用TCP进行web套接字
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- /www/dk_project/dk_app/RustDesk/hbbr:/root
networks:
- dozzle_default
restart: unless-stopped
[!warning]
这里的自定义key好像非pro用户设置了,会导致客户端出现非加密连接的情况。这个我文档还没有仔细看,后续可能会优化,所以这里我先用它自动生成的吧。
之后执行命令运行即可:
sudo docker-compose up -d
[!important]
这里服务器需要放行的端口为:TCP的21115~21119端口;UDP的21116端口。
如果你是公有云,比如阿里云、腾讯云等云服务商的服务器,还需要再对应的服务器控制台模块放行对应的端口。
6. 连接验证
服务端搭建好后,在要连接的两个客户端设备上都下载 RustDesk 客户端。
下载地址是:RustDesk客户端下载地址



这里的注意一下:
- ID服务器:我这里只写了域名,这是因为我的docker-compose文件中的
RELAY环境变量设置的。并且默认端口为21116时可以省略端口配置。 - 中继服务器:我这里只写了域名,这是因为我的docker-compose文件中的
RELAY环境变量设置的。并且默认端口为21117时可以省略端口配置。 - Key:这里的key的内容位于hbbs容器中volumes配置卷里面的
id_ed25519.pub文件中的内容,由于我的hbbs容器中volumes配置卷目录为:/www/dk_project/dk_app/RustDesk/hbbs,所以,key的内容就是/www/dk_project/dk_app/RustDesk/hbbs/id_ed25519.pub文件中的内容。 - 所有客户端必须都完成相应配置,才可以进行远程连接。
之后回到主页,输入对方ID就可以连接对方了:

显示通过加密中继连接,说明两台机器位于不同网络,无法通过P2P直连,要经过自己的rustdesk-server中继连接。
Comments