國內網站如何看到你的真實 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 狀態 看是不是服務本身的問題,再排查自己的網路。

相關文章

繼續閱讀