Contents

RustDesk Server 自建完整教程:脱离官方中继,自托管远程桌面

1. 为什么要自建 RustDesk Server?

远程桌面是一个高度敏感的场景——你的鼠标、键盘、剪贴板、文件传输全部经过中继服务器。如果中继服务器在你控制之外,意味着数据传输经过了第三方。

RustDesk 默认提供免费的官方 ID/Relay 服务器,这对偶尔使用的个人用户够用。但在以下场景中,官方中继有明确短板:

  1. 隐私合规:公司客户数据、财务系统不允许经过第三方中转
  2. 连接稳定性:官方服务器在境外,国内晚高峰延迟高、断连频繁
  3. 速度上限:官方中继带宽有限,传大文件速度受限
  4. 墙内不可用:官方中继被 GFW 干扰时,全线断连

自建 RustDesk Server 只需要两个二进制文件(hbbs + hbbr),部署在任何一台有公网 IP 的云服务器上——腾讯云轻量云阿里云 ECS,甚至是 搬瓦工 CN2 GIA VPS 都可以。客户端只需要改一行 ID/Relay 地址,就可以完全脱离官方服务器运行。

配合 WireGuard 组网,甚至可以做到服务器不暴露公开端口——所有流量走 WireGuard 加密隧道。


2. RustDesk 架构与自建原理

RustDesk 的中继体系由三个组件构成:

组件 作用 默认流量走向
ID Server (hbbs) 客户端注册与发现,分配虚拟 ID 官方服务器
Relay Server (hbbr) 数据中继,当 P2P 直连失败时中转流量 官方服务器
Key (id_ed25519) 服务端签名密钥,客户端验证服务器身份 官方公钥

自建后,三个组件全部部署在你的云服务器上。客户端通过与你的服务器通信完成注册和连接——数据流不会离开你的基础设施。


3. 实验环境

项目 详情
服务器 腾讯云上海轻量云,2C/2G/40G,BGP 200Mbps
操作系统 Ubuntu 24.04 LTS
RustDesk Server v1.1.15
进程管理 PM2
所需端口 21115-21117 UDP

4. 第一步:安装 PM2

PM2 是 Node.js 生态的进程管理工具,负责守护 hbbshbbr 两个进程——比手写 systemd service 文件更简单。

sudo apt update
sudo apt install npm -y
sudo npm install pm2 -g

5. 第二步:下载 RustDesk Server

cd /tmp
curl -L -o rustdesk-server-linux-amd64.zip \
  https://github.com/rustdesk/rustdesk-server/releases/download/1.1.15/rustdesk-server-linux-amd64.zip
下载加速

如果服务器在国内,GitHub 下载速度慢,有两个选择:

  1. 通过境外 VPS 中转:在 搬瓦工 CN2 GIA VPS 上搭建 HTTP 代理,然后:
    curl -x http://<代理IP>:<端口> -L -o rustdesk-server-linux-amd64.zip https://...
  2. 本地下载 + SFTP 上传:在自己电脑上下载后,用 SFTP 传到服务器上

6. 第三步:解压并安装

unzip rustdesk-server-linux-amd64.zip
sudo mkdir -p /opt/rustdesk
sudo mv /tmp/amd64/hbb* /opt/rustdesk/

两个文件说明:

文件 作用
hbbs RustDesk ID 注册服务器——管理客户端注册、分配虚拟 ID
hbbr RustDesk Relay 中继服务器——当 P2P 直连失败时中转数据

7. 第四步:PM2 启动并守护

pm2 start /opt/rustdesk/hbb*

确认两个进程都在线:

pm2 list

输出参考:

┌────┬───────┬─────────┬──────────┐
│ id │ name  │ status  │ uptime   │
├────┼───────┼─────────┼──────────┤
│ 0  │ hbbr  │ online  │ 4m       │
│ 1  │ hbbs  │ online  │ 4m       │
└────┴───────┴─────────┴──────────┘

设置开机自启:

pm2 startup
# 执行输出的 sudo systemctl enable pm2-root 命令
pm2 save

8. 第五步:生成密钥对

cd /opt/rustdesk
./rustdesk-utils genkeypair

生成两个文件:

  • id_ed25519 — 私钥,放在服务器上,不要泄露
  • id_ed25519.pub — 公钥,填入所有客户端的 Key 字段

密钥的作用是防止中间人攻击:客户端连接时验证服务器持有匹配的私钥,确保连的是你自己的服务器而非冒充者。


9. 第六步:防火墙配置

RustDesk 需要的端口全部是 UDP:

端口 用途
21115 NAT 类型测试
21116 ID 注册与心跳
21117 中继数据传输
sudo firewall-cmd --permanent --add-port=21115-21117/udp
sudo firewall-cmd --reload
Warning

云厂商安全组也要放行——登录控制台,在实例安全组中添加 UDP 21115-21117 入站规则。

如果还没有配置 firewalld,先看 Firewalld 端口转发完全指南 中的安装与基础配置部分。


10. 第七步:客户端配置

下载客户端

RustDesk 客户端 GitHub 发布页

填入自建服务器信息

打开客户端,进入 设置网络ID/中继服务器

配置项
ID 服务器 腾讯云公网 IP
中继服务器 腾讯云公网 IP
API 服务器 留空
Key id_ed25519.pub 的完整内容

配置完成后客户端会重新向你的服务器注册——不再经过官方中继。


11. 迁移与备份

/opt/rustdesk/ 目录打包即完整备份:

tar -czf rustdesk-backup.tar.gz /opt/rustdesk/

迁移到新服务器时:解压到同路径 → pm2 start /opt/rustdesk/hbb* → 新 IP 填入客户端,密钥对不变,客户端无需任何修改即可重连。


12. 进阶方案

自建 RustDesk Server 后,可以进一步缩小攻击面:

  • 不暴露公开端口:通过 WireGuard 内网穿透,所有客户端先连 WireGuard 获取虚拟 IP,RustDesk 配置中的服务器地址填虚拟 IP,firewalld 只放行 51820/UDP
  • 反代加速:在多地域部署节点,用 Realm 端口转发 做就近接入分流

13. 对比:RustDesk 自建 vs TeamViewer vs AnyDesk

维度 RustDesk 自建 TeamViewer AnyDesk
数据经过第三方
中继速度 取决于你的服务器带宽 官方带宽池 官方带宽池
客户端部署成本 每个客户端配置一次 ID/Relay 零配置 零配置
商业授权费用 零(开源 Apache 2.0) 个人免费、商业付费 个人免费、商业付费
移动端体验 可用,不如商业软件成熟 成熟 成熟
传输加密 NaCl 加密 + 自签密钥 256-bit AES TLS 1.2

14. FAQ

Q: 客户端连不上自建服务器?

三步排查:

  1. 防火墙firewall-cmd --list-all 确认 UDP 21115-21117 放行,云厂商安全组也确认放行
  2. PM2 进程pm2 list 确认 hbbshbbr 都是 online
  3. Key 一致性 — 客户端的 Key 字段填的是 id_ed25519.pub 的内容吗?漏填了这个字段客户端会用官方公钥验证,连接会失败

Q: 自建服务器能服务多少台设备?

取决于服务器带宽。RustDesk 用 H.264/H.265 编码传输屏幕流,单路 1080p 桌面大约 2-8 Mbps。以腾讯云轻量 2C2G BGP 200Mbps 带宽为例,承载 20-30 路并发中继连接没有问题。如果是 P2P 直连(两端 NAT 类型允许),流量根本不经过中继,服务器只做注册和心跳——对带宽基本无要求。


15. 推荐阅读