V2Ray 路由分流設定教學:使用 geosite 與 geoip 區分中國大陸及海外流量

以中國大陸流量直連、海外流量走代理為例,說明 geosite、geoip 規則、domainStrategy 選擇與規則排序常見問題。

本文重點

本文適合已能透過 v2rayN 連線至節點,並準備調整路由的 Mac 使用者。先了解網域清單與 IP 位址資料庫的差異,再設定「私人位址直連、中國大陸網域與 IP 直連,其餘流量交由代理」的規則。範例提供易讀的 routing 片段,並說明預設出站、DNS 與規則順序如何共同影響實際連線結果。

geosite 與 geoip:比對的對象不同

流量分流並非依照網頁語言或裝置所在地來判斷路由。V2Ray 核心收到請求後,會讀取可用的目標網域、目標 IP、連接埠等資訊,再依序檢查 routing.rules。符合規則後,流量會交由該規則指定的 outboundTag。這個標籤必須對應 outbounds 中實際存在的 tag。

寫法比對對象主要限制
geosite:cn網域分類清單取決於使用的 geosite 資料檔,不代表涵蓋所有中國大陸網站
geoip:cn資料庫歸類為中國的 IP 網段不代表網站所屬公司或內容語言
geoip:private私人及特殊用途位址集合實際範圍以使用的資料檔為準
domain:example.com指定網域及其子網域不涵蓋名稱相似的其他網域
full:example.com完整網域不包含其子網域

geosite:cn 是分類項目,不是根據網域後綴推測所在地。某些 .com 網域也可能列在其中;反過來說,網站若使用境外 CDN,網域分類與 IP 歸屬也可能得出不同結果。有網域資訊時,優先依網域分流通常比只看解析後的位址更容易維護。

v2rayN 路由設定:先備份再修改

v2rayN 是管理設定與連線的用戶端,實際執行規則的是所選的核心。Project V、V2Fly 與 Xray 生態系的設定有一些共用欄位,也各自提供擴充功能。本文只使用常見的 field 規則,不會將某個核心的擴充參數直接套用到其他核心。

  1. 記錄目前設定

    在主畫面記錄目前的伺服器、路由模式與系統代理狀態。開啟「設定」→「參數設定」,記下目前使用的核心與本機監聽連接埠。介面分組可能因版本而異,請以實際畫面為準;不要為了套用範例而切換至不支援現有節點協定的核心。

  2. 備份路由規則

    前往「設定」→「路由設定」,先備份現有規則,再建立或編輯用於測試的路由設定。確認主畫面實際選用了這組路由,而非仍處於全域代理或全域直連模式。

  3. 確認出站標籤

    查看核心實際載入的設定,確認代理與直連出站的 tag。本文使用 proxy 和 direct 作為範例標籤;若實際標籤不同,必須同步替換規則中的 outboundTag。

  4. 套用設定並查看記錄

    儲存規則後,讓用戶端重新載入核心設定,再查看記錄中的啟動結果。若出現找不到出站、資料檔載入失敗或 JSON 解析錯誤,請先還原備份,不要繼續疊加規則。

用戶端通常會重新產生執行中的設定。直接修改暫存的 config.json,可能在切換節點或重新啟動後遭到覆寫。日常使用建議透過路由設定儲存規則;手動管理設定的使用者則可在自己的設定來源中維護以下片段。

routing 範例:中國大陸直連,其餘流量走代理

以下是獨立的路由片段,並非完整的用戶端設定。使用前必須已有可用的代理出站,以及 protocol 為 freedom 的直連出站;兩者的標籤分別為 proxy 與 direct。也請確認核心能讀取包含相應分類的 geosite 與 geoip 資料檔。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

沒有規則符合時,核心通常會使用 outbounds 中的第一個出站。因此,「其餘流量走代理」可以透過明確規則設定,也可以將代理設為預設出站。這兩種方式對 IPIfNonMatch 的影響不同,不能只複製 rules 而忽略出站順序。

domainStrategy:何時解析網域供路由判斷

routing.domainStrategy 決定路由比對期間是否嘗試將網域解析為 IP。它不是系統 DNS 開關,也不等同於直連出站本身的網域處理策略。變更這個欄位不會自動接管 DNS 請求,也不會設定加密方式或上游 DNS。

IPIfNonMatch

建議

先使用現有目標資訊進行比對;若網域未符合任何規則,再嘗試解析並以解析結果重新比對。適合作為起點,但要檢查最後是否已有涵蓋所有請求的規則。若需要透過解析補判,將代理設為第一個出站,預設行為會更明確。

適用情境:網域規則優先,且明確管理預設出站的設定

AsIs

