VPN 改变的是你的 IP,不是你的浏览器。本文讲清楚 VPN 为何挡不住指纹识别、什么时候反而弄巧成拙,以及真正能降低暴露程度的做法。
不能。VPN 改变的是你的流量出口 IP 地址——这是网络层的事实。而浏览器指纹是由浏览器渲染和上报的内容组合而成的——canvas 输出、字体、屏幕参数、WebGL、时区,以及 JavaScript 能读取的其他几十项属性。VPN 完全不会触及这些,因为它工作的层级,位于指纹识别发生的层级之下。打开 VPN 就指望指纹随之改变,等于是在要求一个工具去解决它从一开始就看不见的问题。
核心要点
- VPN 工作在网络层(你的 IP 地址和显示出的所在地)。浏览器指纹则组装于应用层,来自浏览器渲染和上报的内容——VPN 没有任何机制能碰到它。
- VPN 会改变:你的 IP、ASN/所属组织、地理位置。VPN 不会碰:canvas/WebGL 渲染输出、已安装的字体、屏幕和设备参数、时区、语言,以及硬件并发数。
- 当 VPN 制造出信号矛盾时,它反而会让你更容易被识别,而不是更难——一个国家的 IP 配上另一个国家的时区和语言,正是一个众所周知的一致性破绽。
- VPN 真正能帮上忙的地方:切断 IP 作为跨站关联键的作用,并对本地网络隐藏你的访问目的地——这是一项真实、独立的好处,只是它跟指纹防护无关。
- 真正能降低指纹识别风险的做法,是让自己融入一个庞大的匿名集,而不是试图藏起某一个值——你可以用 BrowserInsight 的指纹检测和 VPN/代理检测查看自己当前的暴露情况。
两个不同的层,两份不同的工作
这种混淆情有可原:「VPN」和「指纹识别」都被归在「网络隐私」这把大伞下,人们自然会期望一件隐私工具能同时管好两件事。但它们工作在连接的不同层级上,一层的防护对另一层不会自动生效。
- 网络层关心的是你的流量从哪里出发。你的 IP 地址由你所连接的网络分配,而这正是 VPN 替换掉的东西——你的流量改由 VPN 提供商的服务器出口,而不是你的 ISP,因此目标网站看到的是 VPN 的 IP,而不是你的。
- 应用层关心的是你的浏览器向页面透露了什么。无论是否使用 VPN,连接一旦建立,你打开的页面就能运行 JavaScript,向浏览器询问几十个问题:装了哪些字体、GPU 如何渲染一个 canvas 元素、操作系统上报的时区是什么、有多少个 CPU 核心。这些答案来自你桌面上的浏览器和操作系统,而身处别处的 VPN 服务器没有任何办法伸手去改动它们。
一个有用的类比:VPN 就像在信封上换了一个寄信地址。它改变了信件看起来是从哪里寄出的,但不会碰信封里的笔迹、纸张材质,或信封本身留下的指纹——而指纹识别脚本读取的,恰恰就是这类细节,而不是寄信地址。
VPN 会改变什么,不会改变什么
| 层级 | 信号 | VPN 会改变它吗? |
|---|---|---|
| 网络层 | IP 地址 | 会——替换为 VPN 服务器的 IP |
| 网络层 | ASN / 托管组织 | 会——变为显示 VPN 提供商 |
| 网络层 | 地理位置(国家/城市) | 会——跟随 VPN 服务器所在地 |
| 网络层 | 本地网络可见性(ISP、咖啡馆 Wi-Fi) | 会——流量经过隧道加密 |
| 浏览器层 | Canvas / WebGL 渲染输出 | 不会——来自你真实的 GPU 和驱动 |
| 浏览器层 | 已安装的字体 | 不会——来自你真实的操作系统 |
| 浏览器层 | 屏幕分辨率、色深、设备像素比 | 不会——来自你真实的显示器 |
| 浏览器层 | 时区与语言 | 不会——来自操作系统设置,不来自网络 |
| 浏览器层 | 硬件并发数、内存 | 不会——来自你真实的设备 |
左边一列就是全部真相:VPN 的职责恰好在网络层结束的地方停下。指纹识别脚本真正读取的一切,都活在高出一层的地方——这也是为什么表格里这两组信号从不重叠。
反直觉的部分:VPN 可能让你更显眼
这一点最出乎意料。使用 VPN 不仅无助于对抗指纹识别——它还可能反过来对你不利,因为它引入了一种此前不存在的层间矛盾。
在没有 VPN 之前,你的 IP、时区和语言指向的是同一个地方,因为它们全都来自同一个物理事实:你,坐在某一个位置上。这是绝大多数访客的正常、平淡无奇的状态,不会引起任何注意。
一旦连上位于另一个国家的 VPN 出口,你的 IP 现在显示的可能是「荷兰」——但浏览器的 JavaScript 时区仍然上报你真实的操作系统设置,Accept-Language 请求头仍然列出你真实使用的语言。一个会交叉核对这些信号的检测系统,会看到一个荷兰 IP 配上 America/Chicago 的时区和 en-US 的语言请求头——足足七小时的矛盾,找不出任何寻常的解释,不像旅行者自然产生的那种小幅度时差。我们在时区与语言泄露和指纹一致性两篇文章里详细讲解了这项检测的具体原理,以及代理服务尝试(往往也失败地)掩盖它的方式。
原理很简单:一份自洽的指纹(所有信号都指向同一个可信的故事)是常见且平淡的。一份带着新鲜、无法解释的矛盾的指纹则更为罕见——而「罕见」正是追踪器或反欺诈系统被设计来捕捉的东西。VPN 一旦用得不够小心,就可能把一个平平无奇的访客,变成一个更容易被挑出来的访客。
VPN 真正能帮上忙的地方
这并不意味着 VPN 毫无用处——它意味着 VPN 解决的是另一个问题,而不是指纹识别,值得公平地说清楚那个问题是什么:
- 切断 IP 作为跨站关联键的作用。 没有 VPN 时,同一个 IP 地址出现在多个网站上,是追踪器可以拉出来串联你各处访问记录的又一条线索。VPN——尤其是会轮换出口 IP 的那种——会移除这条特定的线索,尽管底层的浏览器指纹可能依然可被识别。
- 对本地网络和 ISP 隐藏你的访问目的地。 你的 ISP,以及与你共享 Wi-Fi 的任何人,通常都能看到你连接的是哪些网站。VPN 会对这部分流量做隧道加密,因此在本地只能看到「已连接到某个 VPN」,看不到你实际到达的网站。
- 改变你显示出的所在地,以访问地区限制内容或获得区域定价。 这是一个真实、平常、完全合法的使用场景,和抵抗追踪毫无关系。
这些都是网络层上真实存在的好处。它们只是不会向上延伸到浏览器层——把 VPN 当成一套完整的隐私解决方案才是问题所在,而不是使用 VPN 这件事本身。
还有一点值得点明,同样发生在网络层:上面这些好处,都建立在「隧道确实带走了全部流量」这个前提上。WebRTC 可能绕开隧道,走另一条路去问 STUN 服务器「你看到我的地址是什么」;DNS 查询也可能漏到你 ISP 的解析器手里——任何一种,都可能把 VPN 本该替换掉的那个 IP 原样交出去。基于 Chromium 的浏览器如今会用随机化的 mDNS 主机名遮住内网地址,堵上了过去那个内网 IP 泄露的口子,但公网 IP 泄露和 DNS 泄露仍然属于「要实测、不能假定」的事。我们在 WebRTC 泄露防护和 DNS 泄露防护两篇里分别讲了这两件事,BrowserInsight 的 VPN/代理检测也会在你的浏览器里直接跑这两项检查。
真正能撬动指纹识别的是什么
如果 VPN 碰不到指纹识别,那什么能?老实说:没有什么能让你隐形,但你可以让自己变得不起眼。指纹防护的原理,是缩小你这一组特定信号组合的可识别程度——也就是你的匿名集:在追踪器眼中,当前与你看起来完全相同的那一群人。
大体有两种思路:
- 一致化。 像 Firefox 的
resistFingerprinting和 Tor 浏览器这样的工具,会把浏览器上报的内容标准化——相同的取整时区、相同的有限字体列表、相同的 canvas 行为——统一适用于该工具的所有用户,让你的指纹融入一个庞大、彼此相同的人群,而不是作为唯一值突显出来。 - 认知与测量。 你无法防护一个你不知道自己正在广播的信号。测试自己的配置,能看出哪些属性贡献了最多的熵值,这样你才知道某个改动究竟是真的有帮助,还是只是新增了一处矛盾。
VPN 完全可以作为更大防护方案里合理的一部分——比如,挑选一个时区与系统设置大致相符的出口地点,而不是让两者彻底矛盾——但它从设计之初,就不是用来单独解决指纹识别问题的。
查看你自己配置的真实情况
这两个层是彼此独立的,检查它们需要两个独立的工具:
- BrowserInsight 的 VPN/代理检测会告诉你网络层的情况——你的连接是否被标记为 VPN、代理或 Tor 出口,以及网站会看到怎样的 IP/ASN/位置信息。
- BrowserInsight 的指纹检测会告诉你浏览器层的情况——canvas、WebGL、字体和设备信号中,脚本能读到什么,整个过程完全在客户端本地运行。
分别在开启和关闭 VPN 的情况下运行这两项检测并作对比。你通常会看到网络层的结果完全变了样,而浏览器层的结果几乎纹丝不动——这正是这篇文章想说的道理,在你自己的屏幕上被直接看见。想针对一个实时参考数据集做更全面的自测,可以用 EFF 的 Cover Your Tracks 工具,它会估算你的浏览器暴露了多少比特的可识别信息;他们的信息论与隐私入门解释了为什么「熵的比特数」才是正确的思考框架,而不是数一数泄露了多少条具体事实。
常见问题
使用 VPN 后,网站还能追踪我吗?
能,如果追踪依赖的是浏览器指纹而不是你的 IP 地址。VPN 会隐藏你的 IP,并对你的 ISP 加密你的流量,但指纹识别脚本读取的是浏览器和设备属性,与你的网络连接毫无关系,因此网站仍然可以在多次会话之间识别出你的浏览器。
一个好的 VPN,至少能稍微降低一点我的指纹吗?
一般不能——VPN 的工作完全在网络层,而浏览器指纹属性并不属于网络层属性。有些 VPN 应用会捆绑一个独立的浏览器扩展,附带做一些指纹伪装,但那是搭在 VPN 旁边的一项独立功能,并非 VPN 隧道本身提供的能力。
既然挡不住指纹识别,我该停用 VPN 吗?
不必。VPN 依然把自己的本职工作做得很好——对目标网站隐藏你的 IP,对你的 ISP 和本地网络隐藏你的浏览行为。错误的想法在于期望它顺带也解决指纹识别问题;把它用在它真正擅长的地方,如果指纹防护是另一个独立目标,再搭配专门应对指纹的工具。
用一个时区和语言不匹配的 VPN,会比完全不用 VPN 更糟吗?
单就指纹识别而言,一个刚出现的 IP/时区/语言矛盾,确实可能比一次完全自洽的非 VPN 连接更显眼——但这只对会核对一致性的检测系统才有意义,并不会影响 VPN 本身真正的好处(对网站隐藏你的 IP、对 ISP 加密流量),这些好处无论哪种情况都照样成立。
结语
VPN 和浏览器指纹识别活在连接的不同层级上,再多网络层的防护,也够不到指纹识别脚本读取的浏览器层信号。这并不是 VPN 的缺陷——只是单纯超出了它的职责范围。把 VPN 用在它真正擅长的地方:隐藏你的 IP,对 ISP 和本地网络加密你的流量。如果降低指纹识别度是一个独立的目标,它需要一套独立、刻意为之的做法——一套围绕「融入庞大人群」而非「更换地址」构建的做法。


