在部署RustDesk自建中继服务器时,常见问题是中继服务无法正常建立连接,客户端显示“P2P失败,尝试中继”。这通常源于未正确配置`hbbs`和`hbbr`服务的公网IP与端口映射,或防火墙未开放必要的TCP/UDP端口(如21115、21116、21117等)。此外,若未在启动参数中正确设置`--api`和`--relay`地址,或DNS解析与实际IP不匹配,也会导致中继注册失败。需确保服务端配置文件与客户端ID绑定逻辑一致,并启用日志排查通信异常。
1条回答 默认 最新
娟娟童装 2025-12-17 10:00关注1. 常见现象与初步排查
在部署 RustDesk 自建中继服务器时,最常见的表现是客户端连接显示“P2P失败,尝试中继”,随后连接中断或卡顿。这表明 P2P 直连未成功,系统已切换至中继模式,但中继服务未能正常响应。初步判断应从网络可达性入手,确认
hbbs(ID 服务器)和hbbr(中继服务器)是否已在公网正确暴露。- 检查服务器公网 IP 是否固定且可访问
- 确认 DNS 解析是否指向正确的公网 IP
- 验证客户端配置中的 ID 服务器地址(
--api)与中继地址(--relay)是否准确
2. 端口映射与防火墙配置
RustDesk 中继通信依赖多个关键端口,若未正确映射或被防火墙拦截,将直接导致中继注册失败。服务 端口 协议 用途 hbbs 21114 TCP ID 注册与心跳 hbbs 21115 UDP NAT 穿透打洞 hbbr 21116 TCP 中继数据通道 hbbr 21117 UDP 中继媒体流(可选) Web API 21118 TCP API 接口(如启用) 需确保云服务商安全组、本地防火墙(如 iptables、firewalld)及路由器 NAT 规则均开放上述端口,并完成公网 IP 到内网服务的端口转发。
3. 启动参数与服务配置一致性
hbbs与hbbr的启动参数必须显式指定公网可达地址,否则内部生成的 token 或 relay 地址可能包含私网 IP,导致客户端无法连接。# hbbs 启动示例 ./hbbs -i 0.0.0.0 --api 1.2.3.4:21114 --relay 1.2.3.4:21116 --key ./id_ed25519 # hbbr 启动示例 ./hbbr -i 0.0.0.0 --api 1.2.3.4:21114 --key ./id_ed25519其中
--api指定 hbbs 的 TCP 服务地址,--relay指定 hbbr 提供中继服务的公网入口。若使用域名,需确保 DNS 解析稳定且 TTL 较低,避免 IP 变更后缓存延迟。4. 配置文件与客户端 ID 绑定逻辑
RustDesk 客户端通过唯一 ID 向hbbs注册,服务器需维护 ID 到连接状态的映射表。若多实例部署未共享状态或配置不一致(如密钥不匹配),会导致注册冲突或中继寻址失败。- 确保所有服务使用同一套密钥对(
id_ed25519) - 避免多个
hbbs实例同时运行造成 ID 冲突 - 定期清理过期会话(可通过日志观察心跳超时)
- 启用持久化存储(如 SQLite)以支持重启后状态恢复
5. 日志分析与通信链路追踪
启用详细日志是定位中继失败的核心手段。通过分析hbbs和hbbr输出日志,可判断:- 客户端是否成功注册到 hbbs
- hbbs 是否向 hbbr 正确转发中继请求
- UDP 打洞是否触发,NAT 类型是否受限
- TLS 握手失败或证书校验异常
2025-04-05 10:23:45.123 INFO [hbbs] Client(ID: abc123) registered from 203.0.113.45:54321 2025-04-05 10:23:46.789 WARN [hbbs] Relay request for abc123 → xyz789, but target offline 2025-04-05 10:23:47.001 DEBUG [hbbr] Incoming relay stream from 1.2.3.4:21116 to 203.0.113.45 failed: timeout6. 网络拓扑与中继流程可视化
以下 Mermaid 流程图展示客户端通过中继建立连接的关键步骤: graph TD A[客户端A启动] --> B{能否P2P直连?} B -- 否 --> C[连接hbbs注册ID] C --> D[hbbs记录在线状态] D --> E[客户端B请求连接A] E --> F[hbbs通知A] F --> G[A无法直连B] G --> H[hbbs返回中继地址] H --> I[双方连接hbbr中继] I --> J[数据经hbbr转发] J --> K[连接建立成功]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报