首页 域名注册 帮助中心 新闻中心 关于我们

如何在云服务器上部署 RustDesk Server?Ubuntu 24.04 + Docker 完整图文教程

作者:李工 · LuckVM 运维工程师(8 年 Linux 运维经验,主导过 500+ 台海外节点的部署与监控) 发布时间:2026-08-22 17:50 更新时间:2026-08-30 10:20(补充:Web 控制台开启方法、TLS 配置、常见报错排查) 测试环境:LuckVM 香港 CN2 GIA 节点 · 2 核 2G · Ubuntu 24.04 LTS 官方镜像 · Docker 27.1.1 · RustDesk Server 1.1.12 预计阅读时间:15 分钟(跟着操作 25 分钟可完成部署)


写在前面:为什么我建议你自建 RustDesk?

如果你做过远程技术支持、管过十台以上的办公电脑,大概率踩过 TeamViewer 的"商业用途检测"红线——用着用着突然被限速 5 分钟一次、或者直接提示"已识别为商业环境,请购买授权"。ToDesk、向日葵这些国产方案也类似,免费版要么有广告、要么限分辨率、要么带宽被压到没法用。

RustDesk 最大的好处就一个:代码开源、完全自建、设备数量不限、带宽由你自己的服务器决定

我在 LuckVM 这边帮客户搭了不下 30 套 RustDesk Server,最小的个人用户 1 核 1G 香港节点跑半年没出过问题,最大的有 200+ 台终端的外贸公司用 4 核 8G 新加坡节点扛中继流量。这篇教程我把踩过的坑都整理进去了——尤其是防火墙两层(云平台安全组 + 系统 UFW)都要开、Key 一定要备份、UDP 端口不能忘这三件事,80% 的人第一次搭都会栽。

? 本文基于 LuckVM 香港节点实测,但步骤同样适用于任何 Ubuntu 24.04 的云服务器。文中标注了「LuckVM 专属说明」的地方,是只有 LuckVM 用户才需要特别注意的操作点。

参考资料:RustDesk 官方文档 · Self-hostDocker 官方安装文档



一、部署前你需要准备什么

1.1 服务器最低配置

项目 个人/5 台以内 小型团队/50 台以内 企业/200 台以上
CPU 1 核 2 核 4 核及以上
内存 1 GB 2 GB 4 GB 及以上
硬盘 10 GB SSD 20 GB SSD 40 GB SSD
公网 IP 1 个 IPv4 1 个 IPv4 1 个 IPv4 + 1 个 IPv6(可选)
带宽 3 Mbps 10 Mbps 50 Mbps+
月流量 500 GB 2 TB 5 TB+
系统 Ubuntu 22.04 / 24.04 Ubuntu 22.04 / 24.04 Ubuntu 22.04 / 24.04

⚠️ 别被"1核1G够用"骗了——前提是两台设备之间能走 P2P。如果你管的是公司不同分公司的电脑,大概率两边都是企业内网/防火墙严格 NAT,P2P 打洞成功率不高,全部流量会走服务器中继。这种情况带宽比 CPU 重要,建议起步 2 核 4G + 10M 带宽。

1.2 选什么节点最合适?

核心原则:RustDesk 中继的延迟 = 两端用户到服务器的延迟之和。

  • 如果双方都在国内:选香港 CN2 GIA 节点(双向 CN2,国内三网访问都稳);
  • 如果一方在国内、一方在东南亚:选新加坡节点;
  • 如果一方在国内、一方在日本/韩国:选日本韩国节点;
  • 如果都是海外用户:选用户所在地就近节点。

? LuckVM 的香港 CN2 GIA 节点国内电信/联通/移动平均延迟 30–60ms,晚高峰丢包 < 1%,用来跑 RustDesk 中继体感几乎和 P2P 一样流畅。查看香港节点配置与价格 →

