V2Ray 路由規則設定教學:geosite、geoip 分流配置

說明 domain、ip、geosite、geoip 的規則比對順序,示範中國大陸直連、其他地區走代理的常見分流設定,以及規則衝突的排查方法。

本文重點

本文適合已能透過節點連線,並準備調整分流設定的使用者。先釐清網域規則與 IP 規則的差異,再以路由設定建立「明確例外優先、中國大陸直連、其餘走代理」的基礎架構,最後搭配 DNS、用戶端產生的設定檔及連線記錄,找出分流錯誤。範例採用 V2Fly 與 Xray 常見的 JSON 路由結構,並非可直接取代整份用戶端設定的檔案。

1. 先確認連線是否進入核心

路由規則只會處理已進入核心的連線。v2rayN 是桌面用戶端;v2rayNG 是使用 Xray 核心的 Android 用戶端;v2flyNG 則使用 V2Fly 核心。圖形介面負責管理設定,實際比對由目前執行的核心處理。VMess、VLESS 是代理協定,切換協定不會自動修正規則順序錯誤。

應用程式發出請求 接收連線 識別目標 比對路由 建立連線

系統代理通常只會影響遵循系統代理設定的應用程式;若應用程式自行直接連線,核心記錄中就不會出現該連線。Android VPN 模式也可能設定特定應用程式略過 VPN。排查時,第一步不是增加 geosite 分類,而是確認目標應用程式的連線確實進入預期的入口。

10808
本文測試用 SOCKS 連接埠
53
傳統 DNS 常用服務連接埠
443
HTTPS 常用目標連接埠

10808 僅是本文採用的測試值,不代表各版本的預設設定。請先確認用戶端目前的入口設定,包括監聽位址、連接埠,以及是否啟用 SOCKS。連接埠指的是本機入口,443 通常則是遠端網站使用的連接埠,兩者不可混淆。DNS 也可能透過加密連線傳輸,因此不能把所有 DNS 查詢都視為 UDP 53。

2. domain、ip 與資料集各自比對什麼

domain 和 ip 是路由規則欄位;geosite: 和 geoip: 則是在相應欄位中引用資料集的寫法。前者不是即時查詢網域所屬國家,後者也不代表判斷網站業務的歸屬。比對依據是隨用戶端或核心部署的資料檔,結果會受資料來源及更新日期影響。

規則寫法比對對象適用範圍
full:example.com完整網域只比對該網域,不包含子網域
domain:example.com網域及子網域包含 example.com 與 www.example.com
geosite:cn資料集中的網域分類不保證涵蓋所有中國大陸的服務網域
192.168.0.0/16IPv4 位址範圍必須有可供比對的目標 IP
geoip:cn資料集中的位址範圍無法據此確定使用者的實際位置

網域範圍明確時,優先使用 full: 或 domain:。不加前綴的一般字串通常會以子字串方式比對,容易連名稱相似但無關的網域也一併命中。分類名稱必須存在於實際安裝的資料檔中;從其他地方複製分類名稱,不代表本機資料檔一定有提供。

判斷原則:特定服務用網域,位址範圍用 IP

需要指定某個網站使用特定出口時,先設定明確的網域規則;需要存取本機網段時,再設定位址範圍規則。不要用 CDN 的單一解析位址代替整個服務網域。

3. 規則依序比對,不會自動優先採用較精確的規則

常見的 field 規則會由上往下檢查,第一條符合條件的規則便會決定出口。核心不會因為後面的規則更精確,就自動取代前面的寬泛規則。因此,手動設定的例外應放在分類規則之前,分類規則則應放在預設處理之前。

  1. 先設定明確例外:例如某個測試網域必須走代理,即使它也符合直連分類。
  2. 接著設定本機與分類規則:例如私有位址、中國大陸網域及中國大陸位址範圍。
  3. 最後設定預設出口:沒有規則符合時,使用設定中指定的預設路徑。

同一條規則中,domain 陣列裡的多個項目是「符合任一項即可」;但在同一條規則中加入不同條件欄位,通常表示所有條件都必須符合。例如 domain 加上 port,代表網域與連接埠都必須符合,而不是網域或連接埠符合其中一項即可。若要分別依據網域分類和位址分類直連,應拆成兩條規則。

4. 中國大陸直連、其他連線走代理的路由範例

以下僅示範 routing 物件。假設現有設定中已建立標籤為 direct 的直連出口,以及標籤為 proxy 的代理出口,並將 proxy 放在 outbounds 陣列第一個項目,作為未命中規則時的預設出口。標籤是用來引用的,不能只因介面顯示「直連」,就假設內部標籤也叫 direct。

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

example.com 是保留的示範網域,用於說明例外規則的優先順序,並非建議採用的服務網域。此設定表示:指定網域固定走代理;可識別的私有目標位址直連;符合中國大陸網域或位址分類時直連;其餘請求則使用第一個代理出口。這只是其中一種策略,並非所有網路環境都適用。

5. domainStrategy 與 DNS 的關係

