RustDesk 自建服务器教程

RustDesk 自建服务器教程

适用场景:

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

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'

应该能看到 211152111621117 相关监听信息。

查看容器状态:

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 服务和中继服务。

相关推荐
xbzb44 分钟前
Linux 进程调度与优先级调优避坑指南
linux·运维
Julien20041 小时前
Docker 容器技术的本质
运维·服务器·ssh·学习方法
江屿风1 小时前
【Linux系统】【Linux 进程程序替换机制解析及自定义 Shell 核心逻辑实现 】流食般投喂
linux·运维·服务器·开发语言·笔记
BJ_Bonree1 小时前
博睿数据加入ITSS分会,成为国家级信息技术服务标准化体系单位成员!
大数据·运维·数据库·人工智能·可观测性
好不玩呀1 小时前
一次PXE服务器上IPV6问题的记录
linux·运维·服务器
NetInside_1 小时前
从 EMA 网络可观测性研究看:混合网络时代,企业运维正在发生什么变化?
运维·网络
PiaoKe___3 小时前
云手机原理与 Python 自动化实战:ADB 批量控制、任务调度与落地建议
服务器·arm开发·python·自动化
Madison-No710 小时前
搭建项目测试环境
linux·运维·服务器·python
吴声子夜歌11 小时前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell