在英国移动网络上调试 Tailscale:探索 NAT、DERP 和 IPv6
所属系列
- 网络与基础设施系列 (11 共 12)
引言
一开始只是一个简单的问题:“为什么 iPhone 使用移动数据时,无法通过 Tailscale 连接我的 MacBook?” 最后却变成了对 NAT 类型、中继服务器以及 IPv6 隐藏潜力的深入探索。这篇文章记录了整个技术排查过程、走过的弯路和最终结论。
我当时遇到的问题
- 使用英国移动数据时,iPhone 能通过 Tailscale 正常 SSH 到一台位于美国的 VPS。
- 但尝试连接家中使用 Hyperoptic 宽带的 MacBook 时,却失败了。
- MacBook 上运行
tailscale ping iphone超时;iPhone 上运行tailscale ping mac显示relay LHR,但仍然失败。 - 在同一个 Wi-Fi 网络中,iPhone ↔ Mac 完全正常。
问题来了:为什么连 VPS 可以,连 Mac 却不行?
继续往下读,最后发现只需要一个简单修复!
最初的线索
-
Mac 上 Tailscale netcheck 的初始结果:
IPv6: no IPv4: yes, behind NAT PortMapping: UPnP, NAT-PMP, PCP MappingVariesByDestIP: false→ 起初 Mac 没有 IPv6。它位于 NAT 后面,但路由器支持端口映射,因此不是对称型 NAT。
-
Ping 结果:
tailscale ping debian (VPS)→ 成功,使用直连 IPv4 路径。tailscale ping iphone→ 失败,即使通过中继(DERP LHR)也不行。
-
排除了休眠原因(Mac 已设置为永不休眠)。
发现双重 NAT
最初 Mac 位于双重 NAT 之后(家用路由器 + ISP 设备)。把路由器直接接上后:
- WAN IP 显示为
100.71.x.x,属于100.64.0.0/10,证实存在运营商级 NAT(CGNAT)。 - 结果:Mac 仍然无法通过 IPv4 直接访问。
尝试 IPv6
Hyperoptic 提供 IPv6(以下为说明用的虚构示例地址):
- 路由器获得了一个
/56前缀:2a01:abcd:1234::1/56 - Mac 获得了全局 IPv6:
2a01:abcd:1234::97d2 - 浏览器测试确认:Mac 可以通过 IPv6 从全球访问。
这是个突破:Mac 不再受 NAT 阻碍。
测试 iPhone
缺失的环节是 iPhone 的移动连接:
- iPhone 只使用移动数据访问 https://test-ipv6.com/(避开 Safari,以免开启了 Private Relay)时,结果显示:IPv6: no。
- 确认:iPhone 只有 IPv4(CGNAT)。
- Safari Private Relay 曾短暂让我们误以为已有 IPv6,但那只是 Apple 的代理。
结论:iPhone 的移动网络只有 IPv4,并使用 CGNAT。
为什么 VPS 能连,Mac 不能
- iPhone → VPS:VPS 有公网 IPv4,因此直连成功。
- Mac → VPS:Mac 可以向外发起连接,因此成功。
- iPhone ↔ Mac:两端都在 NAT/CGNAT 后面,没有直接路径,必须使用 DERP。
- 但移动运营商网络上的 DERP 中继(UDP)不可靠,导致丢包。
最终发现
-
Mac 没问题:有了 IPv6,它可以从全球访问。
-
VPS 没问题:公网 IPv4 让连接很容易。
-
最初的阻碍来自 iPhone 的移动运营商:
- 起初不支持 IPv6,只能困在 IPv4 CGNAT 中。
- DERP UDP 流量不稳定或被阻止,导致中继回退失败。
-
那个简单修复:后来,在正确激活英国 SIM 卡后,iPhone 突然获得了一个公网 IPv4(85.xxx.xxx.xxx)。这让 iPhone ↔ Mac 可以直接连接,无需 DERP。
可考虑的绕行方案
(如果你的移动网络没有公网 IPv4 地址)
- Mac 端:可以强制使用 DERP,确保走中继,但真正的问题在 iPhone 一侧。
- 另一种方式:让 VPS 充当 iPhone → Mac 流量的出口节点/中继。
- 长期解决办法:换一家提供公网 IP 地址或移动数据 IPv6 的运营商。
结论
这段漫长的排查让我看到,Tailscale 这类点对点 VPN 能否成功连接,有多依赖底层网络:
- CGNAT 会破坏 IPv4 的点对点连接。
- DERP 中继能救场,除非运营商过滤 UDP。
- IPv6 才是真正的解决办法,但前提是两端都支持。
在我们的情况里,Mac 已经准备好了,iPhone 的移动运营商却没有。得到的教训是:有时问题不在设备或 Tailscale,而在你与互联网之间那些看不见的网络策略。