VPN 泄漏与伪装检查

所谓泄漏,是指任何关于你的读数逃出了 VPN 构建的隧道:某个数值仍走旧路线,或网页可以直接向你的浏览器索取、完全绕过隧道。所谓伪装检查是与之配套的测试:网站收集它能拿到的每一个读数——地址、时钟、语言、硬件、解析器——再把它们彼此对照,找的不是秘密,而是矛盾。伪装很少因为某一个数值看起来不对而失败,而是因为两个本应一致的数值不一致。亲自在浏览器指纹测试中跑完这两半,并阅读网站对你了解多少,了解在改任何设置之前页面能读取的完整清单。

VPN 只改变一件事

VPN 只做一件机械的工作,而且做得很好:它把你的流量包进一条通往出口服务器的加密隧道,你访问的网站看到的是那台服务器而不是你。你的公网 IP 地址变了,附在该地址上的城市和国家也随之改变,拥有该地址的网络——通常是托管公司或 VPN 服务商,而不是家庭宽带——也变了。如果你的唯一问题是“这个网站认为我从哪个地址来?”,一个正常工作的 VPN 就能完整回答它,本文没有任何内容与此矛盾。

其他一切都原地不动。你的设备没有移动:屏幕尺寸、图形芯片、已装字体、电池行为、音频栈,以及组合成浏览器指纹的几十项软硬件读数,在隧道开启前后完全相同。你的时钟没有移动,所以系统时区仍报告你实际所在的地方。浏览器和系统语言没有移动。Cookie、已登录账号和浏览历史也没有移动。隧道改的是数据包的路线,而不是路线尽头那台机器的样貌。

这种分裂正是大多数所谓“VPN 检测”名不副实的原因。常见情况下,没有人检测到了 VPN 协议、隧道或加密连接。他们检测到的是不匹配:IP 声称在一个国家,时钟却声称在另一个国家;地址属于数据中心,指纹却描绘一台家用笔记本;语言列表描绘一个从不出行的人。网站给“已移动的那一层”与“未移动的那些层”之间的差距打分。所以理解泄漏,其实与隧道关系不大,而是审计隧道留下的每一样东西。

WebRTC:绕出隧道的地址

WebRTC 是页面内语音、视频和点对点数据的浏览器技术。要让两个浏览器直连,它必须先发现各自如何被触及,这个发现过程叫 ICE。用通俗的话说,你的浏览器收集候选地址——它自己的可能地址——并提供给对方。它有些靠问自己得知,有些靠问 STUN 服务器一个简单问题得知:“从你那里看,我是从哪个地址打来的?”答案以不同候选类型返回,而它们之间的区别就是整个泄漏故事。

一个主机候选是你机器直接持有的地址:历史上就是你的局域网地址,比如路由器给你的 192.168 地址。一个服务器反射候选是 STUN 服务器观察到的公网地址——外界看到的地址。WebRTC 刚出现时,页面可以自由收集两者,于是产生了两个经典泄漏:局域网地址逃了出去,尽管它对网站毫无用处;更糟的是,当浏览器在 VPN 隧道之外或之旁询问 STUN 服务器时,反射候选揭示了伪装背后的真实公网地址。VPN 对网页流量工作得完美无缺,一个侧信道却悄悄公布了它在隐藏的东西。

现代浏览器已大幅收窄了这一点。Chrome 和 Firefox 现在通常用随机 mDNS 名替换主机地址——一个轮换的 .local 主机名,而不是你真实的局域网 IP——页面看到的候选无法映射回你的路由器。实现因浏览器和版本而异,有的能正确把 WebRTC 路由进隧道,企业或装了扩展的设置又不同,这就是为什么两个诚实的测试会给出不同结论。对粗暴修复要谨慎:完全禁用 WebRTC 能止泄,也会破坏正常通话;而承诺“伪造”候选的扩展,常常把可信地址换成不可信的——不可信的候选本身就是伪装检查可以打分的矛盾。

DNS:留在家里的解析器

你访问的每个域名在连接之前都要被翻译成地址,这个翻译由解析器完成。如果你浏览器或系统继续使用互联网服务商分配的解析器——直接访问、在隧道之外——那么每次查询同时以两种方式泄漏。查询本身以普通 DNS 流量的明文模式发给你的 ISP,即使随后的页面走 VPN,也暴露了你解析了哪些域名。任何能观察到哪个解析器替你发问的网站,都能知道你大概在哪里,因为人们绝大多数使用离自己真实位置很近的解析器。

第二种泄漏比听起来更微妙,而它的标准测试很巧妙。测试页面让你的浏览器查询一个从未存在过的名字——测试者控制的域名下一个长长的随机子域名。因为名字是唯一的,任何缓存都没有它,你的解析器被迫直接去问测试者的权威服务器。那台服务器由此看到解析器的地址,并能把它的网络和国家报告回页面。使用 EDNS 客户端子网信息的变体还能进一步缩小范围,因为有些解析器会热心地把你自己地址范围的一部分随查询一起转发。这一切都不需要破坏隧道,只需要你的查询与你的页面走不同的路。

陷阱大多是配置问题,而不是恶意。分流设置故意把部分流量——通常包括 DNS——送到 VPN 之外,以求速度或本地访问。向每台设备下发 ISP 解析器的路由器会在 VPN 在其中一台上运行时继续这么做。自带加密 DNS 设置的浏览器可能绕过系统和 VPN 服务商的解析器,修复了一个泄漏,却在新解析器与出口不同国家时悄悄制造一致性问题。工作规则与本文其余部分一致:解析器应位于出口声称所在的地方,并应通过隧道到达它,而确认这两点的方法只有从外部测试。