1.3 你需要提前会的操作

  • 会用 SSH 工具(Windows 推荐 Xshell / MobaXterm,Mac 直接用终端);
  • 会基础的 Linux 命令(cd、mkdir、nano 等,不会也没关系,跟着复制粘贴就行);
  • 有一个域名(可选,但强烈建议有,后续换服务器不用逐台改客户端)。

二、RustDesk Server 到底是个啥?(1 分钟讲清楚)

很多人第一次接触 RustDesk 自建,以为只要装一个服务就行——其实是两个:

服务名 作用 占用端口
hbbs ID 注册服务器:负责设备发现、ID 分配、NAT 类型检测、连接协调 21115 TCP、21116 TCP/UDP
hbbr Relay 中继服务器:P2P 打洞失败时,由它转发桌面数据 21117 TCP

连接流程是这样的:

电脑 A  ──►  hbbs(告诉服务器"我在线,ID 是xxx")
               │
               ▼
          尝试 P2P 直连 ✅ → 直接连接,不消耗服务器带宽
               │
               ▼ 失败
               hbbr(中继转发) ← 走服务器带宽和流量
               │
               ▼
电脑 B

所以两个服务都必须启动,缺一不可。 只开 hbbs 不开 hbbr = 只能 P2P 成功时连上,成功率低得离谱。


三、第 1 步:SSH 登录服务器并更新系统

3.1 登录

打开你的 SSH 客户端,用 root 登录:

ssh root@你的服务器公网IP

比如你的 IP 是 103.xxx.xxx.100,就输入:

ssh root@103.xxx.xxx.100

第一次登录会问你要不要保存指纹,输入 yes 回车,然后输入密码(输入时不显示,输完直接回车)。

3.2 更新系统软件包

登录进来先做系统更新,避免后续安装 Docker 时缺依赖:

apt update && apt upgrade -y

? LuckVM 专属说明

LuckVM 提供的 Ubuntu 24.04 镜像默认是最小化安装,没有预装 Docker、没有默认开启 UFW(防火墙),你可以干净地从头配置。这一点反而比某些预装一堆东西的镜像省心。

如果你的服务器是从其他平台迁过来的,建议先 apt list --installed | grep docker 检查有没有旧版 Docker,有的话先 apt remove docker.io docker-compose -y 清理掉。


四、第 2 步:安装 Docker 和 Docker Compose

RustDesk 官方推荐用 Docker 部署,比直接编译二进制省事太多,升级也方便。

4.1 一键安装 Docker

curl -fsSL https://get.docker.com | sh

这是 Docker 官方提供的一键脚本,会自动添加源、安装最新稳定版。

4.2 验证安装

安装完成后,检查版本:

docker --version

正常会输出类似:Docker version 27.1.1, build 6312585

再检查 Docker Compose:

docker compose version

正常会输出类似:Docker Compose version v2.29.1

? 注意:现在 Docker 官方包已经自带 Compose 了,用的是 docker compose(中间空格),不是老的 docker-compose(中间短横线)。网上很多老教程写的是 docker-compose,那是旧版用法,本文统一用新版命令。

4.3 设置 Docker 开机自启

systemctl enable docker
systemctl start docker

五、第 3 步:创建 RustDesk 数据目录和配置文件

5.1 建目录

我习惯把所有自建服务都放在 /opt/ 下,方便统一管理:

mkdir -p /opt/rustdesk/data
cd /opt/rustdesk

最终目录结构是这样的:

/opt/rustdesk/
├── docker-compose.yml   ← 等下创建这个
└── data/                ← RustDesk 密钥和数据都在这里
    ├── id_ed25519       ← 私钥(绝对不能泄露)
    └── id_ed25519.pub   ← 公钥(客户端配置要用)

⚠️ 超级重要提醒:data 目录一定要备份!

这个目录里存的是你的 RustDesk Server 密钥。如果不小心删了、或者换服务器时没迁移过去,重新部署后会生成新密钥——你所有已经配置好的客户端都会连不上,得一台一台重新填 Key。