AsIs 不會為路由額外解析網域;若入口提供的是網域,IP 規則通常無法單靠它完成比對。IPIfNonMatch 會在網域未符合規則時嘗試解析,再利用 IP 進行比對。IPOnDemand 則可能在比對過程遇到需要 IP 的規則時觸發解析。解析時機不同,也會影響前面的 IP 規則能否參與判斷。

策略路由解析時機設定注意事項
AsIs不為路由額外解析主要依靠網域規則或已有的目標 IP
IPIfNonMatch網域未符合規則後才嘗試解析前面的寬泛網域規則可能讓 IP 規則失去比對機會
IPOnDemand比對需要 IP 的條件時留意前面的 IP 規則及解析結果所造成的影響

在上述範例中,只有未符合網域規則的請求,才有機會透過解析結果符合 geoip:cn。如果在 rules 最後加入一條涵蓋所有網域的代理規則,網域階段就已成功符合,IPIfNonMatch 不會再因為「尚未符合規則」而進行 IP 回退。若要保留這條回退路徑,應使用預設出口作為兜底,不要隨手新增一條全網域匹配規則。

路由解析策略與最終出口如何解析目標,是兩項不同的設定。即使路由採用 AsIs,直連出口仍可能需要解析網域。DNS 回傳不同地區的 CDN 位址、只回傳 IPv4,或同時回傳 IPv6,都可能改變位址分類結果。應分別記錄網域、解析結果及出口標籤,不要只看網頁是否能開啟。

操作方式:先保留網域規則,再測試 IP 回退

先用明確的網域規則確認出口標籤正確,再移除臨時規則測試 IP 回退。每次只變更一項條件,才能分辨問題來自網域分類缺漏、DNS 結果變動,或規則順序錯誤。

6. 以固定測試流程找出規則衝突

在 v2rayN 中,先進入「設定」→「路由設定」,確認目前啟用的規則集。不同版本的選單名稱可能不同,請以實際介面為準。v2rayNG 與 v2flyNG 則應分別檢查各自的路由設定及目前執行的設定;不要直接套用其他用戶端的選項名稱。跨核心複製設定時,也要確認欄位與資料檔格式相容。

  1. 記錄目前設定:記下核心名稱、路由模式、規則順序及本機監聽連接埠。先確認代理節點本身能正常連線。
  2. 確認入口:桌面端可使用以下指令,明確透過本機 SOCKS 入口連線,並讓代理端解析網域。連接埠請改成實際設定值。
  3. 查看出口:在用戶端提供的連線記錄或存取記錄中,搜尋測試網域、目標 IP 及出口標籤。記錄格式會因核心版本而異。
  4. 單獨測試規則:暫時將測試網域的 full 規則移到第一條,分別指定 direct 和 proxy。若出口隨之改變,表示路由入口與標籤大致正常。
  5. 恢復分類規則:移除臨時規則,分別測試一個中國大陸服務網域、另一個網域及一個本機位址,確認分類與預設行為。
curl --socks5-hostname 127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/

這裡的 10 秒是連線階段的逾時時間,20 秒則是整個指令的時間上限,並非效能測試結果。--socks5-hostname 與先在本機解析再傳送 IP 的測試路徑不同,適合用來驗證網域規則。HTTP 請求成功只表示這條路徑可用,不能據此推論 UDP、所有應用程式或 TUN 接管也已正確設定。

7. geosite、geoip 分流常見問題

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

先確認連線實際使用的網域;網頁可能另外載入其他資源網域。接著確認分類資料是否包含該網域,以及目前模式是否啟用了這組規則。可先將該網域設為 full 規則並移到最上方測試;確認要長期直連後,再改用範圍合適的 domain 規則。

geoip:cn 為什麼一直沒有命中?

先確認入口提供的是網域還是 IP。若使用 AsIs 且入口只有網域,IP 條件就缺少比對依據;若使用 IPIfNonMatch,則檢查前面是否已有網域規則或全匹配規則提前結束比對。之後再確認實際解析出的位址是否屬於對應的位址集。

更新訂閱後,自訂分流設定也會跟著變嗎?

訂閱通常只會更新節點清單,路由規則與地理資料多半由其他功能管理,但實際行為仍取決於用戶端及訂閱格式。更新後請檢查目前節點、啟用中的路由集與產生的設定;若要保留手動規則,請先匯出備份,不要只保存訂閱網址。

啟用流量嗅探,就能讓所有 IP 連線依網域分流嗎?

不能這麼假設。嗅探只能從受支援且可識別的流量資訊中擷取網域,效果取決於協定與核心設定。優先讓應用程式透過支援傳遞網域的代理入口連線;若確實需要嗅探,再確認目前版本是否支援目標範圍及「僅供路由使用」等選項。

穩定的分流設定不在於規則數量,而在於每條規則都有明確範圍,且能透過記錄說明比對結果。先維持少量例外、分類規則與預設出口,再依實際發生的分流錯誤逐項修正,比一次匯入大量重疊規則更容易追查。想了解用戶端與核心的分工,可接著參閱協定參考與概念速查。

下載並安裝用戶端依平台選擇 v2rayN / v2rayNG