V2Ray 路由規則設定:geosite、geoip 國內外分流範例

使用 geosite、geoip 與網域規則設定中國大陸直連、其他地區走代理,說明規則比對順序並附上設定範例。

本文重點

先分清網域集合、IP 位址集合與出站標籤,再依「指定例外、中國大陸網域、中國大陸及私有位址、其餘流量走代理」的順序安排規則。本文適合已匯入節點、想調整 v2rayN 分流的使用者;範例採用 V2Ray/Xray 傳統路由欄位,並說明 DNS、規則庫與用戶端產生設定檔之間的差異。

分清 geosite、geoip 與代理出站

路由分流處理的是「這條連線要交給哪個出站」,不是「應該使用哪種節點協定」。VMess、VLESS 等協定是代理出站的連線方式;geosite:cn 與 geoip:cn 則是比對條件。即使訂閱中的節點協定更換,只要實際出站標籤不變,路由規則就不必跟著改。

寫法比對對象無法據此推斷的事項
geosite:cn目前規則庫中 cn 分類收錄的網域不代表所有中文網頁,也不等於所有中國大陸 IP
geoip:cn目前規則庫中歸類為 CN 的 IP 網段無法據此確定網站營運方所在地或連線品質
geoip:private規則庫定義的私有及特殊用途位址集合不能取代作業系統的所有區域網路路由
outboundTag現有出站的 tag 字串填入 proxy 不會自動建立代理節點

傳統設定通常會從 geosite.dat 與 geoip.dat 讀取集合。這裡的「cn」是資料分類名稱,不是核心即時查詢所得的地理判定。規則庫來源、發布日期與分類維護方式都會影響結果;新啟用的網域若尚未納入集合,應先新增精確例外,再考慮更新資料。

依比對順序安排中國大陸直連與代理備援

路由規則通常依陣列順序由上往下檢查,遇到第一條完全符合的規則就會選定出站,不會自動繼續尋找「更精確」的下一條。單一規則同時設定 domain、ip、port 等不同條件時,通常必須全部符合;同一個 domain 清單中的多個項目則只要符合其中一項即可。

方案選擇:中國大陸直連,其餘走代理

網域優先層
  • 先加入需要強制走代理或直連的精確例外。
  • 接著使用 geosite:cn 比對中國大陸網域集合。
  • 連線一旦符合網域規則,就不會再檢查後續 IP 規則。
IP 與備援層
  • 使用 geoip:private 處理私有位址。
  • 使用 geoip:cn 處理中國大陸 IP。
  • 最後將其餘 TCP、UDP 連線交給代理出站。

精確例外必須排在範圍較廣的集合之前;代理備援則放在最後,並搭配網域解析策略。

例如,某個網域雖然屬於 cn 集合,卻需要走代理,就應將該網域的代理規則放在 geosite:cn 前面。只在最後追加代理規則並不起作用,因為前面的直連規則已經結束比對。反過來,若把「所有 TCP、UDP 都走代理」放在第一條,後面的中國大陸分流規則也就沒有機會生效。

對照 JSON 設定與 domainStrategy

以下是路由片段,不是包含節點、入站與 DNS 的完整設定。假設已有標籤為 proxy 的可用代理出站,以及標籤為 direct、協定為 freedom 的直連出站。範例網域 example.com 僅用於示範精確例外;若不需要這項例外,刪除第一條規則即可。

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

這裡刻意選用 IPOnDemand:網域未符合前兩條規則時,檢查到 IP 規則便會嘗試解析網域,再以解析結果比對中國大陸或私有位址。已符合 cn 網域集合的連線會直接選定直連,不需要為了後續路由規則額外解析。若要求本身就是 IP 位址,則直接進行位址比對。

本文設定

解析策略
IPOnDemand
中國大陸網域
geosite:cn → direct
中國大陸及私有 IP
geoip:cn / private → direct
最後備援
tcp,udp → proxy

只有比對到 IP 條件時才按需解析,適合本文明確設定備援規則的架構;若解析失敗或結果不準確,仍會影響判斷。

另一種寫法

解析策略
IPIfNonMatch
解析時機
網域未符合任何規則後
範圍較廣的備援
避免過早比對所有連線
未符合規則時的處理方式
通常交由設定中的第一個出站處理

也要一併檢查出站順序。不能只更改本文的策略名稱,就認定處理方式仍然相同。

AsIs 不會為了路由判斷而主動將網域解析成 IP。這適合主要依賴網域規則的設計,但不能期待只有網域的要求自動符合 geoip:cn。此外,路由中的 domainStrategy 與直連出站中的同名設定各有用途:前者決定如何比對,後者影響連線目的位址的處理方式,兩者不能互相取代。

在 v2rayN 儲存規則並確認生效

