1. 配置目标

本文记录在云服务器上部署 RustDesk 自建服务器的基本流程,用于替代 RustDesk 官方公共服务器,实现私有化的 ID 服务与中继服务。

服务器公网 IP:<YOUR_SERVER_IP>
服务器域名:<YOUR_DOMAIN>
系统环境:Linux / Alibaba Cloud Linux / CentOS / Ubuntu 等
RustDesk Server 组件:hbbs / hbbr

RustDesk 自建服务主要包括两个核心进程:

hbbs:ID / rendezvous server,用于设备注册、ID 解析、NAT 打洞协调
hbbr:relay server,用于无法直连时的数据中继

2. RustDesk 常用端口

TCP 21115:NAT 类型测试
TCP 21116:ID 服务,hbbs
UDP 21116:打洞、心跳、连接协调,hbbs
TCP 21117:中继服务,hbbr
TCP 21118:Web Client 相关,hbbs
TCP 21119:Web Client 相关,hbbr

最关键的是:

ID Server    = 21116
Relay Server = 21117

常见错误:21117 填到 ID 服务器中。21117 是中继服务器端口,不是 ID 服务器端口。

错误示例:

ID 服务器:<YOUR_SERVER_IP>:21117
中继服务器:空

正确示例:

ID 服务器:<YOUR_SERVER_IP>:21116
中继服务器:<YOUR_SERVER_IP>:21117
API 服务器:留空
Key:<YOUR_RUSTDESK_PUBLIC_KEY>

3. 检查 RustDesk Server 是否运行

在服务器上检查端口监听:

ss -lntup | grep -E '21115|21116|21117|21118|21119'

正常情况下应该看到类似端口监听:

UDP 21116    hbbs
TCP 21115    hbbs
TCP 21116    hbbs
TCP 21117    hbbr
TCP 21118    hbbs
TCP 21119    hbbr

也可以查看进程:

ps -ef | grep -E 'hbbs|hbbr' | grep -v grep

如果没有看到相关进程,说明 RustDesk Server 没有启动,需要检查安装方式、启动脚本或 Docker 容器状态。

4. 放行服务器系统防火墙端口

如果服务器使用 firewalld,需要放行 RustDesk 端口:

firewall-cmd --permanent --add-port=21115-21119/tcp
firewall-cmd --permanent --add-port=21116/udp
firewall-cmd --reload

检查是否生效:

firewall-cmd --list-all | grep 211

注意:服务器内部防火墙放行后,还需要在云厂商安全组中继续放行同样端口。

5. 云服务器安全组配置

以阿里云 ECS 为例,需要在当前实例绑定的安全组入方向规则中添加:

允许    自定义 TCP    21115-21119    0.0.0.0/0
允许    自定义 UDP    21116          0.0.0.0/0

注意事项:

  1. 必须配置入方向规则;
  2. 必须配置在当前 ECS 实例绑定的安全组上;
  3. TCP 和 UDP 要分别配置;
  4. UDP 21116 不能遗漏;
  5. 如果只允许某个固定公网 IP,其他网络下的设备可能无法注册到 RustDesk Server。

测试阶段可以使用 0.0.0.0/0 便于排错。正式使用时可以根据实际场景收紧来源 IP,但如果需要多地、多设备访问,来源 IP 过窄会导致部分设备无法连接。

6. RustDesk 客户端配置

在 RustDesk 客户端中进入:

设置 -> 网络 -> ID/中继服务器

填写:

ID 服务器:<YOUR_SERVER_IP>:21116
中继服务器:<YOUR_SERVER_IP>:21117
API 服务器:留空
Key:<YOUR_RUSTDESK_PUBLIC_KEY>

如果使用域名:

ID 服务器:<YOUR_DOMAIN>:21116
中继服务器:<YOUR_DOMAIN>:21117
API 服务器:留空
Key:<YOUR_RUSTDESK_PUBLIC_KEY>

控制端和被控端都需要配置同一套参数:同一个 ID Server、同一个 Relay Server、同一个 Key。如果只有一端配置自建服务器,另一端仍使用官方服务器,通常无法正常发现和连接。

7. 获取 RustDesk Server Public Key

客户端的 Key 应填写服务器生成的公钥,通常文件名为:

id_ed25519.pub

可以在服务器上查找:

find / -name "id_ed25519.pub" 2>/dev/null

找到后查看内容:

cat <RUSTDESK_SERVER_DIR>/id_ed25519.pub

