RustDesk
更新于 2026-10-28 20:16:20
这是什么
RustDesk 是目前最成熟的开源远程桌面方案之一:客户端 + 服务端全开源,用 Rust 写主体(界面层是 Flutter),定位非常明确——"为自建而生"的 TeamViewer / AnyDesk 替代品。12.7 万星、2 万 fork、3000 万+ 客户端下载量,是这个赛道里唯一能打的 AGPL 项目。
和其它开源远程桌面(VNC、Guacamole 之类)最大的差别是:它自带 NAT 穿透,不需要你有公网 IP、也不用在路由器上做端口转发。局域网、公司内网、家里的电脑,只要双方都连到同一台 ID 服务器,多数情况下直接点对点打通。
⚠️ 官方明确提醒:
rustdesk.com是唯一官方域名,其它域名下的"RustDesk 下载"一律不要用。
先认清一个前提:自建才有"完全掌控"
官方提供免费的公共中继服务器,但带宽有节制、不保证质量,只适合试用。真要日常用,自建一套 hbbs + hbbr 才是这个项目的正确打开方式:ID 注册、信令、中继全在你自己的机器上,画质和延迟自己说了算,也不再依赖任何第三方 SaaS 的可用性。
整套东西对服务器的要求很低——1 核 1G 的 VPS 就能跑,因为绝大多数流量走的是 P2P 直连,服务器只在打洞失败时才被迫当中继。
服务端只有两个二进制
- hbbs:ID(rendezvous / 信令)服务器。每台在线的 RustDesk 都在这里持续上报自己的 IP 和端口,建立连接时由它撮合。
- hbbr:中继服务器。打洞失败时,两端的数据从这儿过。
端口表(自建必看)
| 端口 | 协议 | 用途 |
|---|---|---|
| 21115 | TCP | NAT 类型检测 |
| 21116 | TCP + UDP | UDP 负责设备注册与心跳,TCP 负责打洞与连接(两个都要开) |
| 21117 | TCP | 中继服务(hbbr) |
| 21118 / 21119 | TCP | Web 客户端用的 WebSocket,不用 web 端可以关掉 |
| 21114 | TCP | 只有 Pro 版用到(HTTP API / Web 控制台) |
21115–21117 是能跑起来的最小集合。 官方文档原话是"一般建议把这些端口全开"。
三条命令装好(Docker Compose,最省心)
wget rustdesk.com/oss.yml -O compose.yml
docker compose up -d
官方 compose 里会把 network_mode: "host" 打开——这不是可选项。只有宿主网络模式,hbbs/hbbr 才能看到客户端的真实 IP 而不是 Docker 内网的 172.17.0.1,打洞才可能成功。也正因为如此,用了 host 网络就不需要写任何 -p 端口映射。
手工起两个容器也就两行:
docker run --name hbbs -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
docker run --name hbbr -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr
首次启动会在 ./data 下生成一对 id_ed25519 / id_ed25519.pub 密钥,这个公钥一定要留下来,后面客户端要填。
如果你想让所有流量都强制走中继(比如两端网络策略不允许直连),给 hbbs 加环境变量 ALWAYS_USE_RELAY=Y 即可。
客户端怎么填
主界面 ID 右边的 ⋮ → 网络(Network),需要用管理员/提权解锁设置:
- ID 服务器:填你的 hbbs 域名或 IP(必填)
- 中继服务器:一般留空,客户端会自动推断
- Key:把
./data/id_ed25519.pub的内容贴进去(必填,否则连不上你自己的服务器) - API 服务器:只有 Pro 版登录账号、用通讯录时才需要
注意这个 Key 是连接加密用的公钥,不是 Pro 版买来的 License Key,别搞混。
批量部署时可以用导出配置再导入,或者直接走命令行 --config 字符串,不用一台台手点。
客户端能干什么
装完就能用,功能上基本对得起"替代 TeamViewer"这句话:
- 双向剪贴板、文件传输、多显示器切换、画面质量/帧率手动调
- 无人值守:设一个永久密码,对方随时能连进来(远程办公 / 运维救火必备)
- Wayland 预览版:x86_64 Debian / Ubuntu 系已经能做到无人值守接入,并且覆盖多屏和重启后的登录界面——这是 Wayland 下远程桌面最难啃的部分
- 平台覆盖 Windows / macOS / Linux / Android,外加自托管 Web 客户端(浏览器里直接连,不用装软件)
1.5.0 的几个变化
当前最新版本 1.5.0(2026-09-30),官方博客的标题就写了重点:
- 新增 WebRTC 直连通道——多一条建立直连的路径,打洞成功率更高
- Web 客户端可以直连,不必事事兜到中继
- QoS 调整:延迟、拥塞、帧率目标重新处理,弱网下的观感更稳
OSS 版 vs Pro 版
| Server OSS | Server Pro | |
|---|---|---|
| 内容 | hbbs + hbbr,社区支持 | 加 Web 控制台、API、OIDC / LDAP / 2FA、访问控制、多中继管理、自定义客户端生成器 |
| 适合 | 个人、小团队、技术型自建 | 有合规/审计/集中管理需求的企业 |
代码是 AGPL-3.0,Pro 是商业授权。 个人和小团队用 OSS 完全够,不用纠结。
几个必须知道的坑
- WebSocket 端口的 IP 伪造风险。官方文档专门发了警告:开了 21118/21119 之后,hbbs/hbbr 会信任 WebSocket 连接带上来的
X-Real-IP/X-Forwarded-For头来判断客户端真实 IP,而这些头没有做校验。任何人只要能直连这两个端口,就能伪造任意 IP,绕过基于 IP 的限流和封禁,也能污染日志里的 IP 记录。正确做法:只通过会自己覆写X-Real-IP的反向代理暴露 WSS,并用防火墙限制 21118/21119 只允许代理访问;不用 web 客户端就直接关掉。 - UDP 21116 经常是被忽略的那个。只开 TCP 会导致设备注册不上、或者能连但是打洞永远失败、全部退化到中继。
- 中继很吃带宽。P2P 成功时服务器几乎不耗流量,一旦退化成中继,画面流量全从你的 VPS 走,按流量计费的机器要留意。
- 首次装完立刻设永久密码并改成强密码,别用默认的临时密码长期放公网。ID 是公开可枚举的 9 位数,安全性完全压在密码和密钥上。
- 只从 rustdesk.com 或 GitHub Releases 下载,第三方站点的"汉化版/绿色版"有被植入的风险。
适用场景
- 自建远程办公:家里/公司各一台常开机器,永久密码 + 自建服务器,不依赖任何第三方
- IT 运维与技术支持:给客户/同事远程排障,比 TeamViewer 免费版不弹"疑似商用"
- 内网穿透式管理:一堆没公网 IP 的设备,统一挂到自己的 hbbs 上
- 对数据合规有要求的团队:连接元数据和画面流量都不出自己机房
- 替代 VNC:自带 NAT 穿透 + 现代编码 + 内置加密,比裸 VNC + 端口转发省事太多
二开与商业使用
- AGPL-3.0 是最需要留意的点:如果你修改了 RustDesk 并以网络服务的形式提供给外部用户,AGPL 要求你同样开放修改后的源码(包括服务端)。纯内部自用不受这条约束。
- 想换品牌、预置服务器、做签名版客户端而不想开源改动,官方卖 Pro 的自定义客户端生成器(支持 Windows x64、macOS arm64/x64、Linux、Android arm64)——这是"闭源定制"的合法路径。
- 中文社区文档很全(官方文档站有简体中文),Docker 部署、Synology(DSM 6 / 7.2)、Windows + PM2/NSSM 都有对应教程,自建基本不用自己踩。
相关链接
- 官网与下载:https://rustdesk.com
- 自建文档:https://rustdesk.com/docs/zh-cn/self-host/
- GitHub 仓库:https://github.com/rustdesk/rustdesk
一句话总结
一个自带走服务器端、自带 NAT 穿透、连 Wayland 登录界面都能啃的开源远程桌面——只要一台 1 核 1G 的 VPS,你就能把 TeamViewer 彻底换掉。