type
Post
status
Published
date
Apr 30, 2026
slug
summary
本文记录了一次 Tailscale 远程连接变慢的完整排查过程:从
tailscale status 中发现连接家中 Mac mini 时走了海外 DERP 中继,到通过 tailscale netcheck 分析 UDP、IPv6、NAT 映射和最近 DERP 节点,最终确认问题不是设备故障,而是公司网络与家庭网络之间无法建立直连。为降低中继延迟,使用一台国内云服务器自建 DERP,并在 Tailscale ACL 中配置 derpMap。配置完成后,连接路径从 DERP(sfo/lax) 切换到 DERP(cn-self),延迟从几百毫秒甚至 2 秒左右降至 30~40ms,VNC 远程桌面体验明显改善。tags
Tailscale
DERP
category
技术分享
icon
password
js
最近发现从公司电脑连接家里的 Mac mini 时,Tailscale 延迟突然变高,VNC 变得非常卡。最开始以为是 Mac mini 的网络出了问题,但排查后发现,真正原因是 公司电脑和 Mac mini 无法建立直连,退回到了 Tailscale 海外 DERP 中继。
最终通过在自己的国内服务器上搭建 DERP,中继延迟从几百毫秒降到了 30~40ms,VNC 体验明显恢复。
一、问题现象
在公司 Windows 电脑上 ping 家里的 Mac mini:
能 ping 通,但是延迟很高:
再看 Tailscale 状态:
发现 Mac mini 这一行是:
这说明:
所以延迟高是正常的,因为流量绕到了海外。
二、先确认是哪条链路出问题
在 Mac mini 上查看 Tailscale 状态:
macOS 图形版 Tailscale 可能没有直接把
tailscale 命令加到 PATH,所以要用完整路径:测试 Mac mini 到服务器:
一开始可能是:
随后切到了 IPv6 直连:
说明:
三、查看 netcheck
公司 Windows 执行:
Mac mini 执行:
当时看到的关键信息是:
Windows:
Mac mini:
这里几个信息很重要:
1. UDP 是 true,不代表一定能直连
UDP: true 只能说明 UDP 可用,但 Tailscale 直连还要看两端 NAT、防火墙、运营商网络、公司网络策略等。2. MappingVariesByDestIP=true 会增加打洞难度
Mac mini 这边显示:
这表示家里网络的 NAT 映射会根据目标地址变化(坑爹的电信把网络改成大内网了,NAT4)。这样的 NAT 对打洞不太友好,可能出现:
3. 公司电脑没有 IPv6
Windows 这边显示:
所以它没法像服务器一样通过 IPv6 和 Mac mini 建立快速直连,只能依赖 IPv4 打洞。IPv4 打洞失败后,就会退回 DERP。
四、为什么 Mac mini 连服务器很快,但连公司电脑很慢?
这个问题的核心是:Tailscale 的直连不是按设备判断,而是按“每一对设备”判断。
可以理解成三条链路:
云服务器通常有公网 IP,网络环境简单,所以很容易直连。
而公司电脑在公司网络后面,家里 Mac mini 也在家庭 NAT 后面。两边都不是公网直连环境,中间又有公司网络、家庭路由器、运营商 NAT,就很容易打洞失败。
五、尝试过的方向:UDP 端口映射
Tailscale 默认常见端口是 UDP 41641,所以一开始考虑在家里路由器上做端口映射:
但是 macOS 图形版 Tailscale 当前没有
tailscale up --port=41641 参数:没有看到
--port。同时
netcheck 里看到的公网端口是随机的,例如:这说明单纯映射 41641 未必一定生效。
所以最后没有继续折腾固定端口,而是选择更稳定的方案:自建 DERP。
六、自建 DERP
1. DERP 的作用
DERP 是 Tailscale 的中继服务器。
当两台设备无法直连时,Tailscale 会通过 DERP 转发加密后的 WireGuard 流量。
默认 DERP 节点大多在海外,所以国内使用时可能出现:
如果自己在国内服务器上搭一个 DERP,就可以让无法直连的设备走自己的中继:
2. 准备条件
需要一台有公网 IP 的服务器,以及一个域名。
我的域名示例:
需要把 DNS 解析到这台服务器 IP。
服务器需要放行:
其中:
3. 安装 derper
服务器上安装 Go。
如果系统自带 Go 太老,可能会报错:
这说明 Go 版本太旧,需要安装新版 Go。
然后安装 derper:
安装后一般在:
确认:
4. 启动 derper
执行:
正常输出类似:
其中:
说明启动成功。
No mesh key configured 对单台 DERP 来说没问题,可以忽略。5. 如果访问域名看到 Nginx 404
一开始我访问域名看到:
这说明访问到的是 Nginx,不是 derper。
原因可能是:
可以查看端口占用:
正常 derper 应该是:
如果看到 Nginx 占用 80/443,可以停止并卸载 Nginx:
我这次实际还有一个问题:DNS 配错了服务器 IP。修正 DNS 后就正常了。
七、配置 Tailscale derpMap
进入 Tailscale 管理后台:
在 ACL JSON 顶层添加
derpMap:注意:不要覆盖原来的
acls、grants 等内容,只是在顶层增加一个 derpMap 字段。八、刷新客户端
配置完后,Windows 和 Mac mini 都需要刷新 Tailscale。
Windows:
如果还没刷新,可以重启服务:
Mac mini:
然后分别执行:
以及:
成功后会看到:
我这里 Windows 看到:
Mac mini 看到:
九、最终效果
公司电脑执行:
最终结果:
对比之前:
效果非常明显。
VNC 也明显变快了,鼠标、键盘、页面刷新都舒服很多。
十、配置 derper 开机自启
为了避免服务器重启后 derper 停掉,需要配置 systemd。
创建服务:
写入:
启用:
查看日志:
十一、排查命令汇总
Windows
Mac mini
DERP 服务器
检查 DNS:
十二、总结
这次问题的根因不是 Mac mini 网络坏了,而是:
排查时要重点看:
最终通过自建国内 DERP,把中继路径从:
优化成:
延迟从几百毫秒降到 30~40ms,VNC 体验明显改善。
- 作者:吕行者
- 链接:https://www.lvy.life/article/2026/04/30/3521f2f0-5182-8091-9ea0-ee9f13919838
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。