将输出的整行内容复制到 RustDesk 客户端的 Key 中。

  1. 填的是 .pub 公钥,不是私钥;
  2. 不要公开实际 Key;
  3. 不要把服务器密码、SSH key、邮箱等填到这里;
  4. 控制端和被控端必须使用相同 Key。

8. 本地测试端口连通性

在本地电脑测试 TCP 端口是否能访问:

nc -vz <YOUR_SERVER_IP> 21116
nc -vz <YOUR_SERVER_IP> 21117

成功时通常显示:

Connection to <YOUR_SERVER_IP> 21116 port [tcp/*] succeeded!
Connection to <YOUR_SERVER_IP> 21117 port [tcp/*] succeeded!

如果失败,例如超时或连接拒绝,需要检查 RustDesk Server 是否启动、服务器端口是否监听、firewalld 是否放行、云服务器安全组是否放行、是否配置到了正确的安全组、是否遗漏 UDP 21116,以及本地网络或代理是否干扰连接。

UDP 21116 不容易用 nc 直接准确测试,但它对 RustDesk 打洞和连接协调很重要,必须放行。

9. 常见问题与定位方法

9.1 RustDesk 显示“无网络”

常见原因包括:ID Server 端口填错、ID Server 填成 Relay Server 端口、Key 不匹配、安全组或 firewalld 未放行、hbbs/hbbr 未启动,以及控制端和被控端没有使用同一套服务器配置。

ID Server    应为 <YOUR_SERVER_IP>:21116
Relay Server 应为 <YOUR_SERVER_IP>:21117

9.2 服务器端监听正常,但客户端连接不上

先确认服务器监听:

ss -lntup | grep -E '21115|21116|21117|21118|21119'

如果监听正常但外部客户端仍连不上,优先检查云安全组入方向是否放行 TCP 21115-21119 和 UDP 21116,是否加到了当前实例绑定的安全组,是否误加到了内网规则或错误方向,以及服务器 firewalld 是否放行。

9.3 只配置 firewalld 仍然连不上

云服务器通常有两层访问控制:

第一层:云厂商安全组
第二层:服务器系统防火墙

只执行 firewall-cmd 命令只能放行服务器系统防火墙,不会自动修改云厂商安全组。因此还必须在云控制台中放行对应端口。

9.4 Key 应该填什么

应填写服务器生成的 RustDesk 公钥:

cat <RUSTDESK_SERVER_DIR>/id_ed25519.pub

不要填写私钥 id_ed25519、SSH 私钥、服务器密码、邮箱、阿里云 AccessKey 或随便生成的字符串。

9.5 中继服务器可以留空吗

可以

ID 服务器:<YOUR_SERVER_IP>:21116
中继服务器:<YOUR_SERVER_IP>:21117

显式填写端口可以避免客户端自动推断带来的不确定性。

10. 推荐最终配置

服务器端监听:

TCP 21115
TCP 21116
UDP 21116
TCP 21117
TCP 21118
TCP 21119

服务器 firewalld:

firewall-cmd --permanent --add-port=21115-21119/tcp
firewall-cmd --permanent --add-port=21116/udp
firewall-cmd --reload

云安全组入方向:

TCP 21115-21119    0.0.0.0/0
UDP 21116          0.0.0.0/0

RustDesk 客户端:

ID 服务器:<YOUR_SERVER_IP>:21116
中继服务器:<YOUR_SERVER_IP>:21117
API 服务器:留空
Key:<YOUR_RUSTDESK_PUBLIC_KEY>

验证命令:

ss -lntup | grep -E '21115|21116|21117|21118|21119'
firewall-cmd --list-all | grep 211
nc -vz <YOUR_SERVER_IP> 21116
nc -vz <YOUR_SERVER_IP> 21117

11. 本次配置经验总结

本次配置中,服务器端 hbbshbbr 实际已经正常运行,端口也已经监听。系统防火墙放行后,服务器内部环境基本正常。

真正需要重点注意的是:

  1. RustDesk 客户端 ID Server 端口不能填错;
  2. 21116 是 ID Server,21117 是 Relay Server;
  3. 云服务器安全组和系统防火墙都要放行;
  4. TCP 和 UDP 要分别配置;
  5. UDP 21116 不能遗漏;
  6. Key 必须使用服务器的 id_ed25519.pub 内容;
  7. 控制端和被控端都要使用同一套自建服务器配置。