V2Ray 路由規則設定實戰:中國大陸直連與境外代理分流寫法

以 routing 區段為核心,示範依網域、IP 與 geosite/geoip 資料集撰寫分流規則,實現中國大陸網站直連、境外網站走代理,並整理規則優先順序與排錯方法。

本文速覽

適合已完成訂閱匯入、節點可正常連線,但希望減少中國大陸網站繞行的使用者。文章從請求比對流程開始,提供可直接合併至現有設定的 routing 片段,並涵蓋 v2rayN 圖形介面設定、規則順序、DNS 影響、日誌排錯與驗證方法。

分流核心:為每類請求選擇出站

V2Ray 路由不是另一種代理協定,而是核心處理請求時使用的一組判斷條件。應用程式請求進入本機 SOCKS、HTTP 或透明代理入口後,核心會讀取目標網域、目標 IP、連接埠與網路類型,再從 routing.rules 頂端開始逐條比對。第一條符合的規則會決定請求使用哪個 outboundTag,後續規則不再執行。

常見設定會準備三個出站標籤:proxy 連線訂閱節點,direct 直接存取目標,block 拒絕連線。路由規則本身不儲存節點位址,也不會變更 VMess、VLESS 等節點參數;它只會將流量送往已存在的出站。因此,從用戶端匯出設定後,應先確認實際標籤名稱,再複製規則。

應用程式發起請求入口接收流量辨識網域與 IP依規則順序比對選定出站

「中國大陸直連、其他流量走代理」通常由三層條件完成:私有位址直連、中國大陸網域與中國大陸 IP 直連,其餘 TCP 與 UDP 請求交由代理。最後一條是兜底規則,必須放在規則清單底部。如果將兜底代理放在最前面,所有請求都會立即符合,後面的中國大陸直連規則就等於沒有執行。

10808
範例 SOCKS 監聽連接埠
10809
範例 HTTP 監聽連接埠
6 條
基礎分流規則數量
7.12.7
本文 v2rayN 操作基準

routing 設定:geosite、geoip 與兜底規則

geosite 是網域分類資料,geoip 是 IP 位址區段分類資料。網域請求可以先依 geosite:cn 判斷;沒有符合網域規則時,將 domainStrategy 設為 IPIfNonMatch 會嘗試解析目標位址,再交由 IP 規則判斷。這種寫法兼顧網域存取與直接連線 IP 的程式。

私有網路直連

符合項目
geoip:private
出站
direct
典型目標
區域網路與回送位址

避免路由器後台、網路儲存裝置與本機服務被送入代理。

中國大陸網域直連

符合項目
geosite:cn
出站
direct
判斷依據
網域分類資料

網域仍可見時優先比對,通常比解析後再判斷更直接。

中國大陸 IP 直連

符合項目
geoip:cn
出站
direct
適用請求
直接存取 IP

也用於網域規則未符合後,透過解析結果進行補充判斷。

其餘流量走代理

網路
tcp,udp
出站
proxy
位置
規則清單末端

作為最終兜底,不應放在任何精確比對規則之前。

以下片段只包含 routing 物件,應合併至現有的完整設定,而不是作為獨立設定檔啟動。廣告分類規則依賴 block 出站;如果目前設定沒有該出站,可以先刪除第一條規則,保留直連與代理分流。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "domainMatcher": "hybrid",
    "rules": [
      {
        "type": "field",
        "domain": [
          "geosite:category-ads-all"
        ],
        "outboundTag": "block"
      },
      {
        "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"
      }
    ]
  }
}

domainMatcher: hybrid 用於網域規則比對;部分舊版核心不識別此欄位時,可以刪除該行並使用預設比對器。分類資料也需要與核心版本相配套。如果日誌出現資料集不存在,而設定拼寫正確,應更新用戶端使用的核心與規則資料,不要將該錯誤誤判為節點失效。

在 v2rayN 中實作:從訂閱到自訂路由

