V2Ray 路由規則設定教學:geosite、geoip 分流完整解析

運用 geosite、geoip 與自訂網域規則,設定中國大陸直連、其他流量走代理;說明規則比對順序、domainStrategy 選項及常見設定錯誤。

本文重點

本文適合已匯入節點,並想依網域與 IP 設定分流的使用者。先認識網域清單、IP 清單與預設出口,再透過路由設定範例說明規則順序,最後在 v2rayN 套用設定並查看日誌驗證。範例採用 Xray/V2Fly 常見的 field 路由寫法,將訂閱節點參數、客戶端選單與核心設定分開說明。

一、geosite 與 geoip 分別比對什麼

路由分流不會更改節點協定,而是替每條進入核心的連線選擇出口。VMess、VLESS 等協定決定代理連線的建立方式;路由規則則決定目前的連線目標要交給代理、直連或其他已設定的出口。訂閱中有可用節點,不代表已經設定好合適的分流策略。

geosite:cn 會參照網域資料檔中的 cn 分類,geoip:cn 則會參照 IP 資料檔中的中國大陸位址清單。前者用來判斷網域是否列在清單中,後者則判斷目標 IP 是否落在指定網段。這些規則僅依資料清單比對,不會分析頁面使用的語種,也無法保證每個中國大陸服務、跨國網站或 CDN 位址都符合預期。

網域規則

欄位
domain
清單範例
geosite:cn
完整網域
full:example.com
網域及其子網域
domain:example.com

核心必須取得網域名稱;若連線只提供目標 IP,就無法直接用網域清單比對。

位址規則

欄位
ip
清單範例
geoip:cn
私有位址
geoip:private
網段範例
192.168.0.0/16

適用於直接以 IP 建立的連線,或在路由階段解析網域後再比對位址。

設定網域時,建議明確使用 full: 或 domain:。一般字串若採子字串比對,可能會誤判名稱相似、但並非同一組織的網站;而 domain:example.com 會比對該網域及其子網域,不會將 notexample.com 視為子網域。本文中的 example.com 僅用於說明語法,並非連線測試服務。

二、規則順序:自訂例外優先於清單

一般 field 規則會依陣列順序逐一檢查,由第一條符合的規則決定出口,不會自動挑選「看起來較精確」的規則。同一條規則同時設定 domain 和 port 時,通常必須兩個欄位都符合;同一個 domain 陣列中的多個項目則符合任一項即可。若要設定「某網域或某 IP」,應拆成兩條規則。

  1. 先加入必要例外:例如必須透過代理存取的服務網域,避免被後續的直連清單提前攔截。
  2. 接著加入網域清單:符合條件的中國大陸網域直接連線,減少為路由額外進行解析的機會。
  3. 再比對 IP 位址:將私有位址與中國大陸 IP 導向直連出口,涵蓋以 IP 存取的目標。
  4. 最後處理未符合規則的連線:本例以第一個出口作為預設出口,不另外加入無條件規則。

另一個常見誤解,是以為「中國大陸直連、其他地區走代理」能準確判斷每家公司的所在地。實際上,這套策略只是結合清單比對與預設出口:不在中國大陸清單中的連線會預設走代理,但不代表已確認這些目標都位於境外。跨區部署、企業內網網域及需要固定出口的服務,應透過明確的例外規則處理。

三、如何選擇 domainStrategy 的三種值

routing.domainStrategy 控制路由比對時如何使用 DNS 解析結果,不會直接決定瀏覽器使用哪個 DNS 服務,也不同於直連出口本身的網域解析策略。排查問題時,必須先確認修改的是哪個設定物件,不能只因欄位名稱相同,就認定作用方式一致。

選項路由階段的行為適用情況
AsIs路由不會額外解析網域;若目標原本就是 IP,仍可比對 IP 規則。以網域規則為主,不需要透過解析網域來補充 IP 比對。
IPIfNonMatch首次檢查找不到符合的規則時,才嘗試解析網域並進行路由判斷。先依網域分類,未符合時再以中國大陸 IP 清單補充比對。
IPOnDemand遇到需要目標 IP 的規則時,才視需要嘗試解析網域。希望較早進行 IP 比對,並可接受對 DNS 的依賴。

本例選擇 IPIfNonMatch。符合 geosite:cn 的網域會直接選擇直連;未知網域首次比對未符合時,才有機會透過解析結果符合 geoip:cn。若 DNS 查詢失敗、回傳的位址不在目標清單中,或更前面的規則已符合,結果都可能不同。

使用 IPOnDemand 時,尤其要留意規則順序:若前面的 IP 規則已依解析結果符合,後面的網域例外就不會再被檢查。將自訂網域例外放在最前面,通常比事後不斷補上 IP 網段更容易維護。

四、路由設定範例:中國大陸直連,其餘預設走代理

以下只展示頂層 routing 物件,無法直接作為完整的客戶端設定執行。同一份完整設定的 outbounds 必須已定義標籤為 proxy 的代理出口及標籤為 direct 的直連出口,而且第一個出口必須是 proxy。節點位址、驗證資訊與入站設定由現有的客戶端設定提供。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "domain": [
          "full:example.com",
          "domain:example.net"
        ],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:private",
          "geoip:cn"
        ],
        "outboundTag": "direct"
      }
    ]
  }
}

使用這種傳統資料格式時,核心也必須能讀取對應的 geosite.dat 與 geoip.dat。檔案遺失、路徑錯誤或分類名稱不存在,都可能導致設定載入時發生錯誤。更新規則資料後,必須重新載入核心;更換資料來源前,也應確認所使用的分類仍然存在。