我见过最少三个客户因为手滑 rm -rf /opt/rustdesk 然后连夜加班重配 50 台电脑的。

5.2 写 docker-compose.yml

用 nano 编辑器创建配置文件:

nano /opt/rustdesk/docker-compose.yml

把下面的内容完整复制进去:

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs
    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

保存退出:按 Ctrl + O → 回车确认文件名 → 按 Ctrl + X 退出。

? 为什么用 network_mode: "host"

这个配置让 Docker 容器直接使用宿主机的网络栈,不需要手动写端口映射(ports)。好处是简单、性能好,坏处是容器和宿主机共享端口。对于 RustDesk 这种服务,host 模式是最省事的选择。

如果你有安全顾虑想改用 bridge 模式+端口映射,可以在文末的进阶部分找到对应配置。


六、第 4 步:启动 RustDesk Server

6.1 拉取镜像并启动

cd /opt/rustdesk
docker compose pull
docker compose up -d

pull 是拉取官方镜像,up -d 是后台启动。

6.2 确认是否跑起来了

docker compose ps

正常应该看到两个容器,状态都是 Up

NAME     IMAGE                              COMMAND     SERVICE   CREATED        STATUS          PORTS
hbbs     rustdesk/rustdesk-server:latest   "hbbs"      hbbs      5 seconds ago  Up 3 seconds
hbbr     rustdesk/rustdesk-server:latest   "hbbr"      hbbr      5 seconds ago  Up 4 seconds

如果两个都 Up 了,说明服务启动成功。

6.3 查看日志(可选,排障用)

# 查看 hbbs 日志
docker logs hbbs

# 查看 hbbr 日志
docker logs hbbr

# 实时查看最新日志(Ctrl+C 退出)
docker logs -f hbbs

七、第 5 步:开放端口(最容易踩坑的一步)

7.1 哪些端口需要开?

端口 协议 作用 是否必须
21115 TCP NAT 类型检测 ✅ 必须
21116 TCP ID 注册 / TCP 连接 ✅ 必须
21116 UDP 心跳 / 打洞 / ID 服务 ✅ 必须(很多人漏开这个)
21117 TCP Relay 中继转发 ✅ 必须
21118 TCP Web 客户端(网页版) ⭕ 可选
21119 TCP Web 客户端中继 ⭕ 可选

7.2 两层防火墙都要开!

很多教程只教你开系统防火墙,但云服务器通常有两层防火墙

互联网
  ↓
☁️ 云平台安全组(LuckVM 控制台里配)
  ↓
? 系统防火墙(Ubuntu 的 UFW / firewalld)
  ↓
? Docker
  ↓
?️ RustDesk 服务

任何一层没开,客户端都连不上。 80% 的连接失败问题都出在这。

第一层:LuckVM 控制台安全组

  1. 登录 LuckVM 控制台
  2. 找到你的云服务器 → 点击「管理」
  3. 进入「安全组」或「防火墙」菜单
  4. 添加入站规则:
    • 协议:TCP,端口:21115-21117,源:0.0.0.0/0
    • 协议:UDP,端口:21116,源:0.0.0.0/0
  5. 保存生效

? LuckVM 专属说明

LuckVM 默认的安全组策略是"全部放行"还是"只放行 22/80/443",取决于你创建服务器时选的模板。如果你不确定,直接去控制台看一眼,别想当然。我至少有两个客户在这里卡了一天——以为默认全开,结果默认只开了 22 端口。

第二层:Ubuntu 系统 UFW 防火墙

如果你开了 UFW(LuckVM 默认是关的,如果你手动开了才需要配置),执行:

ufw allow 21115/tcp
ufw allow 21116/tcp
ufw allow 21116/udp
ufw allow 21117/tcp
ufw reload
ufw status

? 怎么确认 UFW 开没开?执行 ufw status,如果显示 Status: inactive 就是没开,不用配;如果是 Status: active 才需要开端口。

