返回概览 更多文章

网站如何检测你的 VPN(以及如何实测你自己的)

加载中……

你的 VPN 说你在法兰克福。你刚打开的那个网站却不买账,而且它根本不用猜。在你崭新的 IP 地址和你那台一切如旧的浏览器之间,某处藏着一个矛盾,而找出矛盾正是检测系统的全部工作。本页的面板此刻就在对你的浏览器运行同样的比对。

误会要从 VPN 实际做的事情说起。它加密你的流量,再从另一个地址把流量递给互联网。仅此而已。它不会改动你操作系统里的时钟、你的浏览器请求的语言、你 TCP 数据包的形状,也改变不了新地址属于一家出租服务器的公司这个事实。想知道真相的网站读的就是这些,而它们彼此吻合,唯独与那个 IP 对不上。

简而言之:VPN 只替换一个信号,也就是你的 IP 地址,其余信号原封不动。网站从新 IP 的身份(托管网段、上了信誉列表、归数据中心公司所有)和浏览器仍在诉说的内容(来自家乡的时区和语言、绕过隧道的 WebRTC 地址)两头认出它。“混淆”模式向你的 ISP 隐藏的是隧道,向网站隐藏不了出口。

你的新 IP 自带标签

每一个公网 IP 地址都属于一个自治系统,即注册在某一个组织名下的一段地址,而这份注册信息是公开的。你的家庭宽带来自 Comcast、Vodafone 或 Ziggo 名下的网段;VPN 出口则来自 M247、DataCamp、Leaseweb,或随便哪家 VPN 服务商租用机柜的公司名下的网段。告诉网站你在哪个国家的那次查询,会在同一个响应里以 orgasn 字段把这件事一并告诉它。首页扫描会把这一行展示给你;它就是上方面板里的“网络运营商”一行。

这次查询没有任何高明之处。消费级 ISP 把地址分给人,托管公司把地址分给机器。第二类地址跑来逛网店、登录银行或追剧,还没等其他检查开始就已经显得不对劲了,而反欺诈引擎正是照此加权的。这与我们在为什么你总是遇到人机验证里描述的是同一个信号,因为发问的本来就是同一个引擎。

信誉列表早就认识那些 VPN 网段

在 ASN 之上还有第二层:商业 IP 信誉数据库。IPQualityScore、ipinfo 的隐私检测、IP2Proxy、Spur 以及另外十几家,会把每一个网段归类为住宅、企业、托管、代理、VPN 或 Tor,而这些列表并不难建。VPN 服务商会公开自己的服务器列表,好让自家的应用能连上。托管网段就躺在注册机构的记录里。滥用报告和纯粹的密度补齐剩下的部分:一个住宅地址背后是寥寥几个人,一个热门 VPN 出口背后同时挤着几百人,横跨每一个时区,单看流量就能看出这种模式。面板里的“IP 信誉列表”一行,就是拿你的地址去问了一个这样的数据库。

这正是各大流媒体平台如此擅长封锁 VPN 的原因。它们并不检测你的 VPN 应用,而是维护一份行为像 VPN 出口的地址清单,然后拒掉清单上的地址。这也解释了为什么今天还好用的 VPN 下个月就失灵了:那个网段上了列表。

网站读什么,VPN 改什么
信号 读取来源 开着 VPN 时
  1. IP 网段的所有者 网络连接 现在写着“服务器”
  2. 信誉列表 网络连接 现在写着“服务器”
  3. TCP 指纹(MTU、TTL) 网络连接 现在写着“服务器”
  4. 你用的 DNS 解析器 网络连接 没变,仍指向家乡
  5. 时区 你的浏览器 没变,仍指向家乡
  6. 浏览器语言 你的浏览器 没变,仍指向家乡
  7. WebRTC 地址 你的浏览器 没变,仍指向家乡
  8. 浏览器指纹 你的浏览器 没变,仍指向家乡
VPN 换掉的是第一行。接下来的三行反而更糟了,因为租来的数据中心地址自带标签。其余各行纹丝不动,而它们与新 IP 之间的矛盾正是被读取的东西。

浏览器一直在说实话

到目前为止说的都是地址。接下来说的是浏览器,而这是大多数 VPN 指南跳过不谈的部分,因为没有任何 VPN 修得了它。

时区。你的操作系统时钟写着 Europe/Amsterdam,JavaScript 一次调用就能读到,不弹任何授权提示。德国 IP 配一只荷兰时钟,是网站一毫秒就能查完的矛盾,我们专门写过一整篇为什么 VPN 修不了时区

语言。你的浏览器发出的每一个请求都带着 Accept-Language 头,navigator.languages 又把同样的内容告诉脚本。这两处 VPN 都碰不着。从德国地址发出的 nl-NL,是同一个矛盾换了一栏;语言泄露一文讲了这件事,包括它只算弱信号的情形,比如一台只装了英语的浏览器出现在国外。