矛盾:自我争吵的伪装

想想页面一秒钟能读取的四个读数。你的 IP 把你放在阿姆斯特丹。你的系统时区报告 UTC−5 和美洲的一座城市。你的浏览器语言列表以一种在荷兰很少说的语言开头,里面没有任何荷兰语。你的用户代理声称是 Windows 桌面,而图形渲染器报出的是移动芯片。这些值没有一个单独能证明什么——旅行者、外派人员、虚拟机和古怪配置每天都无辜地产生每一个。合在一起,它们就吵起来了。伪装检查不过是一台倾听这场争吵并给它赋权的机器。

有些矛盾出现得如此频繁,已成为标准测试组合。时区与 IP 国家最响亮,因为时钟对页面来说极易读取,而大多数 VPN 用户从没想过改它。语言与 IP 国家更柔和——人们合理地用第二语言浏览——但出口国家的语言完全缺席仍然计入。用户代理与平台能抓住粗糙的伪造:一个字符串声称一种操作系统,而触摸支持、屏幕形状或 GPU 渲染器描绘的是另一种。托管 ASN 与住宅叙事最安静,往往也最决定性:出口地址属于数据中心网络,而会话的其他一切都描绘一个普通家庭用户——他实际上应该从宽带服务商那里来。

这就是为什么网站真正打分的是本身的一致性,而不是任何单一数值。欺诈系统、滥用过滤器或流媒体目录很少需要证明 VPN 存在;它需要一个风险数字,而矛盾是廉价、稳健的证据来源。一个地址、时钟、语言、解析器和硬件讲同一个故事的会话可能仍是 VPN 会话——但它没有可被打的内在争吵,所以会被按它所讲的故事处理。反过来,一个根本没用 VPN 的用户也可能因为纯粹的混乱而得分很差:在另一个国家制作镜像的工作笔记本、被留在外语的浏览器、位于另一大陆的企业解析器。检查测的是连贯性,它从来测的都不是隧道。

保持一致的清单

按检查器读取你的顺序来做。先选定出口国家,有意地选,让其他一切都跟随它——与一个你选定的地方保持一致,胜过事后装扮随机出口。把系统时区设为匹配那个国家,不只是浏览器时钟,因为页面读的是系统时区。对齐浏览器语言:把出口国家的语言放在首位或至少放进列表,并尽可能用它浏览。每一步消去一层与另一层之间的一次争吵,合起来就覆盖了网站最常检查的矛盾。

然后关闭侧信道。让 WebRTC 留在隧道内,或者如果你从不在浏览器里通话,就干脆关掉——并且重新检查你的浏览器实际是哪种行为,而不是想当然。确保 DNS 通过隧道解析到一个符合出口叙事的解析器,当你呈现的故事是住宅用户时,优先选择住宅出口,因为没有任何时钟设置能修复数据中心的 ASN。在每一次改动之后,重跑浏览器指纹测试,并像网站那样读它:不是找一个红旗,而是问整页是否讲同一个故事。想了解为什么这种测试可以在不收集它所展示读数的情况下运行,请看隐私测试如何不保留数据。

以诚实的提醒收尾,因为一份承诺隐形的清单是在骗你。一致性消去矛盾,它不消去身份。你的浏览器指纹——第一部分里原地不动的硬件、字体、图形和设置的组合——仍能在不同访问和不同地址之间认出你的设备,而你的行为、账号和习惯比任何网络读数都更可靠地识别你。一套连贯的伪装提高了随手检测的成本,挡住了容易的、自动化的那种。面对一个能长期观察行为的坚定观察者,它从来都不是保证,任何向你出售这种保证的工具或服务商都应该被更少信任,而不是更多。

来源与延伸阅读

常见问题

VPN 会隐藏我的指纹吗?

不会。VPN 改变网站看到的地址,而不改变其背后的设备。你的屏幕、图形渲染器、字体、语言、时区和其余指纹读数在隧道开或关时完全相同,这就是为什么指纹能跨不同出口和不同地址关联你的会话。隐藏或随机化指纹值是另一个浏览器层面的问题——而随机得不好的值会制造自己的矛盾,就像浏览器指纹测试在声称平台与真实渲染器不一致时所展示的那样。

如果我信任我的 ISP,DNS 泄漏危险吗?

取决于你买 VPN 是为了什么。如果你信任服务商,只是想要一个不同的出口地址,DNS 泄漏可能问题不大——尽管你的解析器仍会向任何运行回声测试的网站暴露你的真实国家,即使没有其他危害,也能破坏伪装。如果你想让服务商看不到你解析哪些名字,这个泄漏就完全击败了那个目的,因为查询模式大致就是浏览模式。用“危险”来框定是错的;正确的问题是,这个泄漏是否悄悄取消了你买隧道来做的那件具体工作。

为什么这个测试说我的 WebRTC 没问题,另一个网站却不同意?

通常是因为两个测试看的是不同的东西,而且两者都诚实。现代浏览器把主机候选藏在轮换的 mDNS 名之后,所以一个测试报告“没有 IP 泄漏”,因为它只看到了 .local 占位符,而另一个则标记候选本身的存在、一个反射地址,或候选国家与出口国家不匹配。权限也重要:被授予麦克风或摄像头权限的页面,可能比没有的了解更多,浏览器和版本默认暴露的内容也不同。测试者之间的分歧是关于各自读取哪一层的信息——不是谁坏了的证明。