v2rayN 負責儲存訂閱、選擇使用中的節點並產生核心設定。透過圖形介面維護路由時,用戶端會在啟動核心前組合節點出站與規則集,比反覆修改暫時產生的 config.json 更穩定。暫存檔可能在切換節點、更新訂閱或重新啟動用戶端後重新產生。

  1. 確認節點連通性。更新訂閱並選擇一個節點,先使用「測試伺服器真實連線延遲」確認可以建立連線。路由只能分配流量,無法修復節點位址、連接埠或驗證參數。
  2. 開啟路由設定。在 v2rayN 7.12.7 中進入「設定」→「路由設定」,建立一個規則集,並將其設為目前使用的路由設定。不同小版本的按鈕位置可能調整,但路由入口名稱維持一致。
  3. 新增精確規則。依序建立廣告封鎖、私有 IP 直連、中國大陸網域直連、中國大陸 IP 直連規則。填寫出站標籤時,選擇用戶端現有的 block、direct 或 proxy,不要輸入節點備註名稱。
  4. 新增最終代理規則。將網路類型設為 TCP 與 UDP,出站設為 proxy,並將該規則移至最底部。沒有最終兜底時,未符合的請求會依核心預設行為處理,結果不夠直觀。
  5. 儲存並重新啟動核心。儲存規則後執行一次重新啟動服務,再開啟日誌視窗確認設定載入成功。只關閉設定視窗而不重新啟動時,正在執行的核心可能仍使用舊設定。

v2rayNG 與 v2flyNG 也提供路由設定,但兩者使用的核心分支不同。v2rayNG 通常搭配 Xray 核心,v2flyNG 則對應 V2Fly 核心。基礎的 field、domain、ip、network 與 outboundTag 邏輯一致,但可用的擴充欄位可能不同。跨用戶端遷移時,應先保留基礎規則,再逐項驗證核心專屬功能。

規則優先順序:具體條件置前,寬泛條件置後

路由規則採用由上而下的首次符合機制,不會先合併多條規則再計算最佳結果。某個網域若同時屬於自訂代理清單與 geosite:cn,最終走向取決於哪條規則排在前面。設計順序時,可以依「手動例外、特殊類別、私有位址、區域分類、最終兜底」排列。

建議順序 規則範例 出站 放置原因
1 指定網域強制走代理 proxy 覆寫後續區域分類結果
2 category-ads-all block 先處理明確的封鎖目標
3 geoip:private direct 保留本機與區域網路存取
4 geosite:cn direct 依網域判斷中國大陸網站
5 geoip:cn direct 補充 IP 位址區段判斷
6 tcp,udp proxy 接收所有剩餘請求

需要讓某個網域始終走代理時,應將自訂規則放在 geosite:cn 之前。網域比對形式也有所不同:full: 只比對完整主機名稱,domain: 可以比對該網域及其子網域,regexp: 使用正規表示式。一般分流優先使用 full 或 domain,只有確實需要模式判斷時才使用正規表示式。

{
  "type": "field",
  "domain": [
    "full:status.example.net",
    "domain:service.example.net"
  ],
  "outboundTag": "proxy"
}

結論:例外規則必須早於區域規則

出現「某個網站總是走錯出口」時,先調整該網站規則的位置,不要先更換節點。採用首次符合機制時,排序比規則數量更重要。

反過來,如果某個下載網站需要始終直連,也應建立獨立的 direct 規則,並放在最終代理規則之前。不要為了一個例外刪除整組 geositegeoip 規則,否則會將局部問題擴大成全域分流變更。

DNS 與網域辨識:為什麼規則正確仍可能走錯

路由能否依網域比對,取決於核心是否取得原始目標網域。瀏覽器透過本機 SOCKS5 傳遞網域時,核心可以直接比對 geosite;如果上游只交給核心一個已解析完成的 IP,網域規則便無法參與,只能依賴 geoip。透明代理情境還可能透過流量探測還原 HTTP 主機名稱或 TLS Server Name。

DNS 查詢本身要走哪個出口也是獨立問題。若系統 DNS 能正常解析中國大陸網域,而代理節點負責連線其他目標,基礎分流通常已足夠。若出現解析污染、境內外結果不同或 UDP 查詢逾時,則需要進一步設定核心 DNS,並明確指定 DNS 伺服器位址、查詢網域範圍與查詢流量的出站。

