V2Ray 路由分流規則實戰:中國大陸直連、境外流量走代理的完整設定指南

以中國大陸網路環境為例,示範使用 geosite 與 geoip 規則,讓境內網站直連、境外網站經由代理,並說明 routing 設定、規則順序與排錯方法。

本文速覽

本文適合已能正常連線至節點,但希望減少中國大陸網站繞道的使用者。內容從請求比對流程開始,提供可直接核對的 routing 規則、v2rayN 設定位置、DNS 配合方式與日誌排錯步驟,最終讓中國大陸網域與 IP 直連,其餘流量則進入代理出站。

先確認分流目標與處理順序

V2Ray 路由分流不是把網路切成兩條獨立連線,而是由同一個入站接收應用程式請求,再依據網域、目標 IP、連接埠與網路類型選擇出站。常見設定會準備名為 direct 的直連出站,以及名為 proxy 的代理出站。routing 規則只會引用這些標籤,不會自行建立連線。

中國大陸直連、其餘流量走代理的核心目標,可濃縮為三層判斷:區域網路與保留位址直接連線;中國大陸網域與 IP 直接連線;未符合上述規則的請求交由代理處理。最後的兜底規則不可省略,否則未命中的流量會落到 outbounds 陣列中的第一個出站,結果取決於設定排列,難以直觀判斷。

應用程式請求讀取目標逐條比對選擇出站建立連線

規則會依陣列中的排列順序執行,第一條符合的規則成功後便立即停止。具體網域規則應放在寬泛規則之前,區域網路位址應放在公網位址規則之前,最後的 tcp,udp 兜底規則必須放在末尾。如果先寫入涵蓋所有網路類型的代理規則,後面的中國大陸直連規則將永遠沒有執行機會。

geosite、geoip 與 domainStrategy 的關係

geosite 是網域分類資料,geoip 是 IP 位址範圍分類資料。存取含有網域的網址時,V2Ray 通常會先取得網域;是否繼續解析目標 IP 並執行 IP 規則,則由 domainStrategy 控制。因此,只加入 geoip:cn 並不代表所有中國大陸網域都能穩定直連。

10808
常見本機 SOCKS 連接埠
10809
常見本機 HTTP 連接埠
3 層
私有網路、網域、IP 直連
2 個檔案
geosite.dat 與 geoip.dat

AsIs 表示依原始網域執行路由;網域規則未命中時,不會為了路由判斷而主動解析 IP。IPIfNonMatch 表示先嘗試網域規則,只有未符合時才解析 IP 並繼續檢查 IP 規則。IPOnDemand 會在遇到需要 IP 的規則時更早觸發解析。中國大陸直連情境通常選擇 IPIfNonMatch,兼顧網域分類與 IP 位址範圍兜底。

策略 比對行為 適用情境 注意事項
AsIs 優先保留原始網域,不主動解析 IP 進行路由 規則主要依賴網域分類 只有 geoip 規則時,可能無法符合網域請求
IPIfNonMatch 網域規則未符合後,再解析並檢查 IP 中國大陸網域與 IP 雙重直連 需要 DNS 正常回傳結果
IPOnDemand 路由判斷需要 IP 時立即解析 大量規則依賴目標 IP 可能增加 DNS 查詢次數

結論:預設先使用 IPIfNonMatch

同時設定 geosite:cngeoip:cn 時,IPIfNonMatch 能先使用網域分類,再以解析結果補足未分類網域,比單獨依賴其中一套資料更容易排錯。

可直接套用的 routing 設定

以下是一個完整的 routing 物件,可合併至既有的 V2Ray 或 Xray 設定中。它假設 outbounds 中已存在 directproxy 兩個標籤。貼上前先確認原設定是否已有 routing 欄位;同一層級的 JSON 物件不能保留兩個同名欄位,應加以替換或合併,不能直接追加。

{
  "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"
      }
    ]
  }
}

