大家好,我是 Jason。
上一篇我写了添置 M5 Ultra 跑 Agent,后台收到不少私信,问我出门在外怎么连回家里的这堆机器。
这几年我把市面上的工具用了一遍:ToDesk 付费版、HopToDesk、TeamViewer、VNC。测到最后,我把所有主力设备切到了自建 RustDesk。
代码开源,中继自己搭,连接走自己的云服务器。Rust 写的底层组件占资源极低,点开窗口画面直接出来。
把用到的配置、脱敏后的参数和踩坑过程写在这里。

商业工具的卡点
商业软件有统一的商业模式:免费版限制帧率在 30 帧,画质开动态自适应。网络有一点抖动,屏幕立刻糊成一片。
买过付费版,高峰期照样会绕进公共中继服务器。代码和操作在谁的机器里过了一道,谁心里也没底。
自建 RustDesk 的逻辑相反:设备能直连就走局域网或者打洞,打不通才走自己的云服务器中继。传输走 Ed25519 加密,两端握手靠私钥认证。

服务端跑起来
服务端找一台带独立公网 IP 的轻量云服务器。
安全组放行四个端口:
| 端口 | 协议 | 作用 |
|---|---|---|
21115 |
TCP | NAT 类型探测 |
21116 |
TCP / UDP | 设备注册与打洞信令(UDP 容易漏配) |
21117 |
TCP | 流量中继转发 |
21114 |
TCP | 心跳与状态接口 |
部署用 systemd 启动两个二进制文件 hbbs 和 hbbr。
在启动命令后加 -k _,强制客户端携带 Key 才能连入,避免 IP 暴露后被扫描抓去当中继。
启动后在数据目录拿到生成的公钥:
cat /opt/rustdesk-server/data/id_ed25519.pub
拿到公钥字符串,服务端配置就结束了。

客户端配置与画质锁死
在主控 Mac 和被控 Mac 打开 RustDesk 设置,进入网络面板,填入自建服务器 IP 和刚刚拿到的公钥 Key。
要做到操作跟手、文字清晰,不要留默认参数。
打开客户端配置文件 RustDesk2.toml 与对应设备的 peers 文件,改写这几项:
[options]
custom-rendezvous-server = '47.103.x.x'
key = '0E9Haq4cDf+dxFq2D2eJkc8mkQdEhGy0LfpSwvda02s='
direct-server = 'Y'
enable-hwcodec = 'Y'
enable-abr = 'N'
codec-preference = 'h265'
custom-fps = '60'
direct-server = 'Y':开启本地监听。同一局域网或者通过内网穿透直达时,直接建立点对点连接,不消耗云服务器带宽。enable-hwcodec = 'Y':调用 Apple Silicon 的硬件编解码器,编码延迟压在 5 毫秒内,机器不发烫。enable-abr = 'N':关掉自适应码率,锁死 60 帧,编辑器里的代码不再出现马赛克。
连上家里的 Mac Studio 实机看一眼状态监控面板:

网络打洞直连,帧率拉满,H.265 硬件编解码开启,画质和在本地屏幕前写代码没区别。

踩过的坑与底层修正
很多人搭完觉得卡,问题通常不在 RustDesk 自身,在系统层。
1. 关掉延迟确认(Delayed ACK)
macOS 默认会对小数据包做延迟确认,攒满或者超时再回包。打字和移动鼠标的微小动作,会被系统拖出几十毫秒的粘滞感。
在终端执行:
sudo sysctl -w net.inet.tcp.delayed_ack=0
sudo sysctl -w net.inet.tcp.sendspace=524288
sudo sysctl -w net.inet.tcp.recvspace=524288
关掉延迟等待,把 TCP 缓冲扩容到 512KB,鼠标移动立刻顺畅。
2. 绕开代理软件的 Fake-IP 拦截
Mac 如果常驻 TUN 模式的代理工具,自建服务器的流量会被抓进虚拟网卡,甚至绕出国兜一圈,延迟从几毫秒涨到几百毫秒。
写一个启动守护脚本,开机把服务器 IP 绑定到物理网卡网关:
GW=$(route -n get default -ifscope en0 | awk "/gateway:/ {print \$2}")
route -n add -host 47.103.x.x "$GW"
同时把物理网卡的真实内网 IP 写进 RustDesk 配置,避免上报给中继服务器的是代理网卡的假 IP。
3. 无头 Mac Studio 的光标重影
机房或家里的 Mac Studio 不接物理屏幕,可以用虚拟屏幕工具挂载一个 Retina 虚拟显示器。
但虚拟屏没有物理 GPU 光标层,WindowServer 会把鼠标画成一个软件顶层窗口。老接口抓屏时,会把这个窗口录进视频画面。
你在主控端移动鼠标,会看到一个本地的真实光标,后面跟着一个延迟 30 毫秒的视频虚影,双鼠标在屏幕上追逐。
写一个轻量常驻工具,在后台调用 SkyLight 接口将光标从视频合成层隐藏,保留系统当前指针形状的事件传递。画面里的第二只假鼠标消失,主控端本地光标直接操控,手感和坐在这台机器前一致。

最后
云服务器选按流量计费,峰值带宽拉到 50M 或 100M。
平时两端能直连就不走中继,一个月中继流量花不到两块钱。
出门掏出笔记本,点开家里的 Mac Studio,3 毫秒延迟,满帧 60 帧。工具放在自己手里,干活踏实。