使用 IPIfNonMatch 不代表所有網域都會先解析。已符合 geosite:cn 或自訂網域規則的請求可以直接選擇出站;只有網域條件沒有結果,且後方還存在 IP 規則時,才需要解析並繼續判斷。這也是它比無條件依賴 IP 判斷更適合一般設定的原因。

日誌排錯:從設定載入到規則符合

分流失敗時,應先區分「核心沒有啟動」與「核心已啟動但走錯出站」。前者通常在啟動後數秒內出現 error 或 failed,常見原因包括 JSON 逗號錯誤、欄位層級放置錯誤、出站標籤不存在及規則資料檔案遺失。後者則需要提高日誌層級,觀察目標位址與最終出站。

  1. 檢查 JSON 結構。routing 應與 inboundsoutbounds 位於設定根層級。複製片段時,多餘逗號與重複的大括號是常見錯誤。
  2. 核對標籤拼寫。outboundTag 區分字元內容,必須與 outbounds 陣列中的 tag 完全一致。proxy 節點備註不能取代出站標籤。
  3. 檢查規則資料。若日誌指出 geosite 或 geoip 項目無法載入,應確認資料檔案存在,且目前核心支援該分類名稱。
  4. 暫時提高日誌層級。loglevel 從 warning 調整為 info,重新啟動核心後存取一個中國大陸網域與一個需要代理的網域,再查看連線紀錄。排錯結束後可恢復為 warning,減少日常日誌量。
  5. 縮小規則集合。先保留 private、cn 與最終 proxy 三組基礎規則。基礎分流正常後,再逐條恢復廣告分類、自訂網域與連接埠規則。
{
  "log": {
    "loglevel": "info"
  }
}

如果中國大陸網域仍走代理,先檢查最終 proxy 規則是否排在 geosite 規則之前,再確認請求是否只攜帶 IP。若請求只有 IP,檢查 geoip:cn 是否載入成功。若某個境外服務走了 direct,檢查它是否被自訂直連規則或區域資料誤判符合,並透過日誌確認實際目標網域。

UDP 請求異常時,應確認目前節點協定與傳輸設定是否允許 UDP,同時檢查最終兜底規則的 network 是否包含 udp。只寫 tcp 會讓網頁看起來大致正常,但依賴 UDP 的 DNS、即時通訊或部分網路檢測出現逾時。路由允許 UDP 不代表節點端必然接受 UDP,兩端能力必須同時具備。

結論:先證明規則符合,再判斷節點品質

同一請求在 direct 與 proxy 之間切換時,日誌中的 outboundTag 是最直接的判斷依據。只有確認請求已送達預期出站後,延遲、逾時與吞吐量問題才應歸入節點或鏈路排查。

驗證結果:使用固定目標完成回歸測試

儲存規則後不要只測試一個網頁。瀏覽器快取、連線重用與 DNS 快取都可能保留舊結果。建議重新啟動核心、關閉現有連線,再使用固定測試清單,分別涵蓋區域網路位址、中國大陸網域、直接 IP、境外網域、TCP 與 UDP。每次修改規則後重複同一份清單,結果才具可比性。

可維護的基礎方案通常只有少量規則:私有位址直連、中國大陸網域直連、中國大陸 IP 直連、明確例外與最終代理。規則越多,分類交叉與順序衝突越難排查。新增規則前先說明它要解決的具體目標,並記錄應放在現有哪條規則之前。

geosite 與 geoip 資料會隨網路資源變化而更新,區域分類不可能永久涵蓋每個網域與位址區段。遇到少數分流錯誤時,優先新增精確例外並保持在區域規則上方;只有大量目標同時異常時,才需要檢查規則資料版本、核心相容性與 DNS 路徑。

結論:基礎規則保持精簡,例外規則保持精確

六條以內的主幹規則搭配少量 full 或 domain 例外,通常比堆疊大量寬泛正規表示式更容易驗證,也更適合訂閱更新後持續維護。

下載v2rayN