你把 iPhone 插上充电,一分钟后 Mac 上的 VPN 就不再转发流量。系统设置里多出一个名为 iPhone USB 的服务,最直观的做法是把它删掉。这个做法往往是错的。这个服务可能是手机的个人热点,也可能是 Xcode 和设备工具与手机通信的链路,两者行为差别够大,必须先弄清是哪一个再谈删除。

第 1 步:读懂手机到底创建了什么服务

打开系统设置,进入网络,分别在手机断开和插上时对比服务列表。在当前 macOS 上,这个服务显示为 iPhone USB。注意它是否活跃、处在服务顺序的哪一位、Mac 是否拿它当默认路由。服务顺序很关键,因为 macOS 选的是能到达目的地的最高活跃服务,而不是你认得名字的那个。

Apple 的 个人热点说明 描述了机制:只要手机上的个人热点开着,用 USB 连接就可能让 Mac 走手机的蜂窝网络,即使你只想充电。这不是 VPN 客户端的问题,路由表只是在跟随一个比 Wi-Fi 更早起来的服务。

如果服务存在,但插着手机时一直不活跃,那你看到的更可能只是充电连接或设备链路,而不是热点。请保留这个区分,因为接下来两步是去验证它,而不是靠图标猜。

第 2 步:看清 VPN 端点走的是哪条路由

要读的是到 VPN 服务器解析地址的路由,不是到某个网站的路由。route -n get 只读,会打印内核将使用的接口和网关,两行都要看。

scutil --dns | head -20
route -n get 203.0.113.10

上面的地址是文档占位符。换成你客户端显示的端点,IPv6 端点则用 route -n get -inet6。分别在手机断开和插上时对比输出,两次读取之间不要增删路由。如果接口从 en0 变成了 iPhone USB 接口,说明热点路径赢了这次查找,VPN 的外层连接已经在走蜂窝网络。

路由变化并不能解释所有故障。客户端仍可能连上服务器,却在隧道内部流量上失败,因为新路径的 MTU 不同,或者运营商封了协议。改动任何东西之前先读客户端自己的报错:外层握手超时指向可达性,而隧道已建立却不再转发流量,指向 MTU、DNS 或策略。

第 3 步:把热点和设备通信链路分开

Xcode 15 及更新版本会通过包含链路本地 IPv6 的网络通道与 USB 连接的设备通信,所以开发用的 Mac 上可能多出一个与上网无关的接口。Apple 的技术说明 TN3158 记录了这一行为,并提醒 VPN 或安全过滤可能干扰它。这与热点问题正好相反:VPN 不是因为手机提供了网络才坏,而是设备连接被 VPN 截走了。

不抓包也能靠两个观察把情况分开。第一,看接口上是有可路由地址和默认路由,还是只有链路本地 fe80:: 地址;只有链路本地就意味着没有上网路径。第二,退出 VPN,看 Xcode 能否重新连到设备。如果能,说明 VPN 的路由或内容过滤截住了链路本地流量,修复应落在分隧道或过滤配置里,而不是网络面板。

ifconfig | grep -A4 -E '^en[0-9]+:'
netstat -rn -f inet6 | head

不要只看接口名。macOS 会随设备插拔创建和销毁这些接口,en 编号是运行时分配的,同一台 Mac 重启或换线后编号可能不同。

第 4 步:每次只改一个变量地复现故障

知道涉及哪个服务之后,按固定顺序复现问题。先让手机断开、VPN 连着。在个人热点关闭的情况下插上手机,等网络列表稳定,再执行一次路由查询。拔掉,打开个人热点,再插上,重复一遍。把三种状态下的接口、网关和客户端报错都记下来,你得到的是对比,而不是记忆。

如果只在热点状态下出问题,就让手机避开这条路径:充电时关掉个人热点,或者在服务顺序里把 iPhone USB 服务移到 Wi-Fi 之下。如果包括热点关闭在内、任何插着的状态都出问题,就要看客户端如何处理网络切换。有些客户端会在主服务变化时拆掉隧道并要求重连;那是客户端行为,不是手机故障。

每次只改一件事。在同一分钟里删服务、重置 VPN 配置、重装客户端,最后你只有一个能用的 Mac,却不知道是哪一步修好的。

第 5 步:决定保留什么、验证什么

不要动设备链路。删掉 Xcode 用的接口既修不好 VPN 路由,还会让设备部署一直坏到下次插上。如果确实不想要热点服务,先把手上的个人热点关掉;那才是有文档记录的控制项,而且重启后依然有效。

如果确实要删服务,删你已确认的那一个,然后验证两件事:到 VPN 端点的路由回到了预期接口,隧道能把流量送到内网地址而不只是公网。记下服务顺序和客户端版本,因为 macOS 更新可能改变手机呈现的方式。

然后再给实际看到的故障归类。握手超时、隧道起来后的 MTU 卡住、以及来自运营商的 DNS 应答,是三个不同的问题,对应三种不同的修法。USB 服务在这三种情况里都是触发器,很少是根因。

相关文章