RustDesk Server 自建完整教程:脱离官方中继,自托管远程桌面
1. 为什么要自建 RustDesk Server?
远程桌面是一个高度敏感的场景——你的鼠标、键盘、剪贴板、文件传输全部经过中继服务器。如果中继服务器在你控制之外,意味着数据传输经过了第三方。
RustDesk 默认提供免费的官方 ID/Relay 服务器,这对偶尔使用的个人用户够用。但在以下场景中,官方中继有明确短板:
- 隐私合规:公司客户数据、财务系统不允许经过第三方中转
- 连接稳定性:官方服务器在境外,国内晚高峰延迟高、断连频繁
- 速度上限:官方中继带宽有限,传大文件速度受限
- 墙内不可用:官方中继被 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 生态的进程管理工具,负责守护 hbbs 和 hbbr 两个进程——比手写 systemd service 文件更简单。
sudo apt update
sudo apt install npm -y
sudo npm install pm2 -g5. 第二步:下载 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 下载速度慢,有两个选择:
- 通过境外 VPS 中转:在 搬瓦工 CN2 GIA VPS 上搭建 HTTP 代理,然后:
curl -x http://<代理IP>:<端口> -L -o rustdesk-server-linux-amd64.zip https://... - 本地下载 + 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 save8. 第五步:生成密钥对
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云厂商安全组也要放行——登录控制台,在实例安全组中添加 UDP 21115-21117 入站规则。
如果还没有配置 firewalld,先看 Firewalld 端口转发完全指南 中的安装与基础配置部分。
10. 第七步:客户端配置
下载客户端
填入自建服务器信息
打开客户端,进入 设置 → 网络 → 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: 客户端连不上自建服务器?
三步排查:
- 防火墙 —
firewall-cmd --list-all确认 UDP 21115-21117 放行,云厂商安全组也确认放行 - PM2 进程 —
pm2 list确认hbbs和hbbr都是online - Key 一致性 — 客户端的 Key 字段填的是
id_ed25519.pub的内容吗?漏填了这个字段客户端会用官方公钥验证,连接会失败
Q: 自建服务器能服务多少台设备?
取决于服务器带宽。RustDesk 用 H.264/H.265 编码传输屏幕流,单路 1080p 桌面大约 2-8 Mbps。以腾讯云轻量 2C2G BGP 200Mbps 带宽为例,承载 20-30 路并发中继连接没有问题。如果是 P2P 直连(两端 NAT 类型允许),流量根本不经过中继,服务器只做注册和心跳——对带宽基本无要求。
15. 推荐阅读
- WireGuard 安装与组网教程 — 先组网再连 RustDesk,彻底关闭公开端口
- Firewalld 端口转发完全指南 — 防火墙基础
- Realm 端口转发教程 — 多地域服务器就近接入分流
- Linux 服务器初始化指南 — 拿到新机器先跑一遍
- 服务器选购:腾讯云轻量云 · 阿里云 99 计划 · 搬瓦工限量优惠