国内网站如何看到你的真实 IP:大陆分流检测的原理与三种结果

博客 / IP 与隐私

国内网站如何看到你的真实 IP:大陆分流检测的原理与三种结果

如果你的网络配置把国内域名设为直连,访问国内网站时对方看到的就是你本地宽带或移动网络的大陆出口 IP,代理不参与这一段。任何网页都可以在后台向国内 CDN 发请求,读出这个大陆 IP,再和自己看到的出口 IP 对比,判断你是否处于“大陆分流”状态。cdnping 的 IP 与环境检测 里的分流检测做的就是这件事。

本文讲这个机制为什么成立、三种检测结果各代表什么,以及怎么自己验证。

分流模式下为什么会有两个出口

在规则分流的配置下,客户端按域名或 IP 段决定每个连接怎么走:境外域名走代理,国内域名直连。国内网站因此不绕路,但设备在同一时刻有两个对外出口。

假设你打开一个部署在海外的网页,例如 cdnping.org:

  1. 浏览器请求 cdnping.org,这个连接走代理,cdnping 的服务器看到的是代理出口 IP。
  2. 页面里的脚本再向某个国内 CDN 的地址发请求,这个域名命中“国内直连”规则,连接从本地网络直接出去。
  3. 国内 CDN 节点看到的是你的大陆出口 IP。

两个服务端看到两个不同的 IP。只要国内那一侧愿意把它看到的 IP 返回给浏览器,网页就能同时拿到这两个值。分流配置本身的逻辑见站内的 分流原理说明。

国内 CDN 怎么把客户端 IP 交给浏览器

CDN 本来就知道你的 IP

TCP 连接建立后,服务端必然知道对端地址,否则没法回包。CDN 节点把请求转发给源站时,通常还会把这个地址写进请求头,让源站知道访客是谁。所以“国内厂商知道你的 IP”并不新鲜,访问任何网站都是如此。

关键在下一步:这个 IP 能不能被第三方网页读到。

回传:响应体或响应头里的客户端 IP

一些国内 CDN 或边缘服务有用于诊断、调度或测速的地址,会在响应里带上客户端 IP。常见形式有两种:

  • 写在响应体里,例如返回一段 JSON 或纯文本,里面有访客 IP;
  • 写在响应头里,例如一个类似 X-Client-IP 的字段(字段名只是示例,各家命名不同)。

这些接口的本意通常是排障,比如让运维确认用户被调度到了哪个节点。但只要对外开放,谁发请求都能读到结果。

CORS 决定网页能不能读到

浏览器有同源策略:cdnping.org 上的脚本向另一个域名发请求,默认读不到对方的响应。能不能读,取决于对方返回的 CORS 头:

响应头作用对检测的影响
Access-Control-Allow-Origin: * 或包含请求方域名允许跨域脚本读取响应有了它,响应体里的 IP 就能被读到
Access-Control-Expose-Headers列出允许脚本读取的非标准响应头IP 写在自定义头里时,必须在这里列出,脚本才拿得到
两者都没有脚本读不到内容这类地址无法用于读 IP,只能知道请求是否完成和耗时

国内 CDN 回传 IP 是前提,CORS 放行是条件。两者都满足的地址,就成了任意网页都能调用的“你的大陆 IP 是多少”查询口。

延迟是第二条证据

只看耗时也有信息量。直连国内 CDN 时往返一般在几十毫秒;如果请求先出境再回来,往返会明显变长。cdnping 的检测同时记录这些国内节点的延迟,和 IP 结果互相印证,不只依赖某一个接口的返回值。

cdnping 的大陆分流检测怎么判断结果

/ip 页面里的大陆分流检测会向网易、腾讯、抖音、微博、优酷、小红书等国内 CDN 发请求,读取它们回传的客户端 IP 和延迟,再和 cdnping 自己看到的出口 IP 对比,给出三种结论之一:

结果国内 CDN 看到的 IPcdnping 看到的 IP国内节点延迟说明
大陆分流大陆 IP境外 IP低国内流量直连、境外流量走代理,同时有两个出口
全局代理境外 IP境外 IP高所有流量都经过代理,包括访问国内网站
国内直连大陆 IP大陆 IP低没有使用代理,或代理没有接管浏览器流量

结果是“大陆分流”说明什么