以下以提供「設定」與「路由設定」入口的 v2rayN 繁體中文桌面介面為操作基準。不同版本的對話框版面及規則編輯按鈕文字可能不同;請先確認目前啟用的是哪一套路由設定,再修改規則內容。本文片段依 V2Ray/Xray 的 JSON 結構編寫,請勿貼入不接受 JSON 的單行網域輸入欄。

  1. 保留原有設定

    開啟「設定」→「路由設定」,記下目前啟用的路由項目,並保留原始內容。若可以新增路由項目,建議先建立一份測試設定,避免覆蓋原本可用的規則。

  2. 確認出站

    確認目前節點可以連線,並核對用戶端規則使用的直連與代理出站標籤。範例中的 proxy、direct 必須對應實際產生之設定中的標籤,不能用節點顯示名稱取代。

  3. 依序填入

    在「設定」→「路由設定」中編輯目標路由項目,依範例順序填入 domain、ip、network 與目標出站。將網域解析策略設為 IPOnDemand,不要把所有條件合併成一條規則。

  4. 套用並重新連線

    儲存並啟用該路由項目,重新啟動核心,或依介面提示套用設定。確認目前沒有強制所有流量走代理或全部直連的覆寫模式,再建立新連線進行測試;既有的長連線不一定會立即切換路徑。

  5. 查看記錄

    開啟用戶端記錄,分別連線至中國大陸網域、其他網域與區域網路位址。若有連線記錄可查看,請檢查目的位址與選取的出站標籤;若出現規則庫載入失敗或找不到出站,先修正設定再繼續測試。

用戶端通常會依照介面設定重新產生核心設定檔。直接修改暫存產生的檔案,下次切換節點或重新啟動時可能會被覆寫。因此,長期使用的規則應存放在用戶端支援的路由設定入口;只有明確使用完整自訂設定時,才自行維護整份 JSON。

在 Android 上,v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心。不能只因規則欄位相似,就假設兩者的介面入口、內建規則庫與自訂設定匯入方式完全相同。移轉規則時,請先確認目前核心及用戶端支援的設定功能;訂閱網址也不應當作路由規則匯入。

透過連接埠、記錄與 DNS 逐項檢查分流

判斷是否生效,應確認連線是否進入核心、符合哪個出站規則,而不是只比較網頁開啟速度。DNS 快取命中、重複使用連線或遠端內容快取,都可能讓速度看起來差異很大,卻無法證明路由選擇正確。以下三個數值是測試輸入,不是本站實測結果,也不是所有用戶端的預設值。

10808
以下命令假設的本機 SOCKS 連接埠
443
HTTPS 測試目標連接埠
192.168.1.1
僅在實際閘道相同時用於私有網路測試

先前往「設定」→「參數設定」,確認本機監聽連接埠及 SOCKS 支援狀態。若本機 SOCKS 確實監聽 127.0.0.1:10808,可在終端機執行以下命令;Windows 可明確呼叫 curl.exe。socks5h 會將目標網域交由代理端處理,適合檢查網域規則;socks5 通常會在本機解析,送至核心的可能已是 IP。

curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://www.baidu.com/
curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://example.com/

如果應用程式只將 IP 交給核心,網域規則可能根本沒有網域可供比對。在某些協定與連線中,嗅探可以補充網域資訊,但不保證能識別所有流量,也可能改變比對結果。排錯時先記錄實際目標的形式,再決定是否調整嗅探,避免同時修改 DNS、嗅探與路由,導致無法找出原因。

排查中國大陸網站走代理與規則未生效

加了 geosite:cn,中國大陸網站還是走代理?

先在「設定」→「路由設定」確認該路由項目已啟用,再檢查前面是否有涵蓋全部流量的代理規則。若記錄顯示網域未收錄於集合,可暫時新增 domain: 例外並放在備援規則之前;若收到的是 IP,則應檢查 geoip 與 DNS,而不是繼續新增網域規則。

出現 geosite 或 geoip 載入失敗提示,該怎麼辦?

檢查錯誤訊息指出的規則庫名稱、分類名稱與路徑。使用用戶端提供的資料更新功能,還原相應檔案後重新啟動核心;不要將其他格式的規則檔重新命名為 .dat。使用自訂資料來源時,也要確認其中確實包含 cn、private 等所需分類。

換成 IPIfNonMatch 後,中國大陸 IP 規則反而沒有符合?

檢查末尾是否仍有 network: tcp,udp 這類涵蓋所有連線的規則。網域若先符合這條規則,就不會觸發「未符合規則時再解析」。請恢復本文的 IPOnDemand 架構,或重新設計不含過早備援的規則,並確認第一個出站。

區域網路連線失敗,只加入 private 就夠了嗎?

先確認實際位址,例如閘道是否確實為 192.168.1.1。若要求已進入核心,請檢查私有位址是否符合 direct;若受到 TUN 排除設定、作業系統路由或防火牆阻擋,單靠核心路由無法解決。直連只表示選擇本機出口,不代表一定能連上目標。

更新訂閱後,分流規則為什麼沒有一起更新?

一般節點訂閱主要更新節點連線參數,不代表會同步更新路由規則庫或本機路由設定。請分別檢查訂閱更新、geo 資料更新與目前的路由項目。每次只修改一項,再使用同一組測試網域查看記錄,才能判斷變化來自哪裡。

維護時保留一份精簡的例外清單,記下網域、預期出站與新增原因。優先修正範圍過廣的規則及排序,再考慮增加更多分類。中國大陸直連、其餘流量走代理是一套容易理解的預設方案,並非適用所有網路環境的唯一選擇;最終應依實際使用需求、解析結果與核心記錄共同確認。

下載 V2Ray 用戶端