店铺在家里加载正常,可隧道一开就弹出「异常流量」的墙。一个论坛拒绝让你登录,一个流媒体页面坚称你身在从未去过的国家。这些都不需要间谍软件。网站看到你的数据包来自哪个地址,而开了 VPN 后,那个地址属于数据中心,而不是家庭线路。所谓的 VPN 检测大多以这一条事实开始、也以它结束,其余部分则是误差率可预测的推断。

拦截从你的数据包看起来来自哪里开始

每个请求都带源地址,接收的服务器可以在公开数据里查到它:哪个网络在宣告它、该网络是不是托管商、它是否出现在滥用名单里,以及注册机构把它分配给哪个国家。这些都不能识别你,但合在一起足以把你归入某一类。

不妨像陌生人那样看看自己的流量。两条命令就能覆盖大部分表面,而第二条正是人们常忘的:

curl -sS https://ipinfo.io/json
dig +short TXT o-o.myaddr.l.google.com @ns1.google.com

第一条返回出口地址、所属组织和国家。第二条返回抵达 Google 域名服务器的解析器地址;它往往与你的出口不在同一网络,如果网站记录解析器侧的数据,看到的就是这个地址。当这两者属于不同国家时,有些网站会把这处不一致视为可疑,哪怕你的设置本身没有任何问题。

如果拒绝是在隧道升起之后才开始的,先怀疑出口地址,而不是别的。在动浏览器之前,先换服务器重试。同一服务商三个出口都跟着你的拦截,问题在该服务商的地址段;换个服务器就消失的拦截,问题只在那一个地址上。

时区、语言和时钟与地址不一致

页面代码无需任何授权提示,就能读取你的时区、语言偏好和屏幕设置。浏览器报告中欧时间,连接却来自新加坡的数据中心,这比单独的地址更有说服力,而这正是欺诈评分机制被设计来捕捉的不一致。

Intl.DateTimeFormat().resolvedOptions().timeZone
navigator.language
Intl.DateTimeFormat().resolvedOptions().locale

开发者控制台里的那三行,说明你的浏览器自愿交出了什么。VPN 客户端只能改变路由,别的都改不了,所以你随身携带的配置仍是本地的,出口却不是。这里重要的是连贯性:与出口设在同一地区的笔记本看起来很正常,自相矛盾的则不然。

失败之所以时有时无,原因也在这里。很多网站根本不在乎,少数会打分,还有一个会员站点直接判定你是骗子。三种情况下客户端都工作正常,所以客服那句「肯定是你的浏览器问题」既让人恼火,又有一部分道理。

页面代码究竟知道你的机器什么

JavaScript 没有任何枚举网络接口的 API。页面无法询问你的笔记本有哪些地址,所以脚本能读取你 LAN 地址的旧说法,多半是插件时代的记忆——那时 ActiveX 控件、Java 小应用和其他原生代码确实做得到。

SignalWhat it revealsStatus today
Source address of the requestExit network, country, hosting statusAlways visible; the main signal
Time zone and languageWhere the profile claims to beReadable without permission
WebRTC candidatesLocal addresses, historicallyHost candidates are mDNS-obfuscated by default
Interface listAll local addressesNot available to ordinary JavaScript

WebRTC 是「本地地址不会泄露」这条规律的老实例外。它的候选地址收集一度会向任何索取的页面暴露本地地址,修复办法是把主机候选换成随机 mDNS 名称。这一默认设置在当前浏览器中成立,但那是浏览器的决定,不是协议的保证,因此过旧的版本或重新启用本地候选的硬化配置仍可能泄露。在这里,更新浏览器比任何扩展都更有用。

服务商看到的是名字,不是内容

HTTPS 端到端保护页面内容,转发这些字节的隧道运营者读不到。运营者仍能看到你连接了哪个地址,在多数部署中还能看到握手里的服务器名,因为名字必须可读,连接才能被路由到正确的站点。Encrypted Client Hello 正是为了隐藏这个字段,而且只有客户端和站点都支持时才有效。

域名解析是另一半。如果你的服务商也提供解析器,它在任何连接建立之前就看到你查询的每一个名字。如果你的设备通过 HTTPS 使用公共解析器,服务商只能看到与那个解析器的连接,看到名单的则是解析器本身。

未加密的 HTTP 请求对运营者是可读的,原因和对酒店网络可读一样:里面没有任何加密内容。隧道从未声称能做到别的,也不会修正应用的选择。

把「这是 VPN」和「这是我」分开

检测便宜、基于概率,而且经常出错。共享出口地址被别人滥用过就会被标记,企业地址段会被归为托管,移动运营商给出的地理位置结果常常出人意料。身份识别是另一个问题:它需要持续的联系,比如你登录过的账号、Cookie、支付信息,或者两个互相核对笔记的观察者。

先弄清你真正要对抗的是哪一种。如果目标是读一个页面,HTTPS 已经在做这件事,隧道改变不了多少。如果目标是让网站不知道你所在城市,重要的是出口和解析器。如果目标是切断与真实身份的联系,弱点是账号,换服务器对你刚用过的登录没有任何作用。

新的出口不会让你从任何地方登出,也删不掉网站已经存下的、关于你所用账号的信息。所以实际顺序并不光鲜:挑一个网络看起来普通的出口,让浏览器配置与之一致,更新浏览器好让容易泄露的功能用上现代默认值,并接受少数网站仍会猜错你。

相关文章