本文重點

適合已匯入節點並能透過代理瀏覽網頁,但想調整中國大陸直連與海外代理規則的使用者。本文以 V2Ray/Xray 路由欄位為例,說明網域資料庫、IP 資料庫、比對順序與預設出站之間的關係,並示範如何在 v2rayN 設定路由。完成後可透過記錄檔,分辨規則未命中、DNS 解析錯誤,以及請求根本未進入核心這三類問題。

一、設定路由分流前,先確認請求是否進入核心

路由規則只會處理進入代理核心的連線。若瀏覽器未使用系統代理,或應用程式自行直連,修改 geosite:cn 也不會改變這些請求的連線路徑。請先在 v2rayN 主視窗選擇「系統代理」→「自動設定系統代理」,再確認瀏覽器沒有使用獨立的代理擴充功能覆蓋系統設定。

應用程式連線 本機入站 比對規則 選擇出站 目標服務

連接埠請以用戶端目前顯示的數值為準。例如,本機混合監聽連接埠為 10808 時,手動設定的應用程式應連線至 127.0.0.1:10808;不可將節點伺服器的遠端連接埠填成本機代理連接埠。請先到「設定」→「參數設定」確認監聽連接埠,再使用已知可用的節點測試連線,之後才調整分流。

二、geosite 比對網域,geoip 比對目標 IP

geosite:cn 引用網域分類資料庫中的 cn 集合;geoip:cn 則引用 IP 資料庫中的中國大陸位址集合。兩者不是同一條規則的不同寫法,也不能只憑網域後綴判斷分類結果。網域集合取決於使用的資料檔,更新資料後,個別網站的比對結果也可能改變。

規則內容設定欄位實際用途
geosite:cndomain依網域資料庫比對中國大陸相關網域,不必先解析 IP。
geoip:cnip依目標 IP 的歸屬進行比對,適用於 IP 連線或已解析的位址。
geoip:privateip比對資料庫中的私有及特殊用途位址,常用於本機網路直連。
geosite:category-ads-alldomain比對廣告網域集合,需確認目前使用的網域資料庫包含此集合。
domain:example.comdomain比對指定網域及其子網域,用於手動設定例外規則。
full:example.comdomain只比對完整網域,不延伸至其他子網域。

同一條規則的 domain 陣列中,通常只要有任一項目符合即可;但若在同一條規則中同時設定 domain 與 ip,就必須同時符合不同欄位的條件。若要設定「中國大陸網域或中國大陸 IP 皆直連」,應拆成兩條規則,而不是放進同一個規則物件。

三、domainStrategy 決定路由何時解析網域

routing.domainStrategy 控制路由階段是否將網域解析為 IP。它不是「所有 DNS 請求都走代理」的開關,也不同於出站本身的網域解析策略。本文採用 IPIfNonMatch:先比對網域等條件,若沒有符合的規則,再解析目標網域並嘗試比對 IP 規則。

AsIs:依現有目標比對

欄位
domainStrategy
值
AsIs
路由解析方式
不主動解析網域以比對 IP 規則
適用情況
主要依賴網域規則,或入站時已有目標 IP

網域請求未命中時,不會只因為存在 geoip 規則就自動查詢位址。

IPIfNonMatch:未命中時再解析

欄位
domainStrategy
值
IPIfNonMatch
路由解析方式
第一輪沒有符合規則時才觸發
適用情況
網域優先,IP 分類補充

若第一輪已命中涵蓋所有流量的兜底規則,就不會觸發這次補充解析。

另一個常見值 IPOnDemand 會在比對遇到需要 IP 的條件時觸發解析,因此排在前面的 IP 規則可能增加 DNS 查詢。此設定適合需要提早比對位址的情況,但不能直接理解為「中國大陸分流更嚴格」。應依 DNS 可用性與規則順序選擇,而非只看名稱判斷。

設定注意:使用 IPIfNonMatch 時,勿加入無條件兜底規則

採用本文方案時,請刪除位於末尾、涵蓋所有 TCP/UDP 流量的代理規則,並確認預設出站為代理。否則第一輪就會命中兜底規則,未收錄的中國大陸網域可能無法進入 geoip 補充分流。

四、中國大陸直連、海外代理與廣告封鎖

以下是路由片段,並非可直接執行的完整用戶端設定。此範例假設現有設定已定義 proxy、direct、block 三個出站標籤,而且 outbounds 陣列中的第一個出站是代理。若沒有任何路由規則符合,V2Ray/Xray 會使用第一個出站;因此此處的「海外代理」由預設出站負責,而非透過末尾的全匹配規則實現。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "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"
      }
    ]
  }
}
  1. 優先比對廣告網域:符合 category-ads-all 時,交由拒絕出站處理,不再比對後續直連規則。
  2. 本機 IP 直連:連線至 192.168.1.1 等私有位址時,目標本身就是 IP,可直接符合私有位址規則。
  3. 中國大陸網域直連:已收錄於 geosite:cn 的網域會直接使用直連出站,不必等待 IP 分類。
  4. 補充分流至中國大陸 IP:網域在第一輪未命中時,使用核心 DNS 取得位址後,再嘗試比對 geoip:cn。
  5. 其他流量使用預設代理:網域與 IP 都未命中時,使用已確認的第一個代理出站。

「由上而下,首次命中即採用」還須配合解析階段理解:對只有網域的請求而言,IPIfNonMatch 不會為了排在前面的私有 IP 規則立即解析。如果網域在第一輪已命中其他規則,之後就不會再根據解析結果重新判斷。因此,內網網域也應加入明確的網域直連規則,不要只依賴 geoip:private。

五、在 v2rayN 建立並啟用路由設定

