🌊 第05章 · RustDesk 原理
hbbs/hbbr id/中继
RustDesk 原理¶
这一章讲 RustDesk 这个开源远程桌面软件怎么工作的——尤其自托管那套 hbbs(身份/中继服务器)和 hbbr(中继服务器)各自干什么、端口怎么配合。理解了原理,部署和排雷都有方向。
RustDesk 是什么¶
RustDesk 是开源、端到端加密的远程桌面/远程协助工具,类 TeamViewer/向日葵。你可以:
- 用它官方的免费公共服务器;
- 自托管(更高隐私/更快/不受限),这正是本服务器的场景。
数据经过 RustDesk 服务器做"信令/中继",但内容是端到端加密的。自托管后,信令与中继节点都由你自己掌控。
两个关键进程(服务端)¶
| 进程 | 名称 | 端口 | 作用 |
|---|---|---|---|
hbbs |
ID/Rendezvous(集会节点) | 21115(TCP)+21116(TCP/UDP) | 负责"找人":注册设备、分配/验证 ID、帮两端"相遇"(NAT 穿透失败时可中继) |
hbbr |
Relay(中继节点) | 21117(TCP) | 当两个设备无法直连时,由它转发数据 |
一句话:
hbbs是"电话号码簿 + 接线员"(帮你互认、建连),hbbr是"中转站"(直连不通时帮你转)。
连接流程(直连优先,失败才中继)¶
发起端(你的电脑) ── 找 hbbs(21115/21116) 报上 ID ──> hbbs
控制端(对方) ── 找 hbbs 问"这个 ID 在哪" ───────> hbbs
hbbs 告知双方互相能连的地址
├─ 能直连(NAT 穿透成功) ──> 两端直接 P2P 加密会话
└─ 直连不通 ───────────────> 走 hbbr(21117) 中继转发
端口作用拆分(务必记牢)¶
| 端口 | 协议 | 用途 | 务必备注 |
|---|---|---|---|
| 21115 | TCP | hbbs 的 TCP 端口(身份/信令) | 放行 |
| 21116 | TCP + UDP | hbbs 的注册/心跳(NAT 穿透) | 必须同时放 TCP 和 UDP,否则连不上/直连失败 |
| 21117 | TCP | hbbr 中继 | 放行 |
KEY |
— | 客户端与服务端的安全钥匙 | 服务端生成的公钥要用在客户端 |
高频坑 | 很多人只放行
21115和21117,却漏了21116 的 UDP,导致客户端能"看到 ID 却能连不上"。rustdesk 的 NAT 穿透依赖 21116 的 UDP。
客户端关键钥(Key)¶
自托管时,Y 服务端 hbbs 首次运行会生成一对密钥(如 /usr/local/rustdesk-server/rustdesk.key 与 .pub)。客户端在"ID/中继服务器"设置里填入服务器地址 + IP 地址,并必填 Key(公钥)才能配对成功。若 Key 不对,表现为"能 ping 到服务器但连不上"。
安全 | 客户端只填服务器 IP 与 公钥(pub);私钥留在服务端,绝不外泄。这保证了即使有人知道服务器地址,没有公钥也无法连你的设备(除非你开放给所有人)。
直连 / 中继 / 加密的关系¶
- 能直连(双方都在公网/NAT 穿透成功):最快、不过中继。
- 只能中继:数据走你的 hbbr,速度受服务器带宽限制。
- 加密:无论直连还是中继,会话都是端到端加密,中继节点只能转发、无法解密。
与官方公共服务器比较¶
| 官方公共服务器 | 自托管 | |
|---|---|---|
| 速度 | 偶有慢/受限 | 取决于你的服务器带宽 |
| 隐私 | 信令经过第三方 | 信令你掌控 |
| 延迟 | 网络状况不定 | 更近/更快 |
| 成本 | 免费 | 要一台有公网+带宽的云主机 |
相关命令 / 端口验证¶
- 服务端是否在听:
ss -tlnp | grep 2111。 - 从公网测端口:
nc -zv <IP> 21115、nc -zuv <IP> 21116。 - 查看服务文件:
systemctl status rustdesk-hbbs rustdesk-hbbr。 - 具体部署见《RustDesk 部署与客户端》与《端口规划与防火墙》。