第一條規則可確保 192.168.0.0/1610.0.0.0/8 等私有網路目標維持本機存取。第二條在 DNS 解析前即可依網域分類決定直連。第三條處理網域分類未涵蓋、但解析位址屬於中國大陸位址範圍的情況。第四條未指定網域或 IP,因此會接收剩餘的 TCP 與 UDP 請求。

  1. 先確認原設定中的直連出站標籤。常見寫法是協定為 freedom,標籤為 direct
  2. 確認代理出站標籤指向目前使用的節點,範例使用 proxy,實際名稱可能不同。
  3. 將 routing 物件放在設定根層級,與 inboundsoutboundsdns 同層。
  4. 使用支援 JSON 驗證的編輯器檢查逗號、方括號與大括號,再重新啟動核心以載入設定。
  5. 開啟執行日誌,分別存取區域網路管理位址、中國大陸網站與境外網站,核對實際使用的出站標籤。

在 v2rayN 中建立對應規則

v2rayN 可透過圖形介面管理路由。進入「設定」→「路由設定」,建立新的規則集並啟用。不同版本的介面文字可能略有差異,但需核對的欄位相同:網域策略、規則順序、出站標籤與最後的兜底規則。修改後應重新載入設定或重新啟動核心,僅儲存視窗不一定會立即影響目前連線。

順序 規則內容 出站 目的
1 geoip:private direct 保留區域網路與本機服務存取
2 geosite:cn direct 中國大陸網域直接連線
3 geoip:cn direct 中國大陸 IP 位址範圍直接連線
4 tcp,udp proxy 其餘請求進入代理節點

本機代理連接埠也必須與應用程式設定一致。常見設定使用 SOCKS 連接埠 10808、HTTP 連接埠 10809,但這兩個數字並非強制標準。請進入「設定」→「參數設定」查看目前的本機監聽連接埠,再確認瀏覽器、下載工具或系統代理是否使用相同連接埠。連接埠不一致時,請求根本不會進入 V2Ray,路由規則自然不會生效。

結論:先確認請求已進入核心

排查分流前,先在日誌中找到目標網域或目標 IP。完全沒有請求紀錄時,優先檢查系統代理、TUN 狀態與 10808/10809 連接埠,不要先修改 geosite 規則。

DNS 決定 geoip 規則能否接續執行

domainStrategy 使用 IPIfNonMatch 時,網域規則未符合後需要由 DNS 回傳位址,接著才能執行 geoip:cn。如果 DNS 查詢失敗、由應用程式自行加密處理,或瀏覽器未將網域交給代理,DNS 與路由看到的目標可能不同。典型現象是同一個網站有時直連、有時走代理,或日誌中只有 IP 而沒有網域。

最容易維護的做法,是讓中國大陸網域使用可直接存取的 DNS,其餘查詢透過受控路徑完成,同時避免系統 DNS、瀏覽器獨立 DNS 與核心 DNS 的多套策略互相覆蓋。V2Ray 的 dns 欄位負責解析,routing 負責選擇連線方向;兩者相關,但不是同一項功能。

明明設定了 geosite:cn,中國大陸網站仍然走代理?

先檢查代理兜底規則是否排在最前面,再確認核心能讀取 geosite.dat。開啟路由日誌查看符合的規則,不要只依出口位址判斷。

存取網域時走代理,直接輸入 IP 卻能直連?

這通常表示 geoip:cn 已生效,但網域規則沒有符合。確認設定中寫的是 geosite:cn,並檢查網域是否使用了未被目前資料分類的 CDN 位址。

啟用分流後區域網路管理頁面打不開?

geoip:private 放在第一條並指向 direct,同時檢查 TUN 或系統代理是否設定了區域網路繞過。測試時直接存取路由器的實際位址。

日誌顯示 DNS 逾時,應先修改哪一項?

先使用系統指令確認目前 DNS 可達,再檢查核心 DNS 設定與出站路徑。不要同時更換節點、規則與 DNS,否則無法判斷究竟是哪個步驟恢復正常。

訂閱更新後自訂路由消失?

