RustDesk 自建服务器教程

RustDesk 自建服务器教程

适用场景:

  • 被控或控制端:Windows 10
  • 自建服务器:Ubuntu 20.04/22.04/24.04
  • 使用 RustDesk 开源版服务端
  • 推荐使用 Docker 部署 hbbs 和 hbbr

RustDesk 自建服务端主要包含两个组件:

  • hbbs:ID/Rendezvous 服务,帮助客户端发现彼此
  • hbbr:Relay 中继服务,直连失败时转发桌面数据

一、准备条件

你需要准备:

  1. 一台有公网 IP 的 Ubuntu 服务器
  2. 一个可以访问服务器的域名,例如:
text 复制代码
rustdesk.example.com

没有域名也可以直接使用公网 IP。

  1. 服务器最好满足:
text 复制代码
CPU:1 核以上
内存:1 GB 以上
系统:Ubuntu 20.04/22.04/24.04

如果服务器在阿里云、腾讯云、华为云、AWS 等云平台,还需要在云控制台的安全组中放行相应端口。

注意:如果 Ubuntu 服务器位于家庭路由器后面,必须配置端口转发;如果运营商使用 CGNAT,通常无法直接从公网访问,需要更换有公网 IPv4 的服务器或使用 IPv6/VPS。


二、安装 Docker

通过 SSH 登录 Ubuntu 服务器:

bash 复制代码
ssh root@你的服务器IP

更新系统:

bash 复制代码
apt update
apt upgrade -y

安装 Docker:

bash 复制代码
curl -fsSL https://get.docker.com | sh

启动 Docker 并设置开机启动:

bash 复制代码
systemctl enable --now docker

确认安装成功:

bash 复制代码
docker --version
docker compose version

如果系统没有 docker compose 命令,可以安装 Compose 插件:

bash 复制代码
apt update
apt install -y docker-compose-plugin

再次检查:

bash 复制代码
docker compose version

三、创建 RustDesk 服务端目录

创建数据目录:

bash 复制代码
mkdir -p /opt/rustdesk-server/data
cd /opt/rustdesk-server

创建 Docker Compose 配置文件:

bash 复制代码
nano docker-compose.yml

填入以下内容:

yaml 复制代码
services:
  hbbs:
    container_name: rustdesk-hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r 你的服务器公网IP:21117
    volumes:
      - ./data:/root
    network_mode: host
    depends_on:
      - hbbr
    restart: unless-stopped

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

把:

text 复制代码
你的服务器公网IP

替换成实际公网 IP。

例如:

yaml 复制代码
command: hbbs -r 203.0.113.10:21117

如果使用域名,也可以写成:

yaml 复制代码
command: hbbs -r rustdesk.example.com:21117

保存文件:

  • Ctrl + O
  • 回车
  • Ctrl + X

这里使用 network_mode: host,可以避免 Docker 端口映射和 UDP 转发带来的额外问题。


四、启动 RustDesk 服务端

在 /opt/rustdesk-server 目录下执行:

bash 复制代码
docker compose up -d

查看容器状态:

bash 复制代码
docker compose ps

正常情况下应看到两个容器处于运行状态:

text 复制代码
rustdesk-hbbs   running
rustdesk-hbbr   running

查看日志:

bash 复制代码
docker compose logs -f

看到类似以下内容,通常说明服务已经启动:

text 复制代码
INFO hbbs
INFO hbbr

按 Ctrl + C 退出日志查看。


五、开放服务器端口

RustDesk 常用端口如下:

端口 协议 用途
21115 TCP NAT 类型检测
21116 TCP ID/Rendezvous 服务
21116 UDP 客户端打洞和发现
21117 TCP 中继服务
21118 TCP Web 客户端相关功能
21119 TCP Web 客户端相关功能

普通 Windows 客户端使用时,至少开放:

text 复制代码
21115/tcp
21116/tcp
21116/udp
21117/tcp

在 Ubuntu 上配置 UFW:

bash 复制代码
ufw allow 22/tcp
ufw allow 21115/tcp
ufw allow 21116/tcp
ufw allow 21116/udp
ufw allow 21117/tcp
ufw enable

查看规则:

bash 复制代码
ufw status

如果使用云服务器,还要在云平台安全组中添加相同规则。仅配置 Ubuntu 的 UFW,而没有配置云安全组,外部仍然可能无法访问。