WebRTC。为了搭建通话,浏览器可以问 STUN 服务器“我的公网地址是什么?”,而某些 VPN 配置会让这个提问绕过隧道。答案就是你的真实地址,跟你的 VPN 地址并排躺在同一个页面上。这就是 WebRTC 泄露,上方的面板正在运行这项检查。

地理定位与 IPv6。如果你曾给某个网站授予过位置权限,浏览器的定位来自 GPS 或附近的 Wi-Fi,不会跟着 VPN 移动。而一个只隧道 IPv4 的 VPN,会把你家 ISP 分配的 IPv6 地址留在原处,任何拥有 IPv6 端点的网站都拿得到。

IP 位置
Frankfurt, DE
被 VPN 挪走
网络所有者
M247 Europe (hosting)
是机柜,不是客厅
浏览器时区
Europe/Amsterdam
与 IP 矛盾
浏览器语言
nl-NL, en
与 IP 矛盾
3 个矛盾
IP 挪到了德国。网络如今归一家托管公司所有,时钟和语言却还写着荷兰。网站不需要知道 VPN 是什么,就能注意到这一点。
VPN 只改了一个字段。所谓检测,就是拿这个字段与纹丝未动的另外三个作比较。

这一切都不需要知道 VPN 是什么。检测器想的不是“VPN”,而是“这位访客的信号彼此打架”,而被打分的正是这种不一致。

任何网页都读不到的信号

还有两项检查发生在浏览器之下,它们之所以重要,是因为哪怕一台干净的浏览器挂在住宅出口上,也可能栽在这里。

TCP 指纹。VPN 隧道把你的数据包裹进自己的数据包里,于是抵达网站的数据包比普通连接的略小一点(最大分段大小被隧道的开销压缩了),TTL(生存时间)也多耗掉了一跳。p0f 一族的被动指纹工具会在你的第一个请求得到应答之前,直接从服务器网卡上读出这些字段,而“一个自称家用路由器的地址发来 MSS 1360”是一个众所周知的形状。

DNS。你的浏览器解析主机名时,总有某处的某个解析器会把查询发到网站的 DNS 服务器。如果那个解析器属于你家的 ISP,而你的网页流量却从另一个国家的 VPN 出口进来,网站手里又有了你的两个地址。泄露测试的做法是让你的浏览器解析一个独一无二的主机名,再看是哪个解析器现身;VPN 应用的“DNS 泄露保护”设置就是这么被检验的。

为什么混淆模式在这里帮不上忙

VPN 应用兜售“隐身”或“混淆”服务器,它们解决的确实是一个真实的问题:让 VPN 流量穿过封锁它的网络,办法是让隧道在半路的防火墙眼里看起来像普通的 HTTPS。那是一场与你的 ISP 或办公网络的较量。位于另一端的网站从头到尾看不见隧道。它看见的是出口地址和你的浏览器,两者都和从前一样一览无余。混淆和检测是两个不同的问题,营销文案却把它们搅在了一起。

到底该怎么办

  1. 先跑测试,再修掉它标记的东西。本页顶部的面板已经相当接近网站看到的景象;完整浏览器扫描还会在它周围补上指纹和泄露检查。自己先找到的破绽,就是你能修掉的破绽。
  2. 让浏览器与地址口径一致。把时区和语言改成与出口国家相符;或者,如果你要的是隐私而不是换地方,就干脆选一个本国出口。关掉 WebRTC,或者交给 VPN 应用处理。同样是数据中心 IP,一个前后一致的故事总比一个自相矛盾的得分更高。
  3. 如果你需要看起来像一个人,就用一个人的地址。数据中心网段上了列表就下不来;独享或住宅 IP 是摆脱那份列表的唯一途径。值不值得,取决于你在做什么。
  4. 如果你运营着多个身份,就把它们彻底分开。每个配置文件都需要自己的出口地址,以及一台时钟、语言和指纹都与该地址相符的浏览器,否则上面那些矛盾会在每个账号上重演一遍。这正是反检测浏览器的用武之地。Incogniton 给每个配置文件绑定一个代理,并把时区和语言设置成与之匹配,让浏览器和地址讲同一个故事,而不是各讲各的。

VPN 依然是干它本行的合适工具:在你不信任的网络上加密你的流量,以及挪走你的地址。挪走的是 IP 地址:你的 MAC 地址从一开始就不在网站的视野里。VPN 从来就不是为了让浏览器把谎撒圆而造的,而上面的大部分检测,不过是浏览器在说实话。

Incogniton 徽标

提升你的隐私保护

箭头