RustDesk指南:127k星开源远程桌面,自建服务器摆脱商业判定

项目:rustdesk/rustdesk | 星数:127503 | 语言:Rust+Flutter | 协议:AGPL-3.0 | GitHub仓库

更新日期:2026-10-30 · 作者:CodeArts 编辑部

TeamViewer 的免费额度又一次用完

帮客户处理线上问题,TeamViewer 提示"疑似商业用途"直接断开,AnyDesk 也弹了付费提醒。那天我换成 RustDesk:127503 星、AGPL-3.0、开源可自建,客户端连上自己的服务器,既没有商业判定,也没有连接时长限制。从那次起它成了我远控的默认工具。

RustDesk 的架构分两部分:客户端(Rust 核心 + Flutter 界面,全平台)和 中继服务器(hbbs 信令 + hbbr 中继,Rust 单二进制)。不建服务器也能连走官方公共服务器,但延迟和稳定性不保证,正规用法还是自建。

先分清 hbbs 和 hbbr

组件端口作用
hbbs21115(TCP) / 21116(TCP+UDP) / 21118(Web)信令服务器,负责 ID 注册与连接协商
hbbr21117(TCP) / 21119(Web)中继服务器,双方无法直连时转发流量

21116 的 UDP 端口最容易被忘掉——它负责 NAT 穿透探测,不开的话所有连接都会退化成走中继,速度会明显变慢。

部署自己的服务器

# 方式一:Docker Compose(推荐)
mkdir -p /opt/rustdesk && cd /opt/rustdesk

cat > docker-compose.yml <<'EOF'
services:
  hbbs:
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r relay.example.com:21117
    network_mode: host
    volumes:
      - ./data:/root
  hbbr:
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    network_mode: host
    volumes:
      - ./data:/root
EOF

docker compose up -d

# 查看自动生成的公钥
cat ./data/id_ed25519.pub

启动后把 id_ed25519.pub 的内容抄下来,客户端填写服务器地址时需要它。这把密钥对是身份验证的核心,只放公钥给客户端,私钥绝不分发。

客户端配置三行搞定

在客户端的「ID/中继服务器」设置里填:

ID 服务器:relay.example.com
中继服务器:relay.example.com
Key:上一步拿到的公钥内容

如果只填 ID 服务器不填中继,直连失败时会连不上。建议两个都填。另外记得把 relay.example.com 换成真实可解析的域名或公网 IP,别填内网地址,否则外网设备无法注册。

生产环境的四件必做事项

  1. 固定密钥:不指定密钥时每次重启服务器都会重新生成,所有客户端立刻失效。用 -k _ 参数复用已有密钥文件。
  2. 防火墙只开必要端口:21115 到 21119 够用,别把整个 host 网络无防护暴露。
  3. 用反向代理做 Web 版:需要浏览器访问时,把 21118/21119 通过 Nginx 加 TLS 转发。
  4. 定期备份 data 目录:里面有密钥对与设备注册信息,丢了就得全网重配。

第一条是我最想强调的。第一次部署时我用了默认启动,两周后升级镜像重启,所有人的 ID 都变了,一台台打电话重新设置,代价很高。

和 TeamViewer / AnyDesk / 向日葵的比较

维度RustDeskTeamViewerAnyDesk
费用自建免费商业使用需授权商业使用需授权
数据路径自己的服务器厂商云厂商云
延迟取决于服务器位置,通常很好优秀优秀
易用性需要自建与配置开箱即用开箱即用
文件传输/剪贴板支持支持支持

如果只是偶尔帮亲戚看电脑,官方公共服务就够;如果是给公司做技术支持的长期方案,自建服务器是唯一不踩商业判定和按时长收费的路线。

常见问题

自建服务器一定要用 Docker 吗?

不一定。hbbs 和 hbbr 都是单个 Linux 二进制,直接下载后 systemd 托管即可,资源占用更低。Docker 的好处是升级与回滚方便,推荐新手用 Docker,追求极致轻量用二进制。

连接一直显示"未就绪"怎么办?

先确认 21116 的 TCP 与 UDP 端口都放通,UDP 没开会让 NAT 探测失败;再检查客户端填写的 ID 服务器地址是否能从外网解析;最后看 hbbs 日志里是否有注册请求进来。多数是防火墙漏了 UDP。

能用自己的设备做服务器吗?

可以,但需要公网可达。家用宽带没有公网 IP 时,无法被外网客户端连上,需要借助云服务器或内网穿透。中继流量会占用带宽,家用上行带宽通常撑不住多人同时远控。