不建议直接开放:

text 复制代码
21115-21119 全部 TCP/UDP

如果只是 Windows 客户端远程控制,通常不需要开放 21118 和 21119。


六、查看服务器公钥

RustDesk 客户端需要填写服务端公钥,用于验证连接的是你的服务器。

查看公钥:

bash 复制代码
cat /opt/rustdesk-server/data/id_ed25519.pub

输出一般类似:

text 复制代码
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxx

复制整行内容,包括开头的:

text 复制代码
ssh-ed25519

不要复制换行,也不要复制私钥文件:

text 复制代码
id_ed25519

私钥不要泄露。

如果公钥文件还没有生成,可以重启服务:

bash 复制代码
docker compose restart hbbs

然后再次查看:

bash 复制代码
cat /opt/rustdesk-server/data/id_ed25519.pub

七、Windows 10 安装 RustDesk 客户端

在 Windows 10 上安装 RustDesk 客户端。

安装后打开 RustDesk,进入设置。不同版本界面名称可能略有差异,一般路径是:

text 复制代码
设置 → 网络 → ID/中继服务器

填写以下内容。

ID 服务器

填写:

text 复制代码
你的服务器域名或公网IP

例如:

text 复制代码
rustdesk.example.com

或者:

text 复制代码
203.0.113.10

中继服务器

填写:

text 复制代码
你的服务器域名或公网IP

例如:

text 复制代码
rustdesk.example.com

或者:

text 复制代码
203.0.113.10

Key

填写前面获取的公钥内容:

text 复制代码
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxx

保存后,完全退出 RustDesk,再重新打开。

在另一台电脑上重复相同配置。


八、检查客户端是否连接到自建服务器

在 Windows 客户端中检查:

  1. RustDesk 设置中的 ID 服务器已经填写
  2. Key 已经填写
  3. 重新启动 RustDesk
  4. 检查 RustDesk 窗口底部或网络状态
  5. 使用另一台配置相同服务器的电脑测试连接

如果连接正常,客户端会通过你的 hbbs 获取设备信息。

连接方式通常有两种:

直连

两台设备之间网络条件较好时,RustDesk 会尝试建立点对点连接。

优点:

  • 延迟低
  • 不占用服务器中继带宽

中继连接

直连失败时,客户端通过 hbbr 转发数据。

优点:

  • 适用于复杂 NAT、校园网、公司网络等环境

缺点:

  • 服务器会消耗上行带宽
  • 延迟通常比直连高

九、验证端口是否正常

在服务器上查看监听端口:

bash 复制代码
ss -lntup | grep -E '21115|21116|21117'

应该能看到 21115、21116、21117 相关监听信息。

查看容器状态:

bash 复制代码
docker ps

查看服务日志:

bash 复制代码
docker logs rustdesk-hbbs
docker logs rustdesk-hbbr

从另一台 Linux 或 macOS 设备测试 TCP 端口:

bash 复制代码
nc -vz 你的服务器IP 21115
nc -vz 你的服务器IP 21116
nc -vz 你的服务器IP 21117

Windows PowerShell 也可以测试:

powershell 复制代码
Test-NetConnection 你的服务器IP -Port 21115
Test-NetConnection 你的服务器IP -Port 21116
Test-NetConnection 你的服务器IP -Port 21117

如果结果中出现:

text 复制代码
TcpTestSucceeded : True

说明 TCP 端口可以访问。

21116/udp 不能通过普通 TCP 测试判断,需要结合 RustDesk 实际连接和服务器日志确认。


十、常见问题

1. ID 服务器填写后无法连接

依次检查:

bash 复制代码
docker compose ps
ufw status
ss -lntup | grep -E '21115|21116|21117'

然后确认云服务器安全组是否放行:

text 复制代码
21115 TCP
21116 TCP
21116 UDP
21117 TCP

还要确认填写的是公网 IP,而不是:

text 复制代码
127.0.0.1
192.168.x.x
10.x.x.x
172.16.x.x

2. 可以发现设备,但无法控制

通常是中继端口或 -r 参数配置问题。

检查 Compose 文件中的这一行:

yaml 复制代码
command: hbbs -r 你的服务器公网IP:21117

确认地址和端口正确,然后重启:

bash 复制代码
docker compose up -d

