远程控制别再交月费,一台服务器自己管

迷你主机塞在电视柜后面,家庭服务器摆在阳台角落。想重启一个 Docker 容器、传个文件、装次更新,总不能每次都拖出显示器和键盘。远程控制软件因此成了刚需,但免费额度越收越紧,包月订阅又为一台自用机器付得肉疼。

XDA 撰稿人分享了自己的替换过程:过去一直靠 TeamViewer 管理迷你主机,稳定好用,但随着家里自建服务越来越多,付费方案里那些面向企业运维的高级功能几乎用不上——需求无非是连上自己的几台设备而已。最终换成了开源的 RustDesk,并把中转服务器也搬到了自己的机器上。

RustDesk 是一款免费开源的远程桌面工具,支持无人值守连接、文件传输、剪贴板共享和多显示器,客户端覆盖 Windows、Linux、macOS、Android 和 iPhone。它最大的区别在于:既可以用官方公共服务器,也能自己搭一套中转服务,让连接不经过别人的服务器。

一、先跑起来:Docker 部署服务端

服务端由两个组件构成,hbbs 负责 ID 注册与打洞,hbbr 负责中继转发,两个都要跑。在装好 Docker 的 Linux 机器上执行三条命令:

sudo docker image pull rustdesk/rustdesk-server
sudo docker run --name hbbs -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
sudo docker run --name hbbr -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr

几点要留意:--net=host 只在 Linux 上有效,作用是让服务看到真实来访 IP 而不是容器内网地址;Windows 上要去掉 sudo--net=host。如果连接有问题,先把 --net=host 去掉试试。-v ./data:/root 一定要挂上,升级或重建容器时数据才不会丢。看不到日志可以用 docker logs hbbs 查看。

二、放行端口

在防火墙和路由器上开放这几个端口,缺一个都可能连不上:

  1. 21115(TCP):NAT 类型检测。
  2. 21116(TCP 和 UDP 都要开):UDP 用于 ID 注册和心跳,TCP 用于打洞与连接。
  3. 21117(TCP):中继服务。
  4. 21114(TCP):网页控制台,仅专业版可用,开源版不需要。
  5. 2111821119(TCP):网页客户端专用。不用网页端就保持关闭——官方明确提示,直接暴露这两个端口存在伪造来访 IP 的风险。

三、取出公钥

首次运行 hbbs 时会自动生成一对密钥。到挂载出来的 data 目录里找到 id_ed25519.pub 文件,把里面的字符串复制出来备用。这是用于加密连接的公钥,和商业版的许可证密钥是两回事。

四、客户端指向自己的服务器

被控端和主控端都要设置一遍:

  1. 打开 RustDesk 客户端,点 ID 旁边的三点菜单 [ ⋮ ],选择”网络”。
  2. 点解锁按钮,按提示提升权限。
  3. 在”ID 服务器”填服务器地址,例如 hbbs.example.comhbbs.example.com:21116
  4. 在”密钥”栏粘贴上一步取到的公钥内容。
  5. 中继服务器和 API 服务器留空即可,RustDesk 会自动推导,中继默认指向 21117 端口。

设备多的时候不必逐台手填:在配好的那台机器上进”设置 → 网络”,解锁后点”导出服务器配置”,复制得到的字符串;换到新设备同样进”设置 → 网络”,解锁后点”导入服务器配置”,设置会自动填好,最后点”应用”。

注意事项

如果所在网络打洞成功率低,可以在 docker-compose 的 hbbs 环境变量里加上 ALWAYS_USE_RELAY=Y,强制走中继,稳定性换带宽。服务器建议放在有公网 IP 的机器上,否则外网设备找不到它。

来源:XDA Developers