使用 RustDesk 自建远程服务
一、项目背景
RustDesk 是一款开源的远程桌面软件,支持 Windows、Linux、macOS、Android 等多个平台,可以用于远程桌面控制、文件传输等场景
RustDesk 默认使用官方提供的公共服务器。如果希望获得更好的自主控制能力,也可以自己部署 RustDesk 服务端,让所有客户端通过自己的服务器进行设备发现、连接协商和中继通信
本次部署使用一台香港 VPS,通过 Docker 部署 RustDesk Server,实现家中电脑与其他个人设备之间的远程连接
1. 部署环境
| 项目 | 配置 |
|---|---|
| 云服务器 | 香港 VPS |
| 操作系统 | Ubuntu 22.04 |
| CPU | 2 核 |
| 内存 | 4 GB |
| 公网带宽 | 10 Mbps |
| 容器运行环境 | Docker Engine + Docker Compose |
| 远程服务 | RustDesk Server |
本次使用 RustDesk Server 官方 Docker 镜像:
rustdesk/rustdesk-server:latest
二、安装 Docker
首先更新系统软件包:
sudo apt update
sudo apt upgrade -y
安装 Docker 官方仓库所需的依赖:
sudo apt install ca-certificates curl -y
添加 Docker 官方 GPG 密钥:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
添加 Docker 官方软件源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新软件包索引:
sudo apt update
安装 Docker Engine、CLI、Containerd 和 Compose 插件:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
验证 Docker 是否正常运行:
sudo docker run hello-world
如果能够看到 Docker 的欢迎信息,说明 Docker 已经安装成功。
查看 Docker 版本:
sudo docker version
三、部署 RustDesk Server
RustDesk Server 主要由两个核心服务组成:
- hbbs:ID/Rendezvous Server,负责设备 ID 注册、连接协商等工作
- hbbr:Relay Server,在无法建立 P2P 直连时,为两端设备提供中继通信
两项服务都需要正常运行。
1. 创建部署目录
创建 RustDesk 数据目录:
sudo mkdir -p /opt/rustdesk/data
进入部署目录:
cd /opt/rustdesk
2. 创建 Docker Compose 配置文件
创建配置文件:
sudo nano docker-compose.yml
写入以下内容:
services:
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
command: hbbs -r 123.123.123.23:21117
volumes:
- ./data:/root
network_mode: "host"
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- ./data:/root
network_mode: "host"
restart: unless-stopped
这里需要注意:
154.64.244.131是 VPS 的公网 IPv4 地址,需要根据实际服务器地址修改21117是 Relay Server 使用的 TCP 端口./data:/root用于持久化保存 RustDesk 服务端密钥等数据network_mode: host表示容器直接使用宿主机网络restart: unless-stopped表示容器异常退出或服务器重启后,Docker 会自动尝试恢复服务
保存并退出编辑器
3. 启动服务
执行:
sudo docker compose up -d
查看容器运行状态:
sudo docker compose ps
正常情况下,可以看到:
- hbbs:Up
- hbbr:Up
这表示两个容器已经成功启动
4. 查看运行日志
查看 hbbs 日志:
sudo docker logs hbbs
查看 hbbr 日志:
sudo docker logs hbbr
hbbs 正常运行时,可以看到类似以下信息:
Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
Listening on tcp :21116
Listening on udp :21116
Listening on tcp :21115
hbbr 正常运行时,可以看到类似以下信息:
Listening on tcp :21117
Listening on websocket :21119
如果能够看到对应的监听信息,说明服务端已经正常启动
四、获取服务端公钥
RustDesk 使用密钥机制验证客户端连接的服务端身份
服务端启动后,会自动生成密钥文件
查看公钥:
sudo cat /opt/rustdesk/data/id_ed25519.pub
将输出的内容复制保存
例如:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
这个公钥后续需要填写到每一台 RustDesk 客户端中
注意:
id_ed25519.pub是公钥,可以配置到客户端id_ed25519是私钥,必须保存在服务器上,不能泄露- 不要随意删除或重新生成密钥,否则可能需要重新配置客户端
五、配置服务器防火墙
RustDesk Server 需要开放相应的网络端口
本次部署使用以下端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 21115 | TCP | NAT 类型检测等 |
| 21116 | TCP | ID 服务及连接协商 |
| 21116 | UDP | ID 注册及打洞通信 |
| 21117 | TCP | Relay 中继通信 |
1. 配置 Ubuntu UFW
查看当前防火墙状态:
sudo ufw status
开放 RustDesk 所需端口:
sudo ufw allow 21115/tcp
sudo ufw allow 21116/tcp
sudo ufw allow 21116/udp
sudo ufw allow 21117/tcp
再次查看规则:
sudo ufw status
确认以上规则已经添加
2. 配置云服务器安全组
除了 Ubuntu 系统内部的防火墙,还需要在云服务商控制台配置安全组规则
添加以下入站规则:
| 端口 | 协议 | 来源 |
|---|---|---|
| 21115 | TCP | 0.0.0.0/0 |
| 21116 | TCP | 0.0.0.0/0 |
| 21116 | UDP | 0.0.0.0/0 |
| 21117 | TCP | 0.0.0.0/0 |
这里的 0.0.0.0/0 表示允许来自任意 IPv4 地址的连接
如果服务器还启用了 IPv6,并且需要通过 IPv6 访问,也需要根据实际情况配置相应的 IPv6 规则
注意:UFW 和云服务器安全组是两套独立的防火墙规则,必须同时满足
六、配置 RustDesk 客户端
服务端部署完成后,就可以配置 Windows、Ubuntu 等设备上的 RustDesk 客户端
所有需要加入自建服务器的设备,都需要进行相同的网络配置
1. 打开网络设置
启动 RustDesk 客户端,进入:
设置 → 网络 → ID/中继服务器
根据实际版本,菜单名称可能略有不同
填写以下内容:
| 配置项 | 填写内容 |
|---|---|
| ID Server | 154.64.244.131 |
| Relay Server | 154.64.244.131 |
| API Server | 留空 |
| Key | 服务端公钥 |
其中,Key 填写第四节获取的 id_ed25519.pub 文件内容
保存设置。
2. 配置无人值守访问
如果希望在无人操作的情况下远程连接某台电脑,需要在被控端设置永久访问密码
进入 RustDesk 安全设置,找到无人值守访问相关选项,设置访问密码
建议:
- 使用独立且足够复杂的密码
- 不要将访问密码与服务端公钥混淆
- 不要将访问密码分享给不可信任的人
- 根据实际需要限制访问权限
服务端公钥只用于验证自建服务器身份,并不代表任何人都可以直接控制你的电脑
七、RustDesk 的连接原理
RustDesk 的远程连接主要涉及 ID Server、Relay Server 和 P2P 直连。
简单理解:
RustDesk 自建服务器
┌───────────────────┐
│ │
│ hbbs │
│ ID / 协调服务 │
│ │
│ hbbr │
│ Relay 中继 │
│ │
└───────────────────┘
│
┌────────┴────────┐
│ │
控制端 被控端
Windows Windows
/ Linux / Linux
实际连接时,大致分为以下几种情况:
情况一:P2P 直连
两台设备通过 hbbs 完成设备发现和连接协商,随后尝试直接建立网络连接
如果直连成功,远程桌面数据通常不需要经过 VPS 中继
情况二:Relay 中继
如果两台设备由于 NAT、防火墙或网络环境限制,无法建立 P2P 直连,则可以通过 hbbr 转发数据
此时 VPS 的带宽就会成为实际远程连接速度的限制因素之一
本次 VPS 带宽为 10 Mbps,理论上单方向传输速率上限约为 1.25 MB/s,实际速度还会受到网络开销、线路质量和服务器负载影响
因此,能够 P2P 直连时,通常可以减少 VPS 的带宽消耗
八、日常维护
1. 查看容器状态
sudo docker compose ps
2. 查看 hbbs 日志
sudo docker logs -f hbbs
3. 查看 hbbr 日志
sudo docker logs -f hbbr
4. 重启服务
cd /opt/rustdesk
sudo docker compose restart
5. 停止服务
cd /opt/rustdesk
sudo docker compose down
6. 更新镜像
cd /opt/rustdesk
sudo docker compose pull
sudo docker compose up -d
更新前建议备份 /opt/rustdesk/data,尤其是服务端密钥文件
九、部署总结
本次使用一台 Ubuntu 22.04 香港 VPS,通过 Docker Compose 部署了 RustDesk Server
整个部署过程主要包括:
- 安装 Docker Engine 和 Compose
- 创建 RustDesk 数据目录
- 编写 Docker Compose 配置文件
- 启动 hbbs 和 hbbr 两项服务
- 获取服务端公钥
- 配置 Ubuntu UFW 和云服务器安全组
- 在 RustDesk 客户端中配置 ID Server、Relay Server 和公钥
相比依赖公共服务器,自建 RustDesk 服务端可以让设备发现和中继服务由自己管理,也便于长期维护个人远程桌面环境
需要注意的是,自建服务器并不意味着远程连接完全不经过第三方网络,也不意味着设备本身自动获得安全保障。客户端访问密码、操作系统账户、网络安全和服务器密钥都需要妥善管理
对于个人使用场景,一台配置不高的 VPS 就可以承担 RustDesk 服务端的基础运行需求,最关键的是,它完全免费
