RustDesk自建服务器避坑指南:从Docker部署到客户端连不上的那些事儿(Key获取、网络模式详解)
RustDesk自建服务器实战:从零搭建到疑难排查的全链路指南
当你第一次尝试自建RustDesk远程桌面服务器时,可能会被各种配置参数和突发问题搞得手忙脚乱。作为一款开源的远程控制解决方案,RustDesk确实提供了比商业软件更大的灵活性,但同时也意味着需要自己处理更多技术细节。本文将带你完整走一遍从服务器准备到客户端连接的每个关键环节,特别针对那些官方文档没有详细说明的"灰色地带"。
1. 环境准备与基础部署
在开始之前,确保你的服务器满足以下基本要求:
- 一台具有公网IP的VPS或云服务器(2核4G配置起步)
- 已安装Docker和Docker Compose
- 系统防火墙已配置允许相关端口通行
1.1 网络架构理解
RustDesk服务端由两个核心组件构成:
- hbbs(ID服务器):负责设备注册、身份验证和连接协调
- hbbr(中继服务器):当点对点连接失败时提供数据中转
这两个组件可以部署在同一台服务器上,对于中小规模使用完全足够。网络流量主要涉及以下端口:
| 端口 | 协议 | 服务 | 必选 | 说明 |
|---|---|---|---|---|
| 21116 | TCP/UDP | hbbs | 是 | 设备注册和心跳保持 |
| 21115 | TCP | hbbs | 是 | NAT类型检测 |
| 21117 | TCP | hbbr | 是 | 中继数据传输 |
| 21118 | TCP | hbbs | 否 | Web客户端支持(专业版功能) |
| 21119 | TCP | hbbr | 否 | Web客户端支持(专业版功能) |
1.2 快速部署方案
对于大多数用户,推荐使用Docker Compose一键部署:
version: '3.8' services: hbbs: image: rustdesk/rustdesk-server container_name: rustdesk-hbbs command: hbbs -r your.domain.com -k your_custom_key network_mode: host volumes: - /opt/rustdesk/hbbs:/root restart: unless-stopped hbbr: image: rustdesk/rustdesk-server container_name: rustdesk-hbbr command: hbbr network_mode: host volumes: - /opt/rustdesk/hbbr:/root restart: unless-stopped将上述配置保存为docker-compose.yml后,执行docker-compose up -d即可启动服务。
提示:
network_mode: host让容器直接使用主机网络栈,可以避免复杂的端口映射问题,是大多数情况下的首选方案。
2. 关键配置详解与避坑指南
2.1 网络模式的选择困境
很多教程会简单推荐使用--net=host,但这并不总是最佳选择。两种网络模式的对比:
Host模式:
- 优点:配置简单,无需额外端口映射
- 缺点:容器直接暴露在主机网络环境,安全性稍低
- 适用场景:单服务部署、测试环境
Bridge模式:
- 优点:网络隔离性好,可自定义端口映射
- 缺点:需要手动映射所有必要端口
- 适用场景:生产环境、多服务共存
如果选择Bridge模式,docker run命令应该这样写:
docker run -d --name hbbs \ -p 21115-21119:21115-21119/tcp \ -p 21116:21116/udp \ -v /opt/rustdesk/hbbs:/root \ rustdesk/rustdesk-server hbbs -r your.domain.com2.2 Key管理的最佳实践
Key相当于你服务器的"身份证",客户端需要用它来验证连接的合法性。常见问题包括:
自定义Key vs 自动生成Key:
- 使用
-k参数指定固定Key:便于多服务器统一管理 - 不指定Key:每次容器重启可能变化,不利于长期使用
- 使用
Key的获取方式:
- 查看容器日志:
docker logs hbbs 2>&1 | grep "key" - 检查挂载目录:
cat /opt/rustdesk/hbbs/id_ed25519.pub
- 查看容器日志:
Key的安全管理:
- 不要将Key提交到版本控制系统
- 定期备份
id_ed25519文件(私钥) - 不同环境使用不同Key
2.3 域名与网络配置
很多连接问题都源于错误的网络配置:
- 必须配置
-r参数:这个参数告诉服务器它的公网地址是什么 - 动态IP处理:如果是动态公网IP,建议:
- 使用DDNS服务绑定域名
- 设置cron任务定期检查IP变化并重启服务
- NAT背后的服务器:需要配置端口转发时,确保所有必要端口都正确映射
3. 客户端配置的隐藏细节
3.1 客户端各字段的准确含义
很多用户只是机械地填写配置,却不理解每个字段的作用:
| 配置项 | 填写内容示例 | 注意事项 |
|---|---|---|
| ID服务器 | hbbs.your.domain.com | 也可以是IP地址 |
| 中继服务器 | 同ID服务器 | 除非hbbr部署在独立服务器 |
| API服务器 | 留空 | 仅专业版需要 |
| Key | 从服务器获取的Key | 注意不要包含多余空格 |
3.2 多平台配置技巧
- Windows:配置文件位于
%AppData%\RustDesk\config\RustDesk.toml - macOS:
~/Library/Preferences/com.carriez.rustdesk/RustDesk.toml - Linux:
~/.config/RustDesk/config/RustDesk.toml
可以直接编辑这些文件进行批量配置,格式示例:
[options] rendezvous_server = "hbbs.your.domain.com" relay_server = "hbbs.your.domain.com" api_server = "" encrypted_key = "your_key_here"4. 高级排查与性能优化
4.1 常见问题诊断流程
当客户端无法连接时,按照以下步骤排查:
基础连通性检查:
telnet your.domain.com 21116 nc -zv your.domain.com 21115-21119服务状态确认:
docker ps -a docker logs hbbs --tail 100防火墙验证:
sudo iptables -L -n -v sudo firewall-cmd --list-all网络路径分析:
traceroute your.domain.com mtr your.domain.com
4.2 性能调优建议
对于高并发场景,可以考虑以下优化:
调整hbbs线程数:
command: hbbs -r your.domain.com --threads 4启用TCP_NODELAY(减少延迟):
command: hbbr --tcp-nodelay日志级别控制:
command: hbbs -r your.domain.com -v warn资源限制:
deploy: resources: limits: cpus: '2' memory: 1G
4.3 备份与迁移策略
确保服务可靠性的关键措施:
定期备份:
- 配置文件:
/opt/rustdesk目录下的所有内容 - 数据库:默认使用SQLite,备份
/root/db_v2.sqlite3
- 配置文件:
迁移步骤:
# 旧服务器 tar czvf rustdesk-backup.tar.gz /opt/rustdesk # 新服务器 docker-compose down tar xzvf rustdesk-backup.tar.gz -C / docker-compose up -d版本升级:
docker-compose pull docker-compose up -d --force-recreate
在实际运维中,我发现最容易被忽视的是UDP 21116端口的双向通信问题。很多云服务商的安全组默认只放行TCP流量,导致设备注册失败。另一个常见陷阱是使用CDN加速域名,这会干扰RustDesk的UDP通信,应当直接将域名解析到服务器IP。
