RustDesk 自建远程控制服务器部署全记录(含错误排查与最终方案)

复制代码
目标:在阿里云轻量应用服务器上自建 RustDesk 服务端,实现免费、稳定、私密的跨地域远程桌面控制。  

服务器信息:  
地域:西南1(成都)  
配置:2核2G / 40G ESSD / Ubuntu 22.04 LTS  
公网 IP:`xxx.xxx.xxx.xxx`  
登录用户:`admin`(通过 `sudo` 提权)  

📦 第一步:服务器选购与环境准备

复制代码
1.1 服务器选型

- 实例规格:阿里云轻量应用服务器 2核2G,45元/月。RustDesk 服务端资源占用极低,此配置绰绰有余。
- 地域选择:选 西南1(成都),物理距离最近,家中台式机到服务器延迟可低至 **3-8ms**,远程操作如内网般丝滑。
- 系统镜像:选择 Ubuntu 22.04 LTS(纯净系统镜像),生态成熟、教程丰富,便于排查问题。

1.2 防火墙端口放行(关键!)
在阿里云轻量应用服务器控制台 → 防火墙 页面,添加以下规则:

| 协议 | 端口范围 | 来源 IP | 备注 |
| :--- | :--- | :--- | :--- |
| TCP | 21115 | 0.0.0.0/0 | HBBS NAT 测试 |
| TCP | 21116 | 0.0.0.0/0 | HBBS TCP 打洞 |
| UDP | 21116 | 0.0.0.0/0 | 核心端口:ID 注册与心跳 |
| TCP | 21117 | 0.0.0.0/0 | HBBR 中继数据中转 |
| TCP | 21118 | 0.0.0.0/0 | Web 客户端支持(可选) |
| TCP | 21119 | 0.0.0.0/0 | Web 客户端支持(可选) |

> 错误记录:初次配置时遗漏了 UDP 21116,导致后续服务无法正常通信。

❌ 第二步:Docker 部署尝试及踩坑记录

2.1 安装 Docker 与 docker-compose

bash 复制代码
# 更新软件包列表
sudo apt update

# 安装 Docker
sudo apt install docker.io -y

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 将当前用户加入 docker 组(免 sudo 执行 docker 命令)
sudo usermod -aG docker $USER
newgrp docker

# 安装 docker-compose
sudo apt install docker-compose -y

2.2 创建 docker-compose.yml

bash 复制代码
mkdir -p ~/rustdesk
cd ~/rustdesk
nano docker-compose.yml

初始配置内容(传统两容器模式):

bash 复制代码
version: '3'
services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r xxx.xxx.xxx.xxx: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

2.3 错误 1:镜像拉取超时 / 找不到镜像

bash 复制代码
docker-compose up -d

错误输出

bash 复制代码
ERROR: failed to resolve reference "docker.io/rustdesk/rustdesk-server:latest": i/o timeout

原因:国内服务器直接访问 Docker Hub 极不稳定,连接超时。

尝试解决

  • 配置国内镜像加速器,编辑 /etc/docker/daemon.json
bash 复制代码
{
  "registry-mirrors": [
    "https://docker.xuanyuan.me",
    "https://hub-mirror.c.163.com"
  ]
}
  • 重启 Docker 服务:
bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

结果:仍然超时或报 TLS handshake timeout,部分镜像源已失效。


2.4 错误 2:更换加速器后出现 failed size validation

bash 复制代码
docker-compose up -d

错误输出

bash 复制代码
ERROR: failed commit on ref "...": failed size validation: 53854 != 894: failed precondition

原因:从国内不稳定的镜像源下载的镜像层文件损坏或不全,Docker 本地缓存了错误数据。

尝试解决

bash 复制代码
docker system prune -a
docker-compose up -d

结果:无效,仍报同样错误。

进一步处理:彻底清除 Docker 存储目录:

bash 复制代码
sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo systemctl start docker

并重新配置为阿里云官方镜像加速器(需登录阿里云控制台获取专属地址):

bash 复制代码
{
  "registry-mirrors": ["https://11x0715p.mirror.aliyuncs.com"]
}

2.5 错误 3:镜像拉取成功但容器反复重启,提示需要许可证

现象

  • 镜像成功拉取,容器启动后立即退出,状态为 Restarting

  • 查看日志:

bash 复制代码
docker logs hbbs

错误输出

bash 复制代码
[ERROR hbbs::lic] Registered email required (-m option). Please pay and register on https://rustdesk.com/server.

原因 :国内网络缓存污染下,latest 标签被指向了一个需要付费许可证的专业版镜像,而非免费开源的社区版。

尝试解决

  • 更换镜像标签为特定版本号(如 1.1.91.1.14),均报 not found

  • 更换为官方推荐的 rustdesk-server-s6:latest 一体化镜像,同样 not found

结论 :Docker 路线在国内网络环境下极不稳定,决定放弃 Docker,转向直接运行二进制文件


✅ 第三步:最终正确方案------直接运行官方二进制文件

3.1 下载并解压服务端程序

bash 复制代码
# 创建独立目录
mkdir -p ~/rustdesk-bin && cd ~/rustdesk-bin

# 从 GitHub 下载最新版 Linux 服务端(支持断点续传)
wget https://github.com/rustdesk/rustdesk-server/releases/latest/download/rustdesk-server-linux-amd64.zip