路由階段不會主動解析網域以供比對。網域請求主要依賴 domain 規則;目標本身是 IP 的請求仍可符合 ip 規則。這不代表整個連線過程完全不會發生 DNS 查詢。

適用情境:網域清單較完整,且希望減少路由解析依賴的設定

IPOnDemand

網域請求符合需要 IP 資訊的規則時,嘗試解析後再判斷。若第一條規則就是 geoip:private,可能會很早觸發解析,因此 DNS 是否可用以及回傳的位址會更直接影響流量分流。

適用情境:確實需要依解析位址決策,且已驗證 DNS 路徑的設定

結論:先決定預設規則,再選擇解析策略

若需要「網域清單以外再依 IP 補判」,請先將代理設為第一個出站、移除最後一條涵蓋所有請求的規則,再使用 IPIfNonMatch 驗證。若保留明確的預設規則,就要確認自己接受未知網域直接走代理,或另外測試 IPOnDemand 的解析結果。

同一個網域可能回傳多個 IPv4 與 IPv6 位址,也可能因 DNS 上游不同而連到不同的 CDN 節點。某次符合 geoip:cn,不代表之後每次連線都會符合。若服務需要穩定的出口,請為明確的網域建立專用規則,而不是將偶然出現的 CDN 位址長期固定在規則中。

規則順序:符合第一條就套用,不會自動挑選最佳規則

規則清單會由上而下依序檢查,符合後便使用對應的出站。核心不會比較兩條規則哪一條「更精確」。將專用例外放在範圍較廣的分類之前,並把涵蓋所有請求的預設規則放在最後,是維護規則的基本原則。

{
  "type": "field",
  "domain": ["domain:example.com"],
  "outboundTag": "proxy"
}

例如,某個網域雖然被網域資料庫歸類為直連,但實際上需要固定走代理,可以將專用規則放在 geosite:cn 之前。example.com 是用來說明語法的範例網域,實際使用時請改成目標網域。若只要比對根網域、不涵蓋子網域,請改用 full:。

驗證與疑難排解:檢查目標、規則與出站

網頁能開啟,只能證明這次請求已完成,不能證明流量經過預期的出口。先確認核心成功啟動,再透過固定請求查看存取記錄中的目標與出站標籤。不同核心的記錄格式各異,有些格式會顯示入站與出站的對應關係;若記錄層級太低,請暫時提高記錄層級,測試完成後再恢復。

curl --proxy http://127.0.0.1:10809 --connect-timeout 10 --max-time 20 -I https://www.baidu.com/
curl --proxy http://127.0.0.1:10809 --connect-timeout 10 --max-time 20 -I https://example.com/

這裡的 10809 只是示範用的 HTTP 代理連接埠,並非宣稱目前 v2rayN 的預設值就是此連接埠。請替換為「設定」→「參數設定」中實際啟用的 HTTP 或混合監聽連接埠。命令明確指定本機代理,方便排除「終端機是否遵循系統代理」這項變數;這兩個請求主要用來驗證 TCP 路徑,不會驗證瀏覽器的 UDP 行為。

為什麼中國大陸網站仍然走代理?

先從記錄確認目標是網域還是 IP,再檢查該網域是否存在於目前的 geosite 資料中。若使用 IPIfNonMatch,且最後有涵蓋所有請求的代理規則,網域就不會再經解析進行補判。可以先新增一條完整網域直連規則進行測試,不要立刻改成整段 IP 直連。

加入 geoip:cn 後,部分網站無法開啟?

檢查 DNS 回傳的位址與記錄中的實際出站。若目標 IP 被判定為中國大陸位址,但該服務在目前網路環境無法直連,可以先為服務網域新增代理例外,並將它放在中國大陸直連規則之前。每次只修改一條規則,並保留失敗時的目標記錄以供比對。

記錄顯示找不到 geosite 分類,該怎麼辦?

確認規則中的分類名稱、核心實際載入的資料檔路徑,以及啟動記錄。不同資料版本的內容不一定相同;更新訂閱也不代表規則資料庫已更新。透過用戶端提供的資料更新功能更新後,重新啟動核心;若問題仍未解決,請還原為已確認存在的分類。

修改規則後沒有變化,需要重新安裝嗎?

先確認已切換至新的路由設定、重新載入核心,並關閉測試應用程式的舊連線後再發出請求。已建立的長連線不會因修改規則而自動切換出口。也請確認修改的是設定來源,而不是可能遭用戶端覆寫的執行中檔案。

最後請保留三項記錄:使用的核心、路由規則內容,以及測試請求對應的出站標籤。公開記錄前,請刪除訂閱網址、節點憑證與私人存取紀錄。流量分流設定的驗收目標是「指定請求穩定地使用指定出站」,而不是根據單次測速結果判斷所有規則是否正確。

下載v2rayN依平台選擇用戶端