范围说明:这篇文章讲的是地区限制背后的机制,以及它们为什么会产生前后不一致的结果。它不是一份绕过访问控制的指南——绕过通常违反你已经同意的条款,在某些司法管辖区还会触及别的规定。
地区封锁常被描述成「网站查你的 IP 地址」,而这大概只是全部故事的三分之一。实际上一条限制可以在好几个不同的点上被判定——DNS 解析器、CDN 边缘节点、应用本身、支付服务商、应用商店——而这些点各自读的是不同的信号,来决定你属于哪个国家。当信号互相打架时,出来的就是大多数人真正遇到的那种半通不通、让人摸不着头脑的表现。
哪些信号决定了你「看上去」在哪个国家?
至少九个,分布在不同层级,由不同的一方来读。
| 信号 | 谁在读 | 通常的准确度 | 常见的失灵情形 |
|---|---|---|---|
| 通过地理位置数据库解析的 IP 地址 | CDN、应用 | 国家一级通常还行,城市一级弱得多 | 地址段被重新分配、数据过期 |
| CDN 边缘节点位置 | CDN 自己 | 反映的是网络拓扑,不是地理 | 最近的边缘节点可能在另一个国家 |
Accept-Language 请求头 |
应用 | 语言偏好,不是位置 | 一台按英国设置的浏览器出了国 |
| 浏览器时区与区域设置 | 客户端脚本 | 设备上的设置 | 跟 IP 对不上是家常便饭 |
| 账号注册国家 | 应用 | 注册时填了什么就是什么 | 你搬家了它也从不更新 |
| 发卡国(BIN) | 支付服务商 | 对这张卡而言可靠 | 与用户所在地不一致 |
| 账单地址 | 支付服务商 | 对这个账号而言可靠 | 同样对不上 |
| 应用商店区服 | 应用平台 | 绑在商店账号上 | 与设备位置无关 |
| SIM 卡/运营商代码 | 移动应用 | 对这张 SIM 卡而言可靠 | 漫游和 eSIM 让情况变复杂 |
结构上最要紧的一点:没有任何一方会把这些全部读一遍。CDN 看得到 IP,但看不到你的卡。支付服务商看得到卡,但看不到是哪个边缘节点发的页面。没有人去调和这些答案,于是一个服务完全可以在两个不同的子系统里,同时把你当成在两个国家的人。
IP 地理定位究竟是怎么判定国家的?
靠从注册和路由数据里推断,而不是靠测量。
地理位置数据库是把这些东西拼起来建出来的:区域互联网注册管理机构的分配记录、自治系统的归属、BGP 路由通告、测量点之间的延迟三角定位,以及网络运营商和用户提交的修正。结果是一个尽力而为的估计值,定期刷新。
这个建法解释了它的各种失灵方式:
- 地址段会在运营商和国家之间被重新分配,而数据库要滞后几周甚至更久才跟上。
- 移动网络上的运营商级 NAT 把成千上万的用户塞在一小池地址后面,而这池地址注册在运营商选的任何地方。
- 企业网络把流量从一个中心网关送出去,于是每一个分支机构看起来都在总部。
- 同一条连接上,IPv4 和 IPv6 可能映射到不同结果,所以答案取决于请求走的是哪个协议。
- 卫星连接和某些企业专线注册在一个跟终端实际位置毫无关系的行政地址上。
国家一级的准确度总体还不错,城市一级要差得多——这也是为什么地区限制通常都划在国界上,哪怕底下那份授权其实分得更细。
封锁发生在请求路径的哪一段?
比大多数人以为的更早,这也是封锁为什么响应得又快又整齐。
| 层级 | 由谁执行 | 你看到的现象 |
|---|---|---|
| DNS 解析 | 解析器,或者国家层面强制的过滤 | 域名解析不出来,或者解析到一个通知页 |
| 网络路径 | 运营商过滤,通常针对 IP 或 TLS 的服务器名 | 连接超时或被重置 |
| CDN 边缘节点 | 站点的 CDN,在联系源站之前 | 立刻弹出「您所在的地区无法使用」 |
| 应用 | 站点自己的逻辑,在通过身份验证之后 | 片库不一样,或者某个功能被禁用 |
| 支付 | 支付服务商与发卡行的规则 | 浏览没问题,订阅失败 |
| 应用分发 | 应用商店的区服规则 | 你的账号看不到这个应用 |
商业服务里最常见的是 CDN 边缘节点这一种。因为决策发生在离你很近的一个接入点,而不是在源站,所以封锁执行得整齐划一、几乎没有延迟——也正因为如此,同一个网址在相距几百公里的两个地方,一边返回正常页面,另一边返回拒绝。
这些限制一开始为什么会存在?
有三种不同的原因,产生三种不同的表现。
**授权。**发行权是按地域卖的。与其说服务在封锁你,不如说它没有在你所在的地方提供那部作品的权利。典型症状是片库变了,而不是站点被封。
**合规。**某个司法管辖区加了一堆义务——年龄核验、内容规则、报备——而运营方算下来觉得服务这个市场不值那份合规成本。典型症状是一则退出公告,或者一道验证墙。
**国家层面的强制过滤。**限制是加在网络上的,不是服务自己选的。典型症状是这个站点连不上而其他站点一切正常,并且服务本身根本不知道你试过。
把这三种分清楚是真有用的,因为它们该找的对象不同。片库上的差异是跟服务之间的授权问题;域名连不上则是服务管不着的网络问题。
这些信号为什么老是对不上?
因为它们从来就不是为了一致而设计的,而且每一个都由不同的一方为了不同的目的在维护。
你的 IP 反映的是你的流量从网络的哪里出去。你的卡反映的是你的银行在哪儿。你的应用商店账号反映的是你注册它的时候人在哪儿。你的账号国家反映的是你注册时敲进去的东西,可能还是好几年前敲的。其中任何一个变了,别的都不会跟着更新,也没有哪个协议去把它们对齐。
对用户来说,实用的读法是诊断性的,而不是操作性的:当某件事只做成了一半,先弄清楚失败的那一步读的是哪个信号。浏览失败指向 IP 或网络;订阅失败指向银行卡;应用找不到指向商店区服;片库变了指向授权。这能告诉你该去问谁,以及这个问题究竟有没有解。