# 安装解压工具
sudo apt install unzip -y

# 解压
unzip rustdesk-server-linux-amd64.zip

# 进入程序目录
cd amd64
chmod +x hbbs hbbr

错误记录

  • wget 下载过程中因网络波动超时,但 wget 自动重试并断点续传,最终成功。

  • 系统未预装 unzip,需手动安装。

3.2 启动服务(后台运行)

bash 复制代码
# 启动 ID/信令服务器 (hbbs),并指定中继服务器地址
nohup ./hbbs -r xxx.xxx.xxx.xxxx:21117 > hbbs.log 2>&1 &

# 启动中继服务器 (hbbr)
nohup ./hbbr > hbbr.log 2>&1 &

服务启动后,可用 ps aux | grep -E "hbbs|hbbr" 验证进程是否存在。

3.3 获取连接密钥 (Key)

bash 复制代码
cat id_ed25519.pub

输出

bash 复制代码
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=

🖥️ 第四步:客户端下载与配置

4.1 下载 RustDesk 客户端

笔记本电脑家中台式机上分别安装 RustDesk 客户端。

官方下载渠道

4.2 配置自建服务器

  1. 打开 RustDesk 客户端,点击 ID 旁边的 ⋮ 菜单网络

  2. ID 服务器 :填入 XXX.XXX.XXX.XXX

  3. Key :粘贴 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=

  4. 点击确定保存。

配置完成后,两台设备即可通过 RustDesk 生成的 ID 进行安全、高速的远程连接。


🔧 第五步:后续优化(systemd 开机自启)

当前使用 nohup 运行,会有服务器重启后服务不会自动恢复的问题。可以创建 systemd 服务实现开机自启和异常自动重启。

5.1 创建 hbbs 服务文件

bash 复制代码
sudo nano /etc/systemd/system/rustdesk-hbbs.service

粘贴以下内容:

bash 复制代码
[Unit]
Description=RustDesk HBBS (ID Server)
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/admin/rustdesk-bin/amd64
ExecStart=/home/admin/rustdesk-bin/amd64/hbbs -r xxx.xxx.xxx.xxx:21117
Restart=on-failure
User=admin

[Install]
WantedBy=multi-user.target

5.2 创建 hbbr 服务文件

bash 复制代码
sudo nano /etc/systemd/system/rustdesk-hbbr.service

粘贴以下内容:

bash 复制代码
[Unit]
Description=RustDesk HBBR (Relay Server)
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/admin/rustdesk-bin/amd64
ExecStart=/home/admin/rustdesk-bin/amd64/hbbr
Restart=on-failure
User=admin

[Install]
WantedBy=multi-user.target

5.3 启用并启动服务

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable rustdesk-hbbs rustdesk-hbbr
sudo systemctl start rustdesk-hbbs rustdesk-hbbr

5.4 管理命令

  • 查看状态:sudo systemctl status rustdesk-hbbs

  • 停止服务:sudo systemctl stop rustdesk-hbbs

  • 查看日志:sudo journalctl -u rustdesk-hbbs -f


📊 错误总结速查表

错误现象 原因 最终解决方案
i/o timeout 拉取镜像失败 国内网络无法稳定访问 Docker Hub 改用阿里云官方镜像加速器 + 二进制部署
failed size validation 镜像层文件下载损坏 彻底清除 Docker 存储目录,重配镜像源
not found 指定版本号镜像 标签已从官方仓库移除 使用最新 latest 或直接从 GitHub 下载二进制
Registered email required 拉取到需要付费许可证的专业版镜像 放弃 Docker,改用免费社区版二进制文件
wget 下载超时 GitHub 资产服务器不稳定 依赖 wget 自动断点续传
unzip: command not found 系统未预装解压工具 sudo apt install unzip -y

💎 总结

  • 国内网络环境下,通过 Docker 部署 RustDesk 服务端极易因镜像拉取、缓存污染等问题失败,不建议作为首选方案。

  • 最稳定、最直接的方式是直接从 GitHub 下载官方编译好的二进制文件手动运行。

  • 确保防火墙开放 UDP 21116 端口,这是客户端注册与心跳通信的核心通道。

  • 使用 systemd 管理服务,保障服务器重启后自动恢复。

相关推荐
小宋0012 小时前
Ubuntu Terminator(多开并行终端工具)
linux·运维·ubuntu
Wyawsl2 小时前
keepalived高可用与负载均衡笔记
运维·笔记·负载均衡
小尔¥2 小时前
keepalived高可用与负载均衡
linux·运维·负载均衡
TechWayfarer2 小时前
当IP来自太空:卫星互联网时代的IP归属地查询挑战与落地实践
服务器·网络·tcp/ip
wuyoula2 小时前
Python IP服务器防火墙源码解析与应用——网站安全防护策略探讨
服务器·tcp/ip·安全
残 风2 小时前
linux(Xshell、Xterm)如何搭建隧道间接访问目标服务网站教程
linux·运维·php·信息与通信
x***r1512 小时前
WinDynamicDesktop动态壁纸软件安装教程:动态壁纸+地理位置配置(64位)
linux·运维·服务器
青花瓷2 小时前
windows下如何移动docke从C盘到F盘
运维·服务器
James5062 小时前
OpenClaw部署之内网服务器
服务器·人工智能·openclaw