境外服务看到的是代理出口,国内服务看到的是你的宽带或移动出口。同一个浏览器里,这两个 IP 都能被一个网页读到。从隐私角度看,“用了代理”不等于“网站不知道你的大陆 IP”。

结果是“全局代理”说明什么

国内 CDN 回传的也是境外 IP,国内节点延迟偏高,说明访问国内网站也绕到了境外。这时国内网站看到的是代理出口,代价是国内访问变慢,部分国内服务也可能因为境外 IP 要求额外验证。

结果是“国内直连”说明什么

两侧看到的都是大陆 IP。没开代理时这是正常结果。如果你以为代理开着,就要检查它是否真的接管了浏览器,例如系统代理没有生效、浏览器扩展没有启用,或当前网络绕开了设置。

各个 CDN 的结论不一致怎么办

有时几个国内 CDN 的结论对不上,例如大部分返回大陆 IP、个别返回境外 IP。常见原因是分流规则只覆盖了一部分国内域名,或者某个域名解析到了境外节点。这时逐个看每个 CDN 的 IP 和延迟,比只看总结论更有用。

动手:自己做一次检测并生成结果图

在浏览器里

  1. 打开 cdnping.org/ip,等各项检测跑完。
  2. 查看大陆分流检测的结论,以及每个国内 CDN 回传的 IP 和延迟。
  3. 对照上面的表格,看各项是否一致。
  4. 同一页还有 DNS 泄漏和 WebRTC 泄漏 检测,它们是另外两条可能暴露大陆网络信息的路径。
  5. 要发给同事或贴进工单时,用页面上的生成结果图功能导出一张带水印的图片。打开隐藏 IP 选项后,图里的 IP 地址不会直接显示,适合公开分享。

在命令行里

用 curl 也能验证同样的机制。先看当前的境外出口:

# Cloudflare 的 trace 接口会返回它看到的客户端 IP(ip= 一行)
curl -s https://www.cloudflare.com/cdn-cgi/trace | grep '^ip='

再检查某个接口的 CORS 头是否允许跨域读取(把地址换成你要检查的 URL):

# 带上 Origin 模拟跨域 GET 请求,只打印响应头
curl -s -o /dev/null -D - -H "Origin: https://example.com" "https://<要检查的地址>" \
  | grep -i -E 'access-control-allow-origin|access-control-expose-headers'

如果返回了 Access-Control-Allow-Origin,并且 IP 出现在响应体或已暴露的响应头里,这个接口就能被任意网页用来读取你的出口 IP。终端流量是否走代理取决于终端自己的代理设置,可能和浏览器不同。命令行结果和浏览器结果对不上时,先确认两者走的是不是同一条路。

自查清单

  • 我知道自己当前是哪种模式:大陆分流、全局代理还是国内直连
  • 各个国内 CDN 的结论一致,没有个别域名漏掉
  • DNS 泄漏检测里的解析服务器符合预期
  • WebRTC 检测没有暴露本地或大陆公网地址
  • 分享结果图前已打开隐藏 IP

两个出口被同一网页读到,对隐私有什么影响

一个网页如果同时拿到你的境外出口和大陆出口,就能把这两个地址对应起来,而且不需要任何权限弹窗。对多数人来说这未必构成问题,但应该知道它可以发生。

IP 也不是唯一的判断依据。时区、语言、字体、延迟特征都能反映网络环境,/ip 页面把这些项目放在一起展示,方便你看到完整情况。指纹在本地计算,不上传。

cdnping 的检测只告诉你现状,不提供绕过任何平台检测的方法。使用海外 AI 服务时,请遵守各服务的条款和当地法规,地区限制要如实对待。

如果你在国内用 Claude Code、Codex 这类编程工具,需要人民币结算的接口,可以看看 AGI Plan。AGI Plan 是 cdnping 的商业合作方。AGI Plan 是多供应商大模型聚合网关,站方明确说明自己不是官方授权渠道。

下一步

  • 去 /ip 跑一次检测,导出一张隐藏 IP 的结果图留档,换网络或改配置后再跑一次对比。
  • 想弄清自己的出口是原生 IP 还是广播 IP,读 原生 IP 与广播 IP。
  • 检测时发现某个 AI 服务连不上,先到 挂了吗 和 API 状态 看是不是服务本身的问题,再排查自己的网络。

相关文章

继续阅读