RustDesk自用远程加密通讯工具

rustdesk-自用远程加密通讯工具

RustDesk 是什么:一个可以完全自建的远程桌面工具

RustDesk 是一款用 Rust 语言编写的开源远程桌面软件,支持 Windows、macOS、Linux、Android、iOS 以及浏览器 Web 端,功能上对标 TeamViewer 和向日葵:只要输入对方的 ID,就能看到对方的屏幕并操作鼠标键盘。它与商业软件最大的区别在于,RustDesk 允许把 ID 服务器(信令)和中继服务器都部署在自己的机器上,两端之间的音视频流和键鼠数据经过端到端加密后,不再经过任何第三方服务器。对于经常帮家人朋友远程修电脑、或者需要在多台自有设备之间互控的用户来说,自建的收益很直接:延迟更低、隐私暴露更少,也不会遇到商业软件那种“疑似商用”就限速的尴尬。

自建服务器的架构:hbbs 与 hbbr 各自负责什么

自建 RustDesk 只需要两个程序:hbbs 和 hbbr。hbbs 是 ID 与信令服务器,负责客户端 ID 注册、交换双方的网络信息并撮合连接;hbbr 是中继服务器,当两端因为 NAT 类型严格或跨运营商而无法直连时,所有流量改由它转发。两者通常部署在同一台 VPS 上,2 核 1G 的小机器就能带几十台设备,真正吃带宽的是 hbbr。

端口占用必须记牢,自建失败十有八九是漏了 UDP:

  • TCP 21114:API 端口(可选,Web 客户端需要)
  • TCP 21115:NAT 类型测试
  • TCP 21116 与 UDP 21116:ID 注册与心跳,UDP 21116 最关键,被拦会直接提示“ID 服务器无响应”
  • TCP 21117:中继端口,由 hbbr 监听
  • TCP 21118 / 21119:Web 客户端使用的 WebSocket 端口(可选)

服务器端部署:Docker 方式(推荐)

先拉取官方镜像,再分别启动 hbbs 和 hbbr。第一次启动 hbbs 时它会在数据目录生成一对 ed25519 密钥,把公钥记下来,稍后要填进客户端:

docker run --name hbbs --restart always -d \
  -p 21115:21115 -p 21116:21116 -p 21116:21116/udp \
  -p 21118:21118 \
  -v /root/rustdesk:/root \
  rustdesk/rustdesk-server hbbs -r relay.example.com:21117

docker run --name hbbr --restart always -d \
  -p 21117:21117 -p 21119:21119 \
  -v /root/rustdesk:/root \
  rustdesk/rustdesk-server hbbr

其中 -r relay.example.com:21117 是在告诉 hbbs:两端打不通时,让它们去这个地址走中继。容器跑起来后取公钥并看日志:

cat /root/rustdesk/id_ed25519.pub
docker logs hbbs | tail -20
docker ps | grep rustdesk

服务器端部署:二进制 + systemd 方式

不想用 Docker 也可以下载官方发布包,解压后手动注册为 systemd 服务,升级方便、日志统一走 journalctl:

wget https://github.com/rustdesk/rustdesk-server/releases/latest/download/rustdesk-server-linux-amd64.zip
unzip rustdesk-server-linux-amd64.zip -d /opt/rustdesk
cd /opt/rustdesk && chmod +x hbbs hbbr

# 新建 /etc/systemd/system/hbbs.service
[Unit]
Description=RustDesk ID Server
After=network.target

[Service]
ExecStart=/opt/rustdesk/hbbs -r relay.example.com:21117
WorkingDirectory=/opt/rustdesk
Restart=always

[Install]
WantedBy=multi-user.target

systemctl daemon-reload && systemctl enable --now hbbs hbbr
systemctl status hbbs --no-pager

把域名解析到服务器 IP 即可,不需要额外的反向代理;如果一定要走 nginx,记得同时转发 WebSocket 并保留真实来源 IP。

放行端口:安全组、系统防火墙、面板防火墙三层都要查

很多“自建成功了但客户端一直转圈”的案例,最后都卡在防火墙。云厂商安全组、服务器上的 firewalld/ufw、以及宝塔面板的“系统防火墙”是三套互相独立的策略,任何一层没放行都会失败,其中 UDP 21116 最常被默认策略丢掉:

# firewalld
firewall-cmd --permanent --add-port=21115-21119/tcp
firewall-cmd --permanent --add-port=21116/udp
firewall-cmd --reload

# ufw
ufw allow 21115:21119/tcp && ufw allow 21116/udp

