作者:李工 · 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 用户才需要特别注意的操作点。

一、部署前你需要准备什么
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 控制台安全组
- 登录 LuckVM 控制台
- 找到你的云服务器 → 点击「管理」
- 进入「安全组」或「防火墙」菜单
- 添加入站规则:
- 协议:TCP,端口:21115-21117,源:0.0.0.0/0
- 协议:UDP,端口:21116,源:0.0.0.0/0
- 保存生效
? 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 为什么强烈推荐域名?
两个好处:
- 换服务器不用改客户端:以后你换更大的服务器、或者换机房,只需要改 DNS 解析,几十台客户端自动跟着走;
- 更安全: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% 的概率是端口没开全。 按这个顺序排查:
docker compose ps看两个容器是不是都 Up;ss -lntup | grep 211看端口有没有在监听;- 去 LuckVM 控制台看安全组,确认 21115-21117 TCP 和 21116 UDP 都放行了;
- 看服务器 UFW 状态:
ufw status,如果是 active 也要开端口; - 客户端 Key 是不是填错了(注意复制时不要带空格和换行);
docker logs hbbs --tail 50看日志里有没有报错。
❓ Q2:能连上但画面很卡,延迟很高
先判断是不是走了中继:
- 在 RustDesk 连接窗口顶部或底部,如果显示「中继连接」就是在走服务器带宽;
- 如果显示「直接连接」就是 P2P,延迟和服务器无关。
如果是中继导致的卡:
- 升级服务器带宽(最直接);
- 选离双方更近的节点(比如国内用户优先香港 CN2);
- 在客户端设置里降低画质、关闭壁纸传输。
❓ 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 是端到端加密的,即使走中继,中继服务器也只能看到加密后的数据包,解密不了内容。但前提是:
- 你用的是自己的服务器,并且 Key 只有你知道;
- 客户端一定要填 Key,不填 Key 的话安全性会大打折扣(可能被中间人攻击);
- 私钥(
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 了,可以:
- 换端口:hbbs/hbbr 都支持自定义端口,改 docker-compose 的 command 参数加
--port即可; - 换节点:换一个线路更好的机房,比如香港 CN2 GIA 比普通国际线路稳很多;
- 套 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 步:
- 装 Docker → 1 条脚本搞定;
- 写 docker-compose.yml → 复制粘贴;
- 启动服务 →
docker compose up -d; - 开端口 → 安全组 + UFW 两层都要开(最容易漏);
- 客户端填 IP 和 Key → 完事。
几个最重要的建议,再强调一次:
- ✅ 一定要备份
data目录,尤其是那个私钥文件; - ✅ 21116 UDP 端口必须开,很多教程只写了 TCP,结果 P2P 打洞失败;
- ✅ 长期用一定要配域名,换服务器不翻车;
- ✅ 节点选离用户近的,香港 CN2 GIA 对国内用户是最优解;
- ✅ 客户端一定要填 Key,不填 Key 的自建等于白建。
如果你跟着这篇教程做下来遇到问题,可以在下方留言,或者直接 提交工单 找我,我会帮你排查。





