有人发来一个名字听着让人放心的 iPhone 描述文件,两下就装好了,内部域名也开始解析。流量是不是同时也走隧道,是另一个问题,显示出来的名字回答不了它。一个描述文件可以带多个载荷,所以唯一可靠的做法是打开它,逐个读清楚每个载荷配置了什么。列表很短,载荷名字也很枯燥,看过之后答案通常一目了然。凭标题去猜,正是人们误以为自己流量走了隧道的原因,其实走的只是他们的查询。

打开载荷列表,而不是看标题

在 iOS 上,描述文件列表位于设置、通用、VPN 与设备管理之下,每一项点开都是载荷清单,而不是一个开关。把这份清单读一遍:DNS 设置载荷、VPN 载荷、代理载荷、证书、Wi-Fi。只带 DNS 设置的描述文件不是隧道,不管它叫什么名字;两样都带的描述文件则同时在干两件不同的事。清单是技术上的说法,标题则是营销。

三个问题能把清单变成一个判断。域名解析变了吗、公网源地址变了吗、每种效果覆盖哪些 App?DNS 载荷回答第一个,VPN 载荷通常回答第二个和第三个,而任何声称两者兼具的东西都应当显示两个载荷,或者有文档说明的扩展。

DNS 载荷到底改了什么

DNS 载荷改变的是在其配置范围内域名如何被解析,这可能意味着指定某个解析器、像 DNS over HTTPS 这样的加密传输,或者一组受限的域名。它通常不会改变的,是你连接的公网源地址,所以网站看到的还是你所在的网络。解析和路由是两套不同的机制,这次只动了其中一套。这就是为什么内部域名能正常解析,而它背后的页面却打不开。

DNS 载荷还引入了一个接收你查询的第三方,如果解析器的运营方不是网络的运营方,那就是路径上多了一个新的参与者。要记下这一点,因为它改变了谁能看到你查询了哪些域名。它本身并不隐藏你之后连接的目标地址。

VPN 载荷到底改了什么

VPN 载荷会建立一条隧道和一套路由策略,视配置方式不同,它可能接管全部流量、仅接管列出的目标,或者仅接管列出的 App。排除项和包含项同样重要,因为一个全隧道却排除了两个域名的描述文件,行为跟名字暗示的完全不一样。按 App 的 VPN 可以让浏览器完全留在隧道之外,而状态栏上的标记却显示已连接。在相信这两个词中的任何一个之前,先读一读包含和排除列表。

这里源地址确实会变,至少对隧道接管的流量来说会变,而这正是大多数人真正想问的实际区别。其余的都只是关于哪些流量的细节。

Network Extension App 把标签弄模糊的地方

App 可以安装自己的网络扩展,它的行为描述文件列表并不会明确描述,所以营销名字和状态栏指示都不等于清单。把 App 自己的配置界面和描述文件的载荷并排打开,对比一下。标着“防护”的开关可能只切换了解析,标着“私人 DNS”的开关可能只换了解析器。两个来源对不上时,信载荷清单,并把差异记下来。

这也是为什么一个 App 在某个网络上能通过快速测试,却在强制门户上失败:那里解析能用,路由不能用。这两套机制从来就不是一回事。

删对对象,然后再检查域名

通过安装它的 App 或管理服务来移除配置,使用 Apple 文档中给出的移除步骤,而不是删除你找到的文件。删除描述文件可能连带带走相关设置和数据,而且 受管理的描述文件可能拒绝离开,直到管理端放行。移除一个 DNS 载荷,永远不应该需要销毁设备仍然依赖的、与之无关的 VPN 身份。删除任何东西之前先把对象分开,然后只移除拥有你试图阻止的那种行为的那个。

之后,检查你的工作所依赖的内部域名,因为组织内部的 App 可能依赖一个公共 DNS 从未听说过的解析器。这种故障通常表现为 App 报错而不是 DNS 报错,所以经常被误诊。在同一个 App 里分别测一个内部域名和一个公网域名,答案会告诉你实际删掉的是哪个对象。

相关文章