7.3 验证端口通不通

在服务器上执行:

ss -lntup | grep -E '2111[5-7]'

正常能看到 hbbs 和 hbbr 在监听对应端口:

LISTEN 0  128  0.0.0.0:21115  0.0.0.0:*  users:(("hbbs",pid=12345,fd=8))
LISTEN 0  128  0.0.0.0:21116  0.0.0.0:*  users:(("hbbs",pid=12345,fd=9))
LISTEN 0  128  0.0.0.0:21117  0.0.0.0:*  users:(("hbbr",pid=12346,fd=8))
UNCONN 0  0    0.0.0.0:21116  0.0.0.0:*  users:(("hbbs",pid=12345,fd=10))

TCP 端口可以用站长工具的 端口扫描 从外面测,UDP 端口只能靠客户端实际连接来验证。


八、第 6 步:获取服务器公钥(客户端配置要用)

RustDesk 客户端需要一个 Key 来确认你连的是自己的服务器,而不是别人的中继(防止中间人攻击)。

执行下面的命令获取公钥:

cat /opt/rustdesk/data/id_ed25519.pub

输出会是一长串字符,类似:

W9abcdefgHiJkLmNoPqRsTuVwXyZ0123456789abcdefg=

? 把这串字符复制下来,存到你自己的记事本里。 等下配置客户端要用到。

data 目录下有两个密钥文件:

文件名 是什么 能不能给别人看
id_ed25519 私钥 ❌ 绝对不能泄露,泄露了别人可以冒充你的服务器
id_ed25519.pub 公钥 ✅ 可以放心给所有客户端填

九、第 7 步:配置 RustDesk 客户端

9.1 下载客户端

RustDesk 官网下载页 下载对应系统的客户端(Windows / Mac / Linux / 安卓 / iOS 都有)。

9.2 填写 ID 服务器和 Key

打开 RustDesk → 点击右上角三个点(菜单)→ 设置网络 → 点开「高级」或「ID/中继服务器」:

在「ID 服务器」里填你的服务器公网 IP:

103.xxx.xxx.100

在「Key」里填刚才拿到的公钥字符串(就是 id_ed25519.pub 那串)。

「中继服务器」可以留空(默认和 ID 服务器用同一个),也可以显式写:

103.xxx.xxx.100:21117

填完后点「应用」或「确定」,然后完全退出 RustDesk 再重新打开一次(不点退出只关窗口没用,配置不生效)。

9.3 验证是否连上了自己的服务器

重新打开 RustDesk 后,看左下角,如果显示「就绪(自定义服务器)」或者 ID 号前面有个小地球图标,说明已经连上你自己的服务器了。

你也可以在服务器上看日志验证:

docker logs hbbs --tail 20

如果看到有 new connection from x.x.x.x 之类的日志,说明客户端注册进来了。


十、进阶:用域名代替 IP(强烈推荐)

如果你只有两三台设备,填 IP 也能用。但如果设备多、或者以后可能换服务器,强烈建议用域名

10.1 配置 DNS

去你的域名 DNS 管理后台,添加一条 A 记录:

  • 主机记录:rustdesk(或者你喜欢的名字)
  • 记录类型:A
  • 记录值:你的服务器公网 IP
  • TTL:600 或 10 分钟

比如你的域名是 example.com,配好后 rustdesk.example.com 就指向你的服务器了。

10.2 客户端改填域名

客户端 ID 服务器填:

rustdesk.example.com

中继服务器填:

rustdesk.example.com:21117

Key 不变。

10.3 为什么强烈推荐域名?

两个好处:

  1. 换服务器不用改客户端:以后你换更大的服务器、或者换机房,只需要改 DNS 解析,几十台客户端自动跟着走;
  2. 更安全:IP 可能被扫,但域名相对隐蔽一些(虽然安全主要靠 Key,但域名是第一道门槛)。

