🌊 第05章 · RustDesk 原理

hbbs/hbbr id/中继

RustDesk 原理

这一章讲 RustDesk 这个开源远程桌面软件怎么工作的——尤其自托管那套 hbbs(身份/中继服务器)和 hbbr(中继服务器)各自干什么、端口怎么配合。理解了原理,部署和排雷都有方向。

RustDesk 是什么

RustDesk 是开源、端到端加密的远程桌面/远程协助工具,类 TeamViewer/向日葵。你可以:

  1. 用它官方的免费公共服务器;
  2. 自托管(更高隐私/更快/不受限),这正是本服务器的场景。

数据经过 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 部署与客户端》与《端口规划与防火墙》。