RustDesk 自建远程桌面:告别 TeamViewer 的限速和弹窗
前言
远程桌面的需求其实很简单:我想从笔记本连回家里的台式机,不卡、不限制分辨率、不弹广告。
TeamViewer 以前是最省事的选择,直到它开始疯狂弹「疑似商业用途」—— 我明明只是连自己的电脑。AnyDesk 也好不了多少,免费版限制越来越多。至于 Windows 自带的 RDP,内网好用,外网就麻烦了。
RustDesk 是开源替代方案。它的模式跟 TeamViewer 一样 —— 客户端通过 ID 服务器找到对方,优先 P2P 直连。区别在于:你可以把 ID 服务器和中继服务器搭在自己机器上,完全不受第三方限制。
工作原理
RustDesk 有两个核心组件:
| 组件 | 二进制 | 端口 | 做什么 |
|---|---|---|---|
| ID / 信令服务器 | hbbs | TCP 21115-21116, UDP 21116 | 设备注册、NAT 打洞、连接协商 |
| 中继服务器 | hbbr | TCP 21117, UDP 21119 | P2P 打洞失败时的流量中继 |
连接流程很简单:
- 两台设备都连到你的 ID 服务器注册
- 客户端 A 想连客户端 B → ID 服务器帮它们协商 NAT 打洞
- 打洞成功 → P2P 直连,数据不经过你的服务器(90%+ 的情况)
- 打洞失败 → 降级走中继服务器转发
绝大多数情况是 P2P 直连,延迟极低、带宽没瓶颈。中继只是兜底。
Docker 部署(3 分钟)
mkdir -p /opt/rustdesk && cd /opt/rustdesk
# 下载官方 docker-composewget https://rustdesk.com/oss.yml -O compose.yml
# 启动docker compose up -d启动后,关键文件在 ./data/ 目录下:
data/├── id_ed25519 # 私钥(最重要!备份它)├── id_ed25519.pub # 公钥(客户端配置用)└── db.db2 # 设备注册数据库拿到公钥:
cat ./data/id_ed25519.pub记下这串字符,客户端配置要用。
端口要求
RustDesk 对端口要求比较具体,必须全部开放:
TCP 21115 — NAT 类型测试TCP 21116 — 信令服务UDP 21116 — ID 注册与心跳TCP 21117 — 中继服务UDP 21119 — 备用中继如果你用 UFW:
sudo ufw allow 21115:21117/tcpsudo ufw allow 21116/udpsudo ufw allow 21119/udp客户端配置
所有平台的客户端在这里下载:https://github.com/rustdesk/rustdesk/releases
装好之后点设置 → 网络:
- ID 服务器:填你的服务器 IP 或域名
- Key:填刚才拿到的
id_ed25519.pub内容
填完点确定。如果显示「就绪」,说明连上了你的自建服务器。
然后两台设备都用同样的配置,之后它们就通过你的服务器发现对方、建立连接。
跟 TeamViewer / AnyDesk 比
| RustDesk 自建 | TeamViewer | AnyDesk | |
|---|---|---|---|
| 费用 | 免费 | 免费版有商业检测 | 免费版有限制 |
| 数据路径 | 你的服务器 | 第三方服务器 | 第三方服务器 |
| P2P 直连 | 支持(90%+) | 支持 | 支持 |
| 全平台 | Windows/Mac/Linux/iOS/Android | 全平台 | 全平台 |
| 文件传输 | 支持 | 支持 | 支持 |
| 开源 | 是(AGPL) | 否 | 否 |
RustDesk 自建的额外好处是:延迟取决于你的服务器位置。把服务器放在离自己近的 VPS 上(比如国内的腾讯云 / 阿里云),P2P 打洞失败走中继时也不会很卡。
踩坑记录
客户端总是走中继
如果两台设备明明在同一个局域网,但还是走中继而没 P2P 直连:
- 检查 UDP 21116 端口是否双向开放 —— 很多云服务商默认屏蔽 UDP
- 检查双方 NAT 类型。对称 NAT 打洞成功率低,但 RustDesk 的 NAT 穿透算法已经比大多数方案强了
升级后设备全部失联
RustDesk 服务端升级后,如果换了新的 id_ed25519 密钥,所有已配对的设备都会失联。
解决方案:升级前备份 ./data/ 目录,升级后如果密钥变了,把旧密钥覆盖回去。
带宽规划
大多数连接是 P2P 直连,不经过你的服务器。只有打洞失败时才走中继。中继带宽按每设备 3Mbps 估算就够了 —— 毕竟只是兜底。
总结
RustDesk 自建服务器解决了远程桌面的终极痛点:数据和控制权都在自己手里。没有弹窗、没有限速、没有「疑似商业用途」的误判。
Docker 一条命令部署两个组件,客户端填个 Key,就可以跟所有设备互联。90% 以上的场景走 P2P 直连,延迟跟内网几乎没区别。
如果你受够了 TeamViewer 的各种限制,花十分钟搭一个 RustDesk—— 之后想怎么远程就怎么远程。