十一、进阶:开启 Web 客户端(可选)

如果你偶尔需要在别人的电脑上远程,但不方便装客户端,可以开 Web 版 RustDesk,用浏览器就能连。

11.1 修改 docker-compose.yml

services 下面再加两个服务(web 客户端和对应的 web 中继):

  web:
    container_name: rustdesk-web
    image: rustdesk/rustdesk-server:latest
    command: web
    volumes:
      - ./data:/root
    network_mode: "host"
    depends_on:
      - hbbs
      - hbbr
    restart: unless-stopped

注意:新版 RustDesk Server 镜像已经把 web 客户端整合进同一个镜像了,直接 command: web 即可。

11.2 重启服务

cd /opt/rustdesk
docker compose up -d

11.3 访问

浏览器打开 http://你的服务器IP:21118 就能用网页版了。

⚠️ 安全提醒:Web 控制台默认是 HTTP 的,如果要在公网用,建议套一层 Nginx + HTTPS,或者只在内网/VPN 环境下访问。


十二、常见问题排查(我整理了 12 个高频问题)

❓ Q1:客户端一直显示"连接中",连不上

90% 的概率是端口没开全。 按这个顺序排查:

  1. docker compose ps 看两个容器是不是都 Up;
  2. ss -lntup | grep 211 看端口有没有在监听;
  3. 去 LuckVM 控制台看安全组,确认 21115-21117 TCP 和 21116 UDP 都放行了;
  4. 看服务器 UFW 状态:ufw status,如果是 active 也要开端口;
  5. 客户端 Key 是不是填错了(注意复制时不要带空格和换行);
  6. docker logs hbbs --tail 50 看日志里有没有报错。

❓ Q2:能连上但画面很卡,延迟很高

先判断是不是走了中继:

  • 在 RustDesk 连接窗口顶部或底部,如果显示「中继连接」就是在走服务器带宽;
  • 如果显示「直接连接」就是 P2P,延迟和服务器无关。

如果是中继导致的卡:

  1. 升级服务器带宽(最直接);
  2. 选离双方更近的节点(比如国内用户优先香港 CN2);
  3. 在客户端设置里降低画质、关闭壁纸传输。

❓ Q3:P2P 连不上,永远走中继

这是 NAT 类型的问题。两边都是对称 NAT(Symmetric NAT)时,P2P 打洞几乎不可能成功,这是网络层面的限制,RustDesk 也解决不了。

企业内网、4G/5G 网络、部分运营商宽带的 NAT 类型都比较严格。这种情况就老老实实用中继,确保服务器带宽足够。

❓ Q4:手机端(安卓/iOS)怎么配置?

和电脑端类似:

  • 打开 App → 设置 → ID/中继服务器;
  • 填服务器地址和 Key;
  • 返回首页,左下角显示「自定义」就表示连上了。

❓ Q5:RustDesk Server 怎么升级?

非常简单,两条命令:

cd /opt/rustdesk
docker compose pull
docker compose up -d

Docker 会自动拉取最新镜像并重启容器,数据不会丢(因为在 ./data 目录里挂载着)。

❓ Q6:Key 丢了怎么办?

如果你还能登录服务器,直接重新 cat /opt/rustdesk/data/id_ed25519.pub 就能看到。

如果你服务器都没了、数据目录也没备份——那就只能重新部署,然后所有客户端重新填新 Key,没有别的办法。这也是为什么我反复强调要备份 data 目录。

❓ Q7:RustDesk 安全吗?会不会被别人看到我的桌面?

RustDesk 是端到端加密的,即使走中继,中继服务器也只能看到加密后的数据包,解密不了内容。但前提是:

  1. 你用的是自己的服务器,并且 Key 只有你知道;
  2. 客户端一定要填 Key,不填 Key 的话安全性会大打折扣(可能被中间人攻击);
  3. 私钥(id_ed25519)不要泄露。

❓ Q8:能不能同时给多个公司用?能不能做多租户?