將規則儲存至 v2rayN 的「設定」→「路由設定」中,並啟用對應規則集。Android 用戶端使用完整自訂設定時,更新訂閱前應確認目前執行設定的來源。

如果應用程式直接傳送 IP,V2Ray 無法從連線本身還原原始網域,此時只會執行 IP、連接埠與網路類型規則。反過來,如果請求帶有網域且 geosite:cn 已符合,就不會繼續解析 IP 進行第二次路由判斷。這正是規則順序與 domainStrategy 必須一起理解的原因。

依日誌逐層排查分流結果

排錯時不要一開始就大幅修改規則。先選定三個固定目標:一個區域網路位址、一個確認屬於中國大陸分類的網域,以及一個需要透過代理存取的網域。每次只修改一個變數,重新建立連線,並記錄日誌中的目標、符合的規則與出站標籤。如此即可區分入口、分類、DNS 與節點問題。

  1. 確認入口: 日誌中必須出現測試請求。沒有紀錄時,檢查系統代理、應用程式代理或 TUN 接管狀態。
  2. 確認目標: 查看日誌記錄的是網域還是 IP。只有 IP 時,geosite 無法參與這次比對。
  3. 確認順序: 檢查是否有更寬泛的規則提前符合,尤其是位於頂部的全域代理規則。
  4. 確認資料: 核對 geosite.datgeoip.dat 是否存在於核心可讀取的位置,更新後重新啟動核心。
  5. 確認標籤: routing 的 outboundTag 必須與 outbounds 中的 tag 完全一致。
  6. 確認 DNS: 使用 IPIfNonMatch 時,網域未符合後必須能成功解析,否則無法繼續執行 IP 分類。
  7. 確認重建連線: 關閉測試頁面或應用程式連線後重新發出請求,避免重用舊連線干擾結果。

在 Android 上使用 v2rayNG 或 v2flyNG 時,訂閱節點通常由用戶端產生執行設定。若只是驗證節點是否可用,先維持預設路由;需要長期套用自訂分流時,應確認用戶端目前使用的是訂閱產生的設定,還是匯入的完整設定。v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心,兩者都應以實際執行日誌與核心支援的資料格式為準。

測試 1:192.168.1.1
預期結果:符合 geoip:private → direct

測試 2:中國大陸網站網域
預期結果:符合 geosite:cn → direct

測試 3:未符合中國大陸分類的網域
預期結果:繼續檢查解析後的 IP,最終進入 proxy 或 geoip:cn

測試 4:UDP 應用程式請求
預期結果:未符合直連規則時,由 tcp,udp 兜底 → proxy

設定完成後的判斷標準,不是所有網站都能開啟,而是每類請求都進入預期的出站。中國大陸網站無法開啟但日誌已符合 direct 時,應繼續檢查本地網路與 DNS;境外網站已符合 proxy 但連線失敗時,應檢查節點、傳輸參數與遠端可達性。將路由判斷與連線品質分開處理,能避免反覆修改正確的規則。

特例規則應該放在哪裡?

實際使用時,可能遇到某個中國大陸網域必須經由代理,或某個未分類網域必須直連。此時應新增範圍盡可能小的特例,並放在通用分類規則之前。網域精確比對可使用 full:;指定某個網域及其子網域可使用 domain:;不要只為了一個網站就擴大到整個頂級網域。

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

上述結構用於說明精確網域規則的位置與寫法,實際設定時應替換成需要處理的真實網域。如果特例放在 geosite:cn 後面,而目標已被中國大陸分類符合,特例就沒有執行機會。需要強制直連的網域同理,應放在最後的代理兜底規則之前。

不要把短暫的 DNS 故障、節點無法使用或網站本身故障,直接固化成永久路由規則。先透過日誌確認請求確實選錯出站,再新增特例。經過這樣驗證的設定更精簡,更新 geosite 與 geoip 資料後,也更容易判斷哪些手動規則已可刪除。

下載 V2Ray 用戶端 Windows、macOS、Android、Linux