# 宝塔面板:安全 → 防火墙 → 添加端口规则,TCP 21115-21119 与 UDP 21116

客户端配置:其实只需要改三个地方

安装客户端后进入“设置 → 网络”:ID 服务器填写服务器的域名或 IP(纯地址,不要带 http:// 前缀);中继服务器填写 你的域名:21117,也可以留空由 hbbs 自动下发;Key 填前面 cat 出来的公钥。保存后回到主界面,状态显示“就绪”即表示注册成功。手机端的路径完全一样:设置 → 网络 → 服务器,填好后建议重启一次 App。

常见问题排查

  • 提示“未就绪 / 无法连接 ID 服务器”:先从外网测一次 UDP,例如 nc -vuz 你的IP 21116;再确认客户端里填的地址没有多余前缀,也没有把 21117 写进 ID 服务器一栏。
  • 能连上但画面明显卡顿:说明流量走了中继。检查两端运营商是否跨网、能否启用 IPv6 直连;中继带宽不足时,可以在服务器上开启 BBR 拥塞控制提升吞吐。
  • 每次连接都要输密码:被控端“设置 → 安全”里配置固定密码,无人值守场景勾选“启用固定密码”,再配合开机自启动。
  • 客户端全部提示 Key 不匹配:删除数据目录会重新生成密钥对,此时所有客户端都要重新填写新的 Key。
  • 只有局域网内能连:多半是两边都在大内网(运营商级 NAT),必须依赖 hbbr 中继,确认 TCP 21117 已放行。

安全建议

自建并不等于绝对安全。不要把 21116 端口对全网开放的同时还关闭鉴权;被控端请使用强密码,服务端与客户端保持升级(历史版本修复过若干安全问题);有条件时在外层再套一层 VPN,或者只允许白名单 IP 访问 ID 服务器。给陌生人提供“提供 ID 即可远程操作”的服务时,务必当面确认对方身份,操作结束后立即断开连接并重置密码。

各平台客户端下载地址(原有整理)

Windows 下载地址

https://disk.gitgit.ee/s/FOvOsT(国际线路)

(中国大陆线路)

Apple Mac OS Intel 下载地址

https://disk.gitgit.ee/s/96FLlJ(国际线路)

(中国大陆线路)

Apple Mac OS M 系列下载地址

https://disk.gitgit.ee/s/EvRDT0(中国大陆线路)

Android 手机下载地址

rustdesk-1.3.6-aarch64.apk:https://disk.gitgit.ee/s/oYTFEX

rustdesk-1.3.6-armv7.apk:https://disk.gitgit.ee/s/0UZJEl

rustdesk-1.3.6-universal.apk:https://disk.gitgit.ee/s/RLaQ2O

rustdesk-1.3.6-x86_64.apk:https://disk.gitgit.ee/s/ONWBkQ

RustDesk 客户端主界面,显示本机 ID 与连接状态提供 ID 即可远程操作,放心使用绝无后门。

进阶:自建 Web 客户端与统一管理

server 端从 1.2 版本起附带了一个简易的 Web 控制台,只要额外放行 TCP 21114、21118、21119,就可以在浏览器里直接访问 http://你的域名:21114 登录查看已注册的设备。它适合临时用别人的电脑救急:不用安装任何客户端,登录网页就能发起连接。缺点是没有移动端浏览器适配,且必须走 HTTPS 才安全,生产环境建议在前面套一层 nginx 并申请证书。

带宽与成本估算

直连模式下 hbbs 只传信令,流量可以忽略;一旦走 hbbr 中继,画面流量就全部经过你的服务器。以默认画质估算,办公类操作约 1~3 Mbps,看视频或做设计可能到 8~15 Mbps。也就是说,一台 1TB 月流量的 VPS,如果长期靠中继,大约能支撑 100~200 小时的中等强度使用。想省钱的关键是把直连打通:两端都不在运营商级 NAT 后面时,连接会优先走 P2P,几乎不消耗服务器带宽。用 docker stats 或云厂商的流量监控观察 hbbr 容器的出网曲线,就能判断自己是否长期处于中继状态。

相关阅读

自建中继服务器对带宽和单连接吞吐很敏感,建议配合 BBR 加速脚本集合(BBR Plus / 原版 / 魔改 / LotServer) 一起使用;如果服务器本身还需要长期远程维护,可以参考 SSH / STelnet 远程登录配置教程;软路由和旁路由场景下的内网穿透方案,可以看 OpenWrt 插件库整理。