不用 VPN 的 iPhone 广告过滤:Safari 还是 DNS 的覆盖范围
Safari 拦截器和过滤 DNS 覆盖 iPhone 的不同部分。先选清楚你要的层面,再确认真正在用的应用还能正常工作。
减少 iPhone 上的广告有两条常被推荐的路子,它们并不是同一件事的竞争版本。一条拦的是 Safari 渲染的网页内部的元素。另一条则是对整台设备拒绝解析被选中的主机名。两者都不会把代码注入别的应用,也都不会清掉你在手机上看到的每一条广告。
先选你真正关心的那个层面,再确认你依赖的应用还能正常工作。从错误的层面入手,会把半天时间花在那些从来没有覆盖到你想去掉的广告的设置上。
两个覆盖面不同的层面
拦截网站内容的 Safari 扩展运行在浏览器页面内部。它们看得到 Safari 渲染的文档,可以阻止元素加载,但这受制于发布者申请的权限,以及你启用了它们的那些配置文件。
过滤型解析器低一层工作,作用于名字解析。它对部分主机名查询直接返回空,从而在尝试连接之前就抹掉了发往已知广告或跟踪域名的请求。它从来不看页面本身。
这个差别决定了两种做法各自能修好哪类抱怨。看起来干净的浏览器旁边,可能就是一个满是横幅广告的游戏。两种方法都没坏,只是其中一种从来没有被指向那个应用。错误在于先选机制,再选层面。
先做 Safari,因为控制是本地进行的
在当前 iOS 版本上,扩展通过 Safari 或 App Store 安装,然后在“设置”“应用”“Safari”“扩展”里启用。具体标签会随版本变动,所以请读你手上那块屏幕,而不是文章里的截图。
选一个你能确认身份的发布者,读清楚扩展申请的权限,只在你需要的配置文件和网站上启用它。为那些因过滤而丢失必要内容的网站留一条例外,因为事后解释“只关掉某一个网站的开关”要比“同时关掉好几项隐私功能”容易得多。
独立游戏或社交应用里的广告,无论扩展在它的介绍页上承诺了什么,都在这套浏览器页面过滤的工作范围之外。
DNS 过滤覆盖的是名字,不是页面
过滤型解析器拒绝为名单上的主机名作答。Apple 的 DNS 配置支持可承载 DNS over HTTPS 和 DNS over TLS,而不把设备变成一条完整隧道,所以这是货真价实的无 VPN 选项。
覆盖范围就停在解析这一层。基于主机名的过滤无法从已经加载的页面里拿掉元素,也无法把广告和同一个被允许的主机名所提供的有用内容分开。
加密 DNS 保护的是手机与解析器之间的那段路;拦截策略是那个解析器的另一项功能。只选一个加密端点,根本不会建立任何拦截名单,也不会把你设备的公网地址挡在它所访问的服务之外。这是三条不同的说法,而营销页面习惯把它们揉成一条。
看清一个配置文件到底装了什么
一个以广告过滤为卖点的配置描述文件,可能带进远超 DNS 的设置。其中有些字段是为更早的操作系统写的,如今已不生效;还有几项会改变设备处理名字的方式,而介绍页从来不会提到这一点。先读内容,再信标签。
在信任之前,先查清描述文件里装了什么,并优先选择你所用解析器运营方发布的配置。在由单位管理的手机上,把私有名称与管理相关的要求留给管理员,而不是在它们上面再叠一层个人配置。
使用自有解析路径的应用,或者缓存过地址的应用,行为可能与跟随系统所选解析器的应用不同。这不是过滤器的缺陷,而是名字层过滤的边界。
在你真正在用的应用里测试
先用一个无害的页面或任务,再检查你还需要的功能。酒店和机场的登录门户是很好的压力测试:过滤得太狠的解析器可能让你根本打不开登录页,而这种失败恰恰出现在你没有别的网络可退的时候。出行前先准备好有据可查的关闭方式。
分别评估 Safari 和一个独立应用,而不是把一次干净的浏览器测试当成整机覆盖。如果某个产品是通过本地数据包隧道来实现过滤的,那它与上面两种做法都是不同的机制,值得在把它和你在依赖的 VPN 配置放在一起之前先读一读。你要的结果是一条已知的边界——浏览器页面,或者被覆盖的名字——而你需要应用仍然能用。