RustDesk 自建远程桌面:告别 TeamViewer 的限速和弹窗

前言

远程桌面的需求其实很简单:我想从笔记本连回家里的台式机,不卡、不限制分辨率、不弹广告。

TeamViewer 以前是最省事的选择,直到它开始疯狂弹「疑似商业用途」—— 我明明只是连自己的电脑。AnyDesk 也好不了多少,免费版限制越来越多。至于 Windows 自带的 RDP,内网好用,外网就麻烦了。

RustDesk 是开源替代方案。它的模式跟 TeamViewer 一样 —— 客户端通过 ID 服务器找到对方,优先 P2P 直连。区别在于:你可以把 ID 服务器和中继服务器搭在自己机器上,完全不受第三方限制。

工作原理

RustDesk 有两个核心组件:

组件二进制端口做什么
ID / 信令服务器hbbsTCP 21115-21116, UDP 21116设备注册、NAT 打洞、连接协商
中继服务器hbbrTCP 21117, UDP 21119P2P 打洞失败时的流量中继

连接流程很简单:

  1. 两台设备都连到你的 ID 服务器注册
  2. 客户端 A 想连客户端 B → ID 服务器帮它们协商 NAT 打洞
  3. 打洞成功 → P2P 直连,数据不经过你的服务器(90%+ 的情况)
  4. 打洞失败 → 降级走中继服务器转发

绝大多数情况是 P2P 直连,延迟极低、带宽没瓶颈。中继只是兜底。

Docker 部署(3 分钟)

Terminal window
mkdir -p /opt/rustdesk && cd /opt/rustdesk
# 下载官方 docker-compose
wget https://rustdesk.com/oss.yml -O compose.yml
# 启动
docker compose up -d

启动后,关键文件在 ./data/ 目录下:

data/
├── id_ed25519 # 私钥(最重要!备份它)
├── id_ed25519.pub # 公钥(客户端配置用)
└── db.db2 # 设备注册数据库

拿到公钥:

Terminal window
cat ./data/id_ed25519.pub

记下这串字符,客户端配置要用。

端口要求

RustDesk 对端口要求比较具体,必须全部开放:

TCP 21115 — NAT 类型测试
TCP 21116 — 信令服务
UDP 21116 — ID 注册与心跳
TCP 21117 — 中继服务
UDP 21119 — 备用中继

如果你用 UFW:

Terminal window
sudo ufw allow 21115:21117/tcp
sudo ufw allow 21116/udp
sudo ufw allow 21119/udp

客户端配置

所有平台的客户端在这里下载:https://github.com/rustdesk/rustdesk/releases

装好之后点设置 → 网络:

  • ID 服务器:填你的服务器 IP 或域名
  • Key:填刚才拿到的 id_ed25519.pub 内容

填完点确定。如果显示「就绪」,说明连上了你的自建服务器。

然后两台设备都用同样的配置,之后它们就通过你的服务器发现对方、建立连接。

跟 TeamViewer / AnyDesk 比

RustDesk 自建TeamViewerAnyDesk
费用免费免费版有商业检测免费版有限制
数据路径你的服务器第三方服务器第三方服务器
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—— 之后想怎么远程就怎么远程。