同时确认:

text 复制代码
21117/tcp

已经在 UFW 和云安全组中放行。


3. Key 错误

确认 Key 是从以下文件中复制的:

bash 复制代码
/opt/rustdesk-server/data/id_ed25519.pub

不要复制:

text 复制代码
id_ed25519

不要把命令行提示符一起复制进去,例如:

text 复制代码
root@server:~#

如果服务端重建过数据目录,公钥可能会变化,此时需要把新的公钥重新配置到所有客户端。


4. Docker 容器不断重启

查看日志:

bash 复制代码
docker compose logs hbbs
docker compose logs hbbr

常见原因:

  • 公网 IP 写错
  • YAML 缩进错误
  • Docker 镜像下载失败
  • 端口已经被其他程序占用
  • 服务器资源不足

检查配置文件:

bash 复制代码
docker compose config

如果配置正确,该命令会输出解析后的 Compose 配置;如果有缩进或语法问题,会直接提示错误。


5. 服务器没有公网 IPv4

如果服务器只能通过内网地址访问,外部客户端无法直接连接。可以选择:

  • 更换带公网 IPv4 的 VPS
  • 配置路由器端口转发
  • 使用公网 IPv6,并确保客户端网络支持 IPv6
  • 使用 RustDesk Pro 或其他带打洞/网络接入能力的方案
  • 通过 VPN 将客户端和服务器放入同一网络

十一、升级 RustDesk 服务端

进入部署目录:

bash 复制代码
cd /opt/rustdesk-server

拉取最新版镜像:

bash 复制代码
docker compose pull

重新创建容器:

bash 复制代码
docker compose up -d

查看状态:

bash 复制代码
docker compose ps

数据目录位于:

text 复制代码
/opt/rustdesk-server/data

升级前建议备份:

bash 复制代码
tar -czf /root/rustdesk-data-backup.tar.gz -C /opt/rustdesk-server data

重点保护以下文件:

text 复制代码
id_ed25519
id_ed25519.pub

其中私钥尤其重要。不要把它提交到 Git,也不要发送给其他人。


十二、推荐的最终配置

目录结构:

text 复制代码
/opt/rustdesk-server/
├── docker-compose.yml
└── data/
    ├── id_ed25519
    └── id_ed25519.pub

服务器端 Compose 配置:

yaml 复制代码
services:
  hbbs:
    container_name: rustdesk-hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r 203.0.113.10:21117
    volumes:
      - ./data:/root
    network_mode: host
    depends_on:
      - hbbr
    restart: unless-stopped

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

客户端填写:

text 复制代码
ID 服务器:203.0.113.10
中继服务器:203.0.113.10
Key:id_ed25519.pub 的完整内容

服务器开放:

text 复制代码
21115/tcp
21116/tcp
21116/udp
21117/tcp

这样配置后,Windows 10 客户端和其他 RustDesk 客户端就可以使用你自己的 ID 服务和中继服务。

相关推荐
xixiaoyunya3 小时前
实验室检测数据内网自动化备份方案:满足合规可追溯的落地实践
服务器·网络·自动化
资深电气设计4 小时前
TPO卷材研发常见问题:强度与柔韧性为何难兼顾?埃克森美孚威达美™6102的技术参考
运维·物联网·创业创新·业界资讯
优化Henry4 小时前
光路异常告警排查实战:LTE室分与5G小区两个案例解析
运维·网络·学习·5g·tdd
Apipi*4 小时前
30天速通Linux 第九章Linux网络编程
linux·运维·网络
报错小能手4 小时前
Channel面试题。Sync面试题
linux·服务器·windows
天远数科4 小时前
零信任架构实战:基于天远风控经营异常预警构建自动化电子签章前置合规网关
运维·人工智能·架构·自动化
Linux-lucky5 小时前
43-Linux学习之旅之Shell 脚本(二)
linux·运维·学习·ubuntu·dash
青瓦梦滋5 小时前
【在线五子棋对战】session
服务器·网络·网络协议
集智飞行6 小时前
解决mavros2 ros2版本cpu占用高的问题
java·服务器·前端
Java后端的Ai之路6 小时前
昇腾NPU显存管理避坑指南:从npu-smi输出精准识别空闲卡的底层逻辑与实战
服务器·网络·数据库·npu·大模型服务