
想要一套流量永远不经过供应商服务器的远程桌面?本指南演示如何在每月 $5 的 VPS 上端到端自托管中继 —— 要安装什么、如何加固,以及如何应对官方文档常常忽略的故障模式。
对大多数用户来说,厂商托管的 relay(TeamViewer、AnyDesk、GoDesk)已经足够。端到端加密意味着中继只能看到密文——无法读取你的屏幕帧、按键或文件。但如果你有以下任一约束,“足够”并不等同于“理想”:
- 合规性:受监管的行业,数据不得经过任何第三方基础设施(法律、国防、某些医疗领域)。
- 主权:你不希望远程访问的元数据(谁连接到什么、何时、持续多长时间)被任何人收集。
- 规模下的成本:如果你通过中继运行 100+ 台设备,厂商费用会累加——在 $5 VPS 上自托管中继可以处理数千个会话。
- 隔离或受限网络:厂商中继无法从你的环境访问。
如果以上任一项适用于你,本指南将演示如何在基础 VPS 上端到端自托管。参考栈是 RustDesk 的 hbbs + hbbr,GoDesk 和 RustDesk 客户端都可以连接。包括 TLS 在内的总配置时间:约 30 分钟。
你要搭建的内容
两个服务:
- hbbs(rendezvous 服务器):处理初始握手。双方客户端短暂连接以发现彼此、交换公钥,并判断是否可直接 P2P 连接。监听 TCP/UDP 21115-21117。
- hbbr(中继服务器):如果直接 P2P 失败(NAT、防火墙),流量通过中继转发。监听 TCP 21117(某些场景也使用 UDP)。
中继仅在 P2P 无法建立时才会介入——对于大多数消费者场景来说,由于 NAT 这是常态,但在同一局域网环境中较少见。因此即便自托管中继,你也只需为真正需要中继的会话支付 VPS 带宽费用。
步骤 1:选择 VPS
带宽是主要资源。CPU 和内存要求很低(中继只是转发字节)。到 2026 年,合理的选择有:
- Hetzner CX22(€4/mo,2 vCPU,4 GB RAM,20 TB 带宽,欧盟数据中心)——性价比最高。
- DigitalOcean Basic Droplet($6/mo,1 vCPU,1 GB,1 TB 带宽)——用户体验好,覆盖美欧区域。
- OVH VPS Starter(€3.50/mo,2 vCPU,2 GB,不限流量)——适合高带宽场景。
- Hetzner Storage Box——不是 VPS,列出是因为部分读者会问。不能用于本方案;你需要一台真正的服务器。
选择靠近连接客户端的机房区域——这关系到延迟,因为中继流量受往返时延影响。
步骤 2:设置服务器
创建一台全新的 Ubuntu 22.04 或 Debian 12 VPS。以 root 身份通过 SSH 登录。
# Update + harden basics
apt update && apt upgrade -y
apt install -y ufw fail2ban docker.io docker-compose-plugin
ufw allow 22/tcp # SSH
ufw allow 21115:21119/tcp
ufw allow 21115:21119/udp
ufw enable
systemctl enable --now docker
不要跳过防火墙。RustDesk 的默认配置只暴露必要端口,其它端口应当锁定。
步骤 3:通过 Docker 运行 hbbs + hbbr
创建文件 /opt/godesk-relay/docker-compose.yml:
services:
hbbs:
image: rustdesk/rustdesk-server:latest
container_name: hbbs
restart: unless-stopped
ports:
- "21115:21115/tcp"
- "21116:21116/tcp"
- "21116:21116/udp"
- "21118:21118/tcp"
command: hbbs -r your-server.example.com:21117
volumes:
- ./data:/root
hbbr:
image: rustdesk/rustdesk-server:latest
container_name: hbbr
restart: unless-stopped
ports:
- "21117:21117/tcp"
- "21119:21119/tcp"
command: hbbr
volumes:
- ./data:/root
将 your-server.example.com 替换为实际主机名。启动:
cd /opt/godesk-relay
mkdir -p data
docker compose up -d
docker compose logs --tail 20
首次启动时你应在日志中看到 hbbs 打印的公钥——从日志中保存它(数据卷中的 id_ed25519.pub),因为客户端用它来验证它们连接的是你的中继而不是中间人。
步骤 4:配置 DNS
为 relay.yourdomain.com 添加 A 记录,指向 VPS 的 IP。RustDesk 也接受裸 IP,但如果将来迁移,主机名更灵活。
步骤 5:将客户端指向自托管中继
这是大多数指南略过的部分。每个客户端需要三个配置值:
- ID 服务器 =
relay.yourdomain.com:21116 - 中继服务器 =
relay.yourdomain.com:21117 - 公钥 = 来自 VPS 的
data/id_ed25519.pub的内容
在 Windows / macOS / Linux 上:
- 打开 GoDesk 或 RustDesk 客户端。
- 设置 → 网络 → ID/Relay server。
- 输入上述三项值。保存。
- 重启客户端。
状态指示应在几秒内变为绿色,表示已在你的中继上注册。若始终为红色,检查防火墙规则并确保证公钥完全匹配。
步骤 6:添加 TLS(可选,但推荐)
默认的 RustDesk 协议在应用层已经加密(你复制的公钥是其中一部分)。在其上再加一层 TLS 可提供额外保护,防御某些被动网络攻击。实现方法是在中继端口前放置一个反向代理(nginx 或 Caddy)。
Caddy 版本(更简单):
relay.yourdomain.com {
reverse_proxy /ws/* localhost:21118
reverse_proxy * localhost:21115
}
Caddy 会自动签发 Let's Encrypt 证书。更新客户端以使用启用 TLS 的 443 端口。
步骤 7:备份密钥
data/ 目录包含 rendezvous 服务器的密钥对。如果丢失,所有客户端都必须用新的公钥重新配置。请备份:
# Local backup
rsync -avz vps:/opt/godesk-relay/data/ ~/godesk-relay-backup-$(date +%Y%m%d)/
# OR copy the two key files
scp vps:/opt/godesk-relay/data/id_ed25519* ~/godesk-keys/
将备份存放在离线位置。如果 VPS 被攻破,你需要能够用相同的密钥启动新服务器,以便现有客户端在不重新配置的情况下继续工作。
文档未提及的故障模式
故障 1:客户端无法连接到中继。90% 的情况是防火墙问题。检查 ufw status,并确认云提供商的安全组也放通了相同端口;从客户端运行 nc -vz relay.yourdomain.com 21116 以验证可达性。
故障 2:P2P 总是回退到中继。对称 NAT 或严格的企业防火墙会强制所有流量走中继。这是正常的——性能通常不错,但会产生带宽计费。为 relay.yourdomain.com 选择高带宽的 VPS 方案。
故障 3:中继进程崩溃且未重启。Docker 的 restart: unless-stopped 能处理大多数情况。在 cron 中加入 docker compose ps 并在容器缺失时告警。
故障 4:SSL 证书过期。如果使用 Caddy,这会自动处理——它会在到期前 30 天续期。如果使用 nginx + certbot,请设置 cron 自动续期。certbot.eff.org 有官方指南。
带宽估算
质量在此处很重要。粗略估算:
- 低质量(以文本为主的工作):约 50 KB/s = 180 MB/小时
- 中等(常规办公):约 200 KB/s = 720 MB/小时
- 高质量(视频、设计):约 1 MB/s = 3.6 GB/小时
一台 Hetzner CX22(每月 20 TB 带宽)大约可支持每月 5,500 小时的高质量会话——远超个人或小团队的需求。20 TB 的上限对有数百台设备的组织来说更为相关。
预构建选项:GoDesk 的可自托管中继
以上均为使用 RustDesk 开源栈的手动方式。GoDesk 发布了同样的 hbbs/hbbr 自托管打包,预置了合理的默认配置。如果你不想管理 Docker compose 文件,请参阅 我们的自托管指南——相同架构,提供一条命令的安装脚本,封装了上述步骤。
何时不应自托管
自托管会增加运维负担:监控、密钥备份、系统更新、证书续期。如果你的用例只是“我想远程访问家用电脑”,厂商托管的中继(免费 GoDesk 方案处理 5 GB/月)远比长期运行 VPS 要省心。
只有在有充分理由时才自托管——合规、主权或规模。若仅仅是“看起来很酷”,建议不要;运维成本最终会追上你。
回顾
- $5/月 的 VPS,位于你偏好的区域。
- Docker + UFW + RustDesk 的 hbbs/hbbr 容器。
- 指向 VPS 的 DNS A 记录。
- 每个客户端的三项配置值(ID 服务器、中继服务器、公钥)。
- 备份密钥。
- 可选:通过 Caddy/nginx 添加 TLS。
端到端配置时间:30 分钟。持续维护:最小化。结果是:你的远程桌面流量不再经过他人的基础设施。