RustDesk 自建部署实战:阿里云 ECS 上手动部署 RustDesk Server OSS

RustDesk 自建部署实战:阿里云 ECS 上手动部署 RustDesk Server OSS
Mr.L最近为了让远程控制链路更稳定,也为了摆脱对公共中继服务的依赖,我把 RustDesk Server OSS 单独部署到了自己的阿里云 ECS 上。
这篇文章按实际操作过程,完整记录一下 RustDesk 服务端手动部署 的步骤。整套方案不依赖 Docker,也不使用 Pro 安装脚本,更适合自己长期维护和排查问题。
一、这篇文章适合什么场景
如果你符合下面这些情况,这篇文章应该会比较有参考价值:
- 手里有一台公网 Linux 服务器
- 想搭建自己的 RustDesk 服务端
- 不想依赖官方公共服务器
- 希望通过自己的域名接入客户端
- 更偏好“原生二进制 + systemd”的部署方式
本文采用的是 RustDesk Server OSS 原生二进制手动部署。
二、整体架构
最终架构比较简单:
1 | RustDesk 客户端 |
其中:
hbbs:负责 ID / rendezvoushbbr:负责 relay
三、为什么选择手动部署
我一开始尝试过其他方式,比如:
- Docker 部署
- 安装脚本部署
但在实际使用里会遇到一些问题:
- Docker Hub 拉取镜像不一定稳定
- 某些脚本容易走到 Pro 安装路径
- 自动化安装虽然方便,但不够透明
- 后续排障时,原生部署方式通常更直接
所以最后我还是选择了最朴素的一套方案:
直接下载 RustDesk Server OSS 的 Linux 原生二进制,手动写 systemd 服务。
它的优点也很明显:
- 依赖少
- 结构清晰
- 出问题时更容易排查
- 适合整理成自己的长期维护文档
四、前置准备
1. 配置域名
我给 RustDesk 分配的域名是:
1 | rustdesk.YOUR_DOMAIN |
DNS 解析到阿里云 ECS 的公网 IP:
1 | rustdesk.YOUR_DOMAIN -> YOUR_SERVER_IP |
2. 放行安全组和防火墙
RustDesk Server OSS 至少需要放行这些端口:
21115/tcp21116/tcp21117/tcp21116/udp
如果你还要使用 Web Client,可以额外放行:
21118/tcp21119/tcp
3. 系统环境
本文记录时的环境:
- Ubuntu 24.04
- x86_64
- 阿里云 ECS
五、获取 RustDesk Server OSS 二进制
我最终使用的是解压后的原生二进制目录,包含:
1 | hbbs |
例如目录结构:
1 | ~/tools/restdesk/ |
六、安装到正式目录
先创建正式安装目录:
1 | sudo mkdir -p /opt/rustdesk-server |
复制可执行文件:
1 | cd ~/tools/restdesk/amd64 |
检查:
1 | ls -l /opt/rustdesk-server |
七、创建专用用户和数据目录
为了避免直接使用 root 运行服务,可以单独创建一个系统用户:
1 | sudo useradd --system --home /opt/rustdesk-server --shell /usr/sbin/nologin rustdesk 2>/dev/null || true |
再创建数据目录并调整权限:
1 | sudo mkdir -p /opt/rustdesk-server/data |
八、配置 hbbr 服务
编辑 systemd 文件:
1 | sudo nano /etc/systemd/system/hbbr.service |
写入:
1 | [Unit] |
九、配置 hbbs 服务
编辑:
1 | sudo nano /etc/systemd/system/hbbs.service |
写入:
1 | [Unit] |
这里的配置思路比较直接:
hbbr先启动hbbs依赖hbbr- 两个服务都在
/opt/rustdesk-server下运行
十、启动服务
重载 systemd:
1 | sudo systemctl daemon-reload |
启动 relay 服务:
1 | sudo systemctl enable --now hbbr |
启动 ID 服务:
1 | sudo systemctl enable --now hbbs |
查看状态:
1 | sudo systemctl status hbbr --no-pager |
理想状态应该能看到:
1 | active (running) |
十一、检查端口监听情况
执行:
1 | ss -lntup | grep -E '21115|21116|21117|21118|21119' |
至少应看到这些核心端口:
21115/tcp21116/tcp21117/tcp21116/udp
十二、生成并获取服务端公钥
hbbs 首次正常启动后,会自动生成密钥文件。
查找方式:
1 | sudo find /opt/rustdesk-server -name "id_ed25519.pub" -o -name "id_ed25519" |
我这里最终得到的公钥内容如下:
1 | YOUR_RUSTDESK_PUBLIC_KEY |
查看命令:
1 | cat /opt/rustdesk-server/id_ed25519.pub |
这里要注意:
id_ed25519.pub是公钥,客户端需要填写它id_ed25519是私钥,不要泄露
十三、客户端配置方法
在 RustDesk 客户端中,进入网络设置后,填写:
- ID Server:
rustdesk.YOUR_DOMAIN - Key:
YOUR_RUSTDESK_PUBLIC_KEY - Relay Server:可以先留空,如果连接不稳定再填
rustdesk.YOUR_DOMAIN - API Server:OSS 版本通常不需要填写
十四、Windows 端口连通性测试
如果在 Windows 上测试端口,由于默认没有 nc,可以直接使用 PowerShell:
1 | Test-NetConnection rustdesk.YOUR_DOMAIN -Port 21115 |
简写也可以:
1 | tnc rustdesk.YOUR_DOMAIN -Port 21115 |
如果输出中看到:
1 | TcpTestSucceeded : True |
就说明从本地到服务器的 TCP 连通性没有问题。
十五、我当前的连通性结果
我实际测试的结果是:
21115/tcp:通21116/tcp:通21117/tcp:通
这基本可以说明:
- 服务已经对公网开放
- 阿里云安全组规则正确
- 服务器本机监听正常
- 域名解析没有问题
十六、常见问题
1. Windows 里没有 nc
PowerShell 默认没有 nc,报错通常类似:
1 | nc : The term 'nc' is not recognized ... |
这种情况下,直接改用 Test-NetConnection 或 tnc 就可以。
2. 服务启动了,但找不到 id_ed25519.pub
建议优先检查:
1 | journalctl -u hbbs -n 100 --no-pager |
很多时候不是“没生成”,而是服务没有在正确的工作目录下运行。
3. 客户端配置了域名和 Key 仍然连接不上
可以按下面顺序排查:
- DNS 是否解析到正确公网 IP
- 安全组是否放行
21115/21116/21117 - 本机防火墙是否放行
hbbs/hbbr是否正在运行- 客户端填写的 Key 是否完整正确
4. Relay Server 要不要填
一般可以先不填。
如果后续出现中继不稳定、点对点穿透效果不好,再明确填写:
1 | rustdesk.YOUR_DOMAIN |
十七、总结
这套部署方式的优点比较明确:
- 不依赖 Docker
- 不依赖复杂安装脚本
- 可控性高
- systemd 管理清晰
- 适合长期维护和问题排查
最终只要保证下面几点:
- 域名解析正确
- 端口放行正确
hbbs/hbbr正常运行- 客户端填写的
ID Server和Key无误
基本就可以把自己的 RustDesk 服务稳定跑起来。
十八、关键配置汇总
安装目录
1 | /opt/rustdesk-server |
systemd 服务文件
/etc/systemd/system/hbbs.service/etc/systemd/system/hbbr.service
公网域名
1 | rustdesk.YOUR_DOMAIN |
客户端公钥
1 | YOUR_RUSTDESK_PUBLIC_KEY |
关键端口
21115/tcp21116/tcp21117/tcp21116/udp
十九、完整命令清单
1 | sudo mkdir -p /opt/rustdesk-server |
如果后续我继续折腾 RustDesk 的 Web Client、反向代理或多节点中继,也会在这篇文章基础上继续补充。