第一部分:服务器端部署 (CentOS)
1. 系统准备 (CentOS/RHEL/Rocky Linux 系统)
# 更新系统
sudo yum update -y
# 或者对于 CentOS 8+/Rocky Linux:
# sudo dnf update -y
# 安装 Docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 或者对于 CentOS 8+/Rocky Linux:
# sudo dnf install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 注意:执行后需要重新登录终端或重启系统生效
# 安装 Docker Compose 插件
sudo yum install -y docker-compose-plugin
# 或者对于 CentOS 8+/Rocky Linux:
# sudo dnf install -y docker-compose-plugin
2. 部署 RustDesk 服务端
# 1. 创建并进入指定目录
mkdir -p /opt/module/rustdesk && cd /opt/module/rustdesk
# 2. 创建 compose.yml 文件
cat > compose.yml << 'EOF'
services:
hbbs:
container_name: hbbs
image: docker.io/rustdesk/rustdesk-server-pro:latest
command: hbbs
volumes:
- ./data:/root
network_mode: "host"
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: docker.io/rustdesk/rustdesk-server-pro:latest
command: hbbr
volumes:
- ./data:/root
network_mode: "host"
restart: unless-stopped
EOF
# 3. 启动服务 (使用 Docker Compose V2)
sudo docker compose up -d
# 4. 检查服务状态,确认两个容器都在运行
sudo docker compose ps
3. 配置防火墙 (CentOS)
CentOS/RHEL/Rocky Linux (云服务器可忽略):
# 开放 TCP 端口范围
sudo firewall-cmd --permanent --add-port=21115-21119/tcp
# 开放 UDP 端口
sudo firewall-cmd --permanent --add-port=21116/udp
# 保留 SSH 端口
sudo firewall-cmd --permanent --add-service=ssh
# 重新加载防火墙配置
sudo firewall-cmd --reload
云服务器:进入安全组,如图示例开放以下端口即可

关键端口说明:
- 21116 (TCP):用于 HBBS 的 NAT 类型检测。
- 21116 (UDP):用于 ID 注册与心跳。
- 21117 (TCP):用于 HBBS 服务。
- 21118 (TCP):用于 HBBR(中继)服务。
- 21115 (TCP):用于 Web 客户端(可选)。
- 21119 (TCP):用于支持 Web 控制台(Pro 版功能)。
第二部分:获取中继服务器的 ID 与 Key
服务运行后,密钥文件会自动生成在 ./data 目录下。
# 进入项目目录
cd /opt/module/rustdesk
# 查看生成的密钥文件
ls -la data/
# 您应该会看到类似以下文件:
# id_ed25519 id_ed25519.pub
# 获取 Key (公钥)
cat data/id_ed25519.pub
# 服务器ID 其实就是 hbbs 所在服务器的公网IP或解析到该IP的域名

重要信息:
- Key:就是
id_ed25519.pub文件的内容,一串长长的字符串。 - ID/地址:是您运行 HBBS 的服务器公网 IP 地址,或者您为该 IP 设置的域名。
第三部分:客户端安装与配置
控制端与被控端
RustDesk 的客户端是通用的,同一个程序既可以作为控制端,也可以作为被控端。
1. 客户端下载
从 RustDesk 官网下载客户端:https://rustdesk.com/zh/
支持 Windows, macOS, Linux, Android, iOS 等所有主流平台。
2. 客户端配置
在控制端和被控端上都需要进行相同的网络配置。
- 打开 RustDesk 客户端。
- 点击左下角的菜单按钮(三条横线或齿轮图标)。
- 进入 “网络” 设置。
在 “ID服务器” 和 “中继服务器” 中填入您的服务器公网 IP 或域名。
- 例如:
your-server.com或123.123.123.123
在 “Key” 中填入从 id_ed25519.pub 获取的公钥字符串。
配置示例:
- ID 服务器:
your-domain.com(或你的服务器公网IP) - 中继服务器:
your-domain.com(通常与ID服务器相同) - Key:
ssh-ed25519 AAAA...xxx(您的公钥)
3. 开始连接
- 在被控端设备上,RustDesk 客户端会显示本机的 “ID” 和 “密码”。
- 在控制端设备上,在输入框中输入被控端的 “ID”,然后点击 “连接”。
- 输入被控端上显示的 “密码”,即可建立远程控制连接。
CentOS 特别注意事项
-
SELinux:如果您的 CentOS 启用了 SELinux,可能会遇到权限问题。可以临时禁用 SELinux 或设置适当的策略:
# 临时禁用 sudo setenforce 0 # 永久禁用(需要重启) sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config -
Podman:CentOS 默认可能安装了 Podman,如果您选择使用 Podman:
# 安装 podman-compose sudo yum install -y podman-compose # 然后使用 podman-compose up -d 启动 -
目录权限:确保
/opt/module/rustdesk目录有正确的写入权限:sudo chmod 755 /opt/module/rustdesk
资源占用示例
hbbs:内存占用 4.6MB
hbbr:内存占用 1.7MB

hbbs 和 hbbr 的作用
hbbs = “电话号码本” + “接线员”(告诉你如何联系对方)
hbbr = “快递员”(当无法直接交付时帮你传送包裹)两个服务协同工作,确保 RustDesk 在各种网络环境下都能建立稳定的远程连接。
hbbs (RustDesk ID Server) - 信令服务器
主要功能:
- ID 注册与管理:为每个客户端设备分配和注册唯一的 RustDesk ID
- 地址解析:将 RustDesk ID 解析为实际的网络地址
- NAT 穿透协调:帮助客户端之间建立直接 P2P 连接
- 心跳检测:维持与客户端的连接状态
- 会话管理:管理远程控制会话的建立
类比理解:
就像 电话总机 或 DNS 服务器
- 你知道朋友的 RustDesk ID(就像知道电话号码)
- hbbs 告诉你这个 ID 对应的设备在哪里(就像电话总机转接)
hbbR (RustDesk Relay Server) - 中继服务器
主要功能:
- 数据中继:当客户端之间无法建立直接 P2P 连接时,转发数据
- 流量转发:传输屏幕图像、鼠标键盘数据、文件传输等
- 穿透失败备用:作为 NAT 穿透失败的备用方案
类比理解:
就像 快递中转站 或 VPN 服务器
- 当两个设备无法直接通信时(比如都在不同的 NAT 后面)
- hbbr 作为中间人帮助转发数据
工作流程示例
客户端A (控制端) 客户端B (被控端)
↓ ↓
连接到 hbbs (注册ID) ←------→ 连接到 hbbs (注册ID)
↓ ↓
获取客户端B的地址信息 等待连接
↓ ↓
尝试直接 P2P 连接 -----------→ 接受连接
↓ ↓
如果直接连接失败 ↘ ↙ 如果直接连接失败
通过 hbbr 中继传输数据
流程说明:
- 注册阶段:客户端A和B都向 hbbs 注册自己的 ID 和网络信息
- 地址交换:hbbs 为双方提供对方的网络地址信息
- P2P尝试:客户端之间尝试建立直接连接(最理想的低延迟方式)
- 中继备用:如果直连失败(由于防火墙/NAT限制),通过 hbbr 中转数据
- 数据传输:最终通过直连或中继方式传输远程控制数据
查看服务状态
# 查看日志确认服务正常运行
sudo docker logs hbbs
sudo docker logs hbbr
# 查看实时日志
sudo docker logs -f hbbs