五、在 v2rayN 套用並驗證設定

v2rayN 的一般節點模式通常會產生核心設定,因此直接編輯暫存產生的 JSON,可能會在下次重新啟動時被覆寫。建議優先透過路由設定管理規則;需要完整自訂設定時,再使用相應的自訂設定入口。不同桌面版本的按鈕位置可能有所不同,以下步驟以具有「設定」→「路由設定」入口的介面為例。

  1. 備份目前的規則

    開啟「設定」→「路由設定」,保留現有規則的副本,並記下目前選用的路由方案。先不要刪除原方案,測試失敗時才能切回。

  2. 整理規則順序

    在路由設定中編輯測試方案,依序加入網域例外、中國大陸網域規則與 IP 規則。請在介面的規則編輯器中填寫對應欄位,不要將整段頂層 JSON 貼進單一網域輸入欄。

  3. 確認解析策略

    將該方案的網域策略設為 IPIfNonMatch,並確認規則選用的出口。若介面未顯示相關欄位,請查看產生的設定;不要只依路由方案名稱推測實際設定值。

  4. 選取方案並重新載入

    儲存後選取剛編輯的路由方案,再重新載入核心。在編輯視窗中按下儲存,不一定會切換目前使用的方案;請以實際載入的設定與日誌為準。

  5. 逐一測試出口

    分別測試預期直連、預期走代理及區域網路目標,並記錄日誌中的連線目標與出口標籤。測試前請先關閉既有連線;規則變更後,已建立的長連線不會自動重新選擇出口。

驗證前還要確認流量確實進入核心。若應用程式沒有使用系統代理,路由規則再完整也無法接管其流量。以下數字僅為測試設定範例,並非所有安裝環境的預設值;執行命令前,請先在目前的客戶端確認監聽連接埠。

10808
本機 SOCKS 連接埠範例
443
HTTPS 常用目標連接埠
3 條
本文的路由規則範例
curl --proxy socks5h://127.0.0.1:10808 --head https://example.com/

這裡的 socks5h 會將目標網域交由代理端處理,有助於測試網域規則;若改用由本機先行解析的連線方式,核心可能只會看到 IP,測試結果就無法直接比較。這個命令中的網域剛好符合本例第一條規則,應查看代理出口標籤,而非以網頁能否開啟來代替分流驗證。

六、系統代理與 TUN:依流量接管方式調整判斷

相同的路由規則在不同的流量接管方式下,可能會有不同表現。關鍵不在於節點改變,而是核心取得的目標資訊不同。使用系統代理時,應用程式可能直接提供網域;透過 TUN 接管時,連線通常會先以 IP 封包呈現,能否還原網域則取決於 DNS 接管、嗅探等設定。

依目標資訊選擇驗證方式

系統代理情境
  • 確認瀏覽器或應用程式有使用代理設定。
  • 使用明確指定的 SOCKS 代理測試,減少系統設定造成的干擾。
  • 先檢查網域規則,再確認未符合規則時的 IP 比對。
TUN 接管情境
  • 確認實際負責接管的核心與設定格式。
  • 查看日誌記錄的是網域名稱還是純 IP。
  • 先檢查 DNS 接管與區域網路存取,再調整規則。

先確認流量進入哪個核心,再選擇相應的規則格式;本文的 JSON 不適用於所有 TUN 設定。

桌面版 v2rayN、Android 版 v2rayNG 與 v2flyNG 都能以相同的分流目標進行設定,但不能假設選單、標籤與匯入格式完全一致。v2rayNG 著重於 Xray 核心,v2flyNG 則使用 V2Fly 核心;移轉設定時,請確認目前核心支援的欄位與資料格式。節點訂閱也不一定包含客戶端的路由設定。

七、常見設定錯誤:依日誌逐步縮小範圍

加入 geosite:cn 後,中國大陸網站為什麼還是走代理?

先確認日誌中的目標是網域還是 IP,再檢查該網域是否確實列在目前資料檔的 cn 分類中。若日誌中只有 IP,請確認 geoip:cn 與解析策略。若服務網域不在清單中,可新增明確的 domain: 直連規則,不要直接將所有未知目標改為直連。

設定 IPIfNonMatch 後,geoip 為什麼還是沒作用?

確認是否有 port: "0-65535" 等通用規則提前符合。移除測試方案中的預設攔截規則,確認第一個出口是代理,再用一個不符合網域規則的目標測試。此外,也要確認路由使用的 DNS 能否成功回傳位址。

儲存規則後所有連線都失敗了,該怎麼辦?

先切回備份方案,再查看核心啟動日誌。若顯示無法讀取資料檔,請修正檔案路徑或更新對應資料;若錯誤與出口標籤有關,請逐字核對 outboundTag。設定載入失敗時,不應先更換訂閱或節點。

同一個網站有時直連、有時走代理,該如何排查?

分別記錄主網域、靜態資源網域與目標 IP,並確認是否使用不同的位址類型或 CDN 位址。關閉既有連線後再測一次;若透過網域與 IP 連線的結果不同,請先統一測試方式,再判斷是否需要加入網域例外。

排查時一次只修改一個變數:先確認流量接管,再確認設定載入,接著確認規則是否符合,最後檢查 DNS 與實際連線。暫時提高日誌詳細程度有助於找出問題,但分享日誌前,請先移除訂閱網址、驗證資訊及其他敏感內容。更多設定欄位請參閱設定大全;連線問題則可依疑難排解逐項處理。

下載客戶端