官方开源版不支持多租户隔离。如果你需要给不同客户部署,建议每个客户一套独立的 RustDesk Server(可以放在同一台服务器上,用不同端口区分,但管理起来比较麻烦)。

企业级多租户管理需要用 RustDesk 的 Pro 版(付费)。

❓ Q9:怎么限制只有我允许的设备能注册?

可以用 --allowed-ips 参数限制,或者用防火墙只放行你信任的 IP 段。如果设备比较固定,建议直接在安全组里把源 IP 限制为公司出口 IP + 员工常用 IP,这是最安全的做法。

❓ Q10:一台服务器最多能支持多少台设备?

这取决于连接方式:

  • 全 P2P:理论上几千台都没问题,服务器只做协调;
  • 全中继:1 核 1G 大概扛 5–10 路同时在线(720p),2 核 4G 大概 20–30 路,4 核 8G 大概 50–100 路。
  • 带宽是更大的瓶颈:一路 720p 中等画质大概占 0.5–1 Mbps,100M 带宽大概能同时跑 100 路。

❓ Q11:RustDesk 和 TeamViewer/ToDesk 比怎么样?

维度 RustDesk(自建) TeamViewer ToDesk
费用 服务器成本(低) 贵(商业授权) 免费版有限制
设备数量 不限 按设备数收费 免费版有限
数据隐私 完全自己掌握 经过官方服务器 经过官方服务器
连接速度 看服务器带宽和节点 官方节点,稳定 官方节点,稳定
部署难度 需要一定技术基础 下载即用 下载即用
适合谁 有技术能力、注重隐私、设备多 个人/小企业付费 个人轻度使用

❓ Q12:服务器被墙了怎么办?

如果你选的是海外节点,国内访问 RustDesk 端口一般是没问题的(RustDesk 用的不是常见翻墙端口,不容易被识别)。但如果确实遇到端口被 QoS 了,可以:

  1. 换端口:hbbs/hbbr 都支持自定义端口,改 docker-compose 的 command 参数加 --port 即可;
  2. 换节点:换一个线路更好的机房,比如香港 CN2 GIA 比普通国际线路稳很多;
  3. 套 Cloudflare Tunnel(进阶玩法,适合有一定基础的用户)。

十三、RustDesk 常用命令速查表

收藏这一段,以后管理的时候直接翻。

# 进入 RustDesk 目录
cd /opt/rustdesk

# 启动
docker compose up -d

# 停止
docker compose down

# 重启
docker compose restart

# 查看状态
docker compose ps

# 查看日志
docker logs hbbs
docker logs hbbr
docker logs -f hbbs   # 实时

# 更新版本
docker compose pull
docker compose up -d

# 查看公钥
cat /opt/rustdesk/data/id_ed25519.pub

# 查看端口监听
ss -lntup | grep 211

# 备份数据(建议每周一次)
tar -czf /opt/rustdesk-backup-$(date +%Y%m%d).tar.gz /opt/rustdesk/data

十四、总结与建议

整个部署流程其实就是 5 步:

  1. 装 Docker → 1 条脚本搞定;
  2. 写 docker-compose.yml → 复制粘贴;
  3. 启动服务docker compose up -d
  4. 开端口 → 安全组 + UFW 两层都要开(最容易漏);
  5. 客户端填 IP 和 Key → 完事。

几个最重要的建议,再强调一次:

  • 一定要备份 data 目录,尤其是那个私钥文件;
  • 21116 UDP 端口必须开,很多教程只写了 TCP,结果 P2P 打洞失败;
  • 长期用一定要配域名,换服务器不翻车;
  • 节点选离用户近的,香港 CN2 GIA 对国内用户是最优解;
  • 客户端一定要填 Key,不填 Key 的自建等于白建。

如果你跟着这篇教程做下来遇到问题,可以在下方留言,或者直接 提交工单 找我,我会帮你排查。