國內網站如何看到你的真實 IP:大陸分流檢測的原理與三種結果
如果你的網路配置把國內域名設為直連,訪問國內網站時對方看到的就是你本地寬頻或行動網路的大陸出口 IP,代理不參與這一段。任何網頁都可以在後臺向國內 CDN 發請求,讀出這個大陸 IP,再和自己看到的出口 IP 對比,判斷你是否處於“大陸分流”狀態。cdnping 的 IP 與環境檢測 裡的分流檢測做的就是這件事。
本文講這個機制為什麼成立、三種檢測結果各代表什麼,以及怎麼自己驗證。
分流模式下為什麼會有兩個出口
在規則分流的配置下,客戶端按域名或 IP 段決定每個連線怎麼走:境外域名走代理,國內域名直連。國內網站因此不繞路,但裝置在同一時刻有兩個對外出口。
假設你開啟一個部署在海外的網頁,例如 cdnping.org:
- 瀏覽器請求 cdnping.org,這個連線走代理,cdnping 的伺服器看到的是代理出口 IP。
- 頁面裡的指令碼再向某個國內 CDN 的地址發請求,這個域名命中“國內直連”規則,連線從本地網路直接出去。
- 國內 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 看到的 IP | cdnping 看到的 IP | 國內節點延遲 | 說明 |
|---|---|---|---|---|
| 大陸分流 | 大陸 IP | 境外 IP | 低 | 國內流量直連、境外流量走代理,同時有兩個出口 |
| 全域性代理 | 境外 IP | 境外 IP | 高 | 所有流量都經過代理,包括訪問國內網站 |
| 國內直連 | 大陸 IP | 大陸 IP | 低 | 沒有使用代理,或代理沒有接管瀏覽器流量 |
結果是“大陸分流”說明什麼
境外服務看到的是代理出口,國內服務看到的是你的寬頻或移動出口。同一個瀏覽器裡,這兩個 IP 都能被一個網頁讀到。從隱私角度看,“用了代理”不等於“網站不知道你的大陸 IP”。
結果是“全域性代理”說明什麼
國內 CDN 回傳的也是境外 IP,國內節點延遲偏高,說明訪問國內網站也繞到了境外。這時國內網站看到的是代理出口,代價是國內訪問變慢,部分國內服務也可能因為境外 IP 要求額外驗證。
結果是“國內直連”說明什麼
兩側看到的都是大陸 IP。沒開代理時這是正常結果。如果你以為代理開著,就要檢查它是否真的接管了瀏覽器,例如系統代理沒有生效、瀏覽器擴充套件沒有啟用,或當前網路繞開了設定。
各個 CDN 的結論不一致怎麼辦
有時幾個國內 CDN 的結論對不上,例如大部分返回大陸 IP、個別返回境外 IP。常見原因是分流規則只覆蓋了一部分國內域名,或者某個域名解析到了境外節點。這時逐個看每個 CDN 的 IP 和延遲,比只看總結論更有用。
動手:自己做一次檢測並生成結果圖
在瀏覽器裡
- 開啟 cdnping.org/ip,等各項檢測跑完。
- 檢視大陸分流檢測的結論,以及每個國內 CDN 回傳的 IP 和延遲。
- 對照上面的表格,看各項是否一致。
- 同一頁還有 DNS 洩漏和 WebRTC 洩漏 檢測,它們是另外兩條可能暴露大陸網路資訊的路徑。
- 要發給同事或貼進工單時,用頁面上的生成結果圖功能匯出一張帶水印的圖片。開啟隱藏 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 狀態 看是不是服務本身的問題,再排查自己的網路。