請先備份現有路由,再前往「設定」→「路由設定」。不同版本的編輯視窗版面可能不同,請以目前視窗中的「網域策略」、「規則清單」和出站選項為準。不要將完整的 routing 物件貼進只接受規則陣列的輸入欄位,也不要直接修改執行時產生、重新啟動後就會被覆蓋的設定檔。

  1. 建立獨立的測試設定:在「設定」→「路由設定」中新增或複製一份路由設定,並加上容易辨識用途的備註,例如「中國大陸直連測試」。請保留原設定,方便還原。
  2. 設定網域策略:將「網域策略」設為 IPIfNonMatch。若編輯器顯示英文值,請直接選取原值,不要將它填入網域規則。
  3. 逐條新增規則:依序加入廣告網域、私有 IP、中國大陸網域、中國大陸 IP。網域集合填入網域條件,IP 集合填入 IP 條件;出站則分別選擇拒絕或直連。
  4. 確認預設代理:檢查是否有涵蓋所有流量的末尾規則。採用本文方案時,請確認產生的設定中第一個出站是代理,不要新增全匹配規則作為兜底。
  5. 儲存並套用設定:返回主視窗,在「路由」中選取剛才的設定。確認核心已重新載入;若記錄檔出現設定錯誤,請還原原設定並逐條檢查。

v2rayN 的一般節點設定會產生核心所需的出站。介面中的「代理、直連、阻止」會對應至 JSON 標籤,不能只看中文顯示名稱,就認定最後的標籤一定是 proxy、direct、block。使用自訂完整設定時,請自行確認標籤與預設出站順序;使用圖形化規則編輯器時,建議優先選用內建的出站選項。

介面操作目標設定確認項目錯誤情況
選擇網域策略routing.domainStrategy 設為 IPIfNonMatch仍設為 AsIs 時,不會為了 IP 補充分流規則主動解析網域。
新增網域分類domain 包含 geosite:cn若誤填至 IP 條件,可能導致設定無法載入。
新增位址分類ip 包含 geoip:private若誤填至網域條件,就無法依目標位址分流。
設定預設代理第一個出站是代理,且第一輪沒有全匹配規則攔截請求海外目標直連,或中國大陸 IP 補充分流未觸發。

六、使用固定請求與記錄檔確認比對結果

驗證分流時,不能只比較網頁開啟速度。快取、連線重用與節點負載都會影響耗時,卻無法證明實際選用了哪個出站。請固定本機入口與測試目標,並在 v2rayN 記錄檔視窗查看目標位址及出站標籤。若目前的記錄層級看不到連線紀錄,可前往「設定」→「參數設定」尋找記錄層級選項,暫時設為 info;驗證完成後再恢復原值。

以下使用 Windows 的 curl.exe 明確連線至本機 HTTP 代理,以排除瀏覽器擴充功能和系統代理狀態的影響。10808 僅為連接埠範例,請改成目前實際支援 HTTP 的監聽連接埠;--max-time 15 代表最多等待 15 秒,不是實際測速結果。

curl.exe --proxy http://127.0.0.1:10808 --max-time 15 -I https://www.baidu.com/
curl.exe --proxy http://127.0.0.1:10808 --max-time 15 -I https://example.com/

排查順序:先確認出站,再處理連線失敗

若記錄檔已顯示正確的出站,請接著檢查該路徑上的 DNS、連線與服務回應;若顯示錯誤出站,再回頭檢查規則順序與分類資料。每次只修改一條規則,並重新建立連線,避免快取與既有連線干擾判斷。

七、常見問題:規則已生效,但結果不如預期

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

先在主視窗的「路由」確認已選取剛儲存的設定,再檢查前面的規則是否已先命中代理。若記錄檔中的目標是 IP 而非網域,網域集合就無法直接判斷這條連線,請檢查 IP 規則;若目標仍是網域,則確認目前使用的資料檔是否收錄該網站。

末尾已設定所有流量走代理,為什麼 geoip:cn 沒有生效?

使用 IPIfNonMatch 時,全匹配代理規則會在第一輪接住請求,核心便不會再觸發「未命中後解析」。請刪除這條兜底規則,並確認第一個出站確實是代理,再以新連線重新測試。若必須保留兜底規則,就需要重新設計解析策略,而不是只調整 geoip 規則的位置。

只啟用 geoip:private,為什麼內網網域還是無法連線?

內網名稱必須先能透過適當的 DNS 解析,而且不能被其他網域規則提前導向代理。請為實際使用的內網後綴新增明確的網域直連條件,並確認對應的 DNS 可以連線。直連規則不會讓公用 DNS 自動辨識組織內部的主機名稱。

啟用流量探測後,就一定能依網域分流嗎?

不一定。流量探測只能從部分協定交握中擷取網域資訊,是否用於路由也取決於入站的探測設定;並非所有連線都能還原網域。請先確認入站收到的原本是網域還是 IP,再決定是否調整探測設定,不要把探測當成修復 DNS 的方法。

封鎖廣告後,登入或付款頁面異常怎麼辦?

先暫時停用廣告規則並重新測試,確認是否誤封。若確實是分類問題,請為必要網域新增範圍盡可能小的例外規則,並將它排在廣告規則之前。例外規則應依實際需求選擇代理或直連;不要只為了恢復單一資源,就放行整個網站的所有子網域。

最後保留一套清楚易懂的規則:必要例外在前,其次是廣告封鎖、私有位址與中國大陸網域直連,再以 IP 分類補充,預設出站則使用代理。DNS 解析出的位址仍會影響 IP 比對結果;若解析受到干擾,即使規則正確,也可能分類錯誤。完成路由驗證後,再單獨檢查 DNS,避免同時修改入口、解析與出站而無從比對。