本文適合已匯入節點,並想依網域與 IP 設定分流的使用者。先認識網域清單、IP 清單與預設出口,再透過路由設定範例說明規則順序,最後在 v2rayN 套用設定並查看日誌驗證。範例採用 Xray/V2Fly 常見的 field 路由寫法,將訂閱節點參數、客戶端選單與核心設定分開說明。
一、geosite 與 geoip 分別比對什麼
路由分流不會更改節點協定,而是替每條進入核心的連線選擇出口。VMess、VLESS 等協定決定代理連線的建立方式;路由規則則決定目前的連線目標要交給代理、直連或其他已設定的出口。訂閱中有可用節點,不代表已經設定好合適的分流策略。
geosite:cn 會參照網域資料檔中的 cn 分類,geoip:cn 則會參照 IP 資料檔中的中國大陸位址清單。前者用來判斷網域是否列在清單中,後者則判斷目標 IP 是否落在指定網段。這些規則僅依資料清單比對,不會分析頁面使用的語種,也無法保證每個中國大陸服務、跨國網站或 CDN 位址都符合預期。
網域規則
- 欄位
domain- 清單範例
geosite:cn- 完整網域
full:example.com- 網域及其子網域
domain:example.com
核心必須取得網域名稱;若連線只提供目標 IP,就無法直接用網域清單比對。
位址規則
- 欄位
ip- 清單範例
geoip:cn- 私有位址
geoip:private- 網段範例
192.168.0.0/16
適用於直接以 IP 建立的連線,或在路由階段解析網域後再比對位址。
設定網域時,建議明確使用 full: 或 domain:。一般字串若採子字串比對,可能會誤判名稱相似、但並非同一組織的網站;而 domain:example.com 會比對該網域及其子網域,不會將 notexample.com 視為子網域。本文中的 example.com 僅用於說明語法,並非連線測試服務。
二、規則順序:自訂例外優先於清單
一般 field 規則會依陣列順序逐一檢查,由第一條符合的規則決定出口,不會自動挑選「看起來較精確」的規則。同一條規則同時設定 domain 和 port 時,通常必須兩個欄位都符合;同一個 domain 陣列中的多個項目則符合任一項即可。若要設定「某網域或某 IP」,應拆成兩條規則。
- 先加入必要例外:例如必須透過代理存取的服務網域,避免被後續的直連清單提前攔截。
- 接著加入網域清單:符合條件的中國大陸網域直接連線,減少為路由額外進行解析的機會。
- 再比對 IP 位址:將私有位址與中國大陸 IP 導向直連出口,涵蓋以 IP 存取的目標。
- 最後處理未符合規則的連線:本例以第一個出口作為預設出口,不另外加入無條件規則。
另一個常見誤解,是以為「中國大陸直連、其他地區走代理」能準確判斷每家公司的所在地。實際上,這套策略只是結合清單比對與預設出口:不在中國大陸清單中的連線會預設走代理,但不代表已確認這些目標都位於境外。跨區部署、企業內網網域及需要固定出口的服務,應透過明確的例外規則處理。
三、如何選擇 domainStrategy 的三種值
routing.domainStrategy 控制路由比對時如何使用 DNS 解析結果,不會直接決定瀏覽器使用哪個 DNS 服務,也不同於直連出口本身的網域解析策略。排查問題時,必須先確認修改的是哪個設定物件,不能只因欄位名稱相同,就認定作用方式一致。
| 選項 | 路由階段的行為 | 適用情況 |
|---|---|---|
AsIs | 路由不會額外解析網域;若目標原本就是 IP,仍可比對 IP 規則。 | 以網域規則為主,不需要透過解析網域來補充 IP 比對。 |
IPIfNonMatch | 首次檢查找不到符合的規則時,才嘗試解析網域並進行路由判斷。 | 先依網域分類,未符合時再以中國大陸 IP 清單補充比對。 |
IPOnDemand | 遇到需要目標 IP 的規則時,才視需要嘗試解析網域。 | 希望較早進行 IP 比對,並可接受對 DNS 的依賴。 |
本例選擇 IPIfNonMatch。符合 geosite:cn 的網域會直接選擇直連;未知網域首次比對未符合時,才有機會透過解析結果符合 geoip:cn。若 DNS 查詢失敗、回傳的位址不在目標清單中,或更前面的規則已符合,結果都可能不同。
使用 IPOnDemand 時,尤其要留意規則順序:若前面的 IP 規則已依解析結果符合,後面的網域例外就不會再被檢查。將自訂網域例外放在最前面,通常比事後不斷補上 IP 網段更容易維護。
四、路由設定範例:中國大陸直連,其餘預設走代理
以下只展示頂層 routing 物件,無法直接作為完整的客戶端設定執行。同一份完整設定的 outbounds 必須已定義標籤為 proxy 的代理出口及標籤為 direct 的直連出口,而且第一個出口必須是 proxy。節點位址、驗證資訊與入站設定由現有的客戶端設定提供。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": [
"full:example.com",
"domain:example.net"
],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:private",
"geoip:cn"
],
"outboundTag": "direct"
}
]
}
}
- 第 1 條:精確網域與網域後綴例外優先走代理;實際使用時,請依服務需求刪除或修改這些示範項目。
- 第 2 條:符合中國大陸網域清單的連線走直連。
- 第 3 條:目標屬於私有位址或中國大陸 IP 清單時走直連。
- 預設出口:仍未符合規則的連線會交給第一個出口,因此務必確認最終產生的設定中,出口順序是否正確。
使用這種傳統資料格式時,核心也必須能讀取對應的 geosite.dat 與 geoip.dat。檔案遺失、路徑錯誤或分類名稱不存在,都可能導致設定載入時發生錯誤。更新規則資料後,必須重新載入核心;更換資料來源前,也應確認所使用的分類仍然存在。
五、在 v2rayN 套用並驗證設定
v2rayN 的一般節點模式通常會產生核心設定,因此直接編輯暫存產生的 JSON,可能會在下次重新啟動時被覆寫。建議優先透過路由設定管理規則;需要完整自訂設定時,再使用相應的自訂設定入口。不同桌面版本的按鈕位置可能有所不同,以下步驟以具有「設定」→「路由設定」入口的介面為例。
-
備份目前的規則
開啟「設定」→「路由設定」,保留現有規則的副本,並記下目前選用的路由方案。先不要刪除原方案,測試失敗時才能切回。
-
整理規則順序
在路由設定中編輯測試方案,依序加入網域例外、中國大陸網域規則與 IP 規則。請在介面的規則編輯器中填寫對應欄位,不要將整段頂層 JSON 貼進單一網域輸入欄。
-
確認解析策略
將該方案的網域策略設為
IPIfNonMatch,並確認規則選用的出口。若介面未顯示相關欄位,請查看產生的設定;不要只依路由方案名稱推測實際設定值。 -
選取方案並重新載入
儲存後選取剛編輯的路由方案,再重新載入核心。在編輯視窗中按下儲存,不一定會切換目前使用的方案;請以實際載入的設定與日誌為準。
-
逐一測試出口
分別測試預期直連、預期走代理及區域網路目標,並記錄日誌中的連線目標與出口標籤。測試前請先關閉既有連線;規則變更後,已建立的長連線不會自動重新選擇出口。
驗證前還要確認流量確實進入核心。若應用程式沒有使用系統代理,路由規則再完整也無法接管其流量。以下數字僅為測試設定範例,並非所有安裝環境的預設值;執行命令前,請先在目前的客戶端確認監聽連接埠。
curl --proxy socks5h://127.0.0.1:10808 --head https://example.com/
這裡的 socks5h 會將目標網域交由代理端處理,有助於測試網域規則;若改用由本機先行解析的連線方式,核心可能只會看到 IP,測試結果就無法直接比較。這個命令中的網域剛好符合本例第一條規則,應查看代理出口標籤,而非以網頁能否開啟來代替分流驗證。
六、系統代理與 TUN:依流量接管方式調整判斷
相同的路由規則在不同的流量接管方式下,可能會有不同表現。關鍵不在於節點改變,而是核心取得的目標資訊不同。使用系統代理時,應用程式可能直接提供網域;透過 TUN 接管時,連線通常會先以 IP 封包呈現,能否還原網域則取決於 DNS 接管、嗅探等設定。
依目標資訊選擇驗證方式
系統代理情境
- 確認瀏覽器或應用程式有使用代理設定。
- 使用明確指定的 SOCKS 代理測試,減少系統設定造成的干擾。
- 先檢查網域規則,再確認未符合規則時的 IP 比對。
TUN 接管情境
- 確認實際負責接管的核心與設定格式。
- 查看日誌記錄的是網域名稱還是純 IP。
- 先檢查 DNS 接管與區域網路存取,再調整規則。
先確認流量進入哪個核心,再選擇相應的規則格式;本文的 JSON 不適用於所有 TUN 設定。
桌面版 v2rayN、Android 版 v2rayNG 與 v2flyNG 都能以相同的分流目標進行設定,但不能假設選單、標籤與匯入格式完全一致。v2rayNG 著重於 Xray 核心,v2flyNG 則使用 V2Fly 核心;移轉設定時,請確認目前核心支援的欄位與資料格式。節點訂閱也不一定包含客戶端的路由設定。
七、常見設定錯誤:依日誌逐步縮小範圍
加入 geosite:cn 後,中國大陸網站為什麼還是走代理?
先確認日誌中的目標是網域還是 IP,再檢查該網域是否確實列在目前資料檔的 cn 分類中。若日誌中只有 IP,請確認 geoip:cn 與解析策略。若服務網域不在清單中,可新增明確的 domain: 直連規則,不要直接將所有未知目標改為直連。
設定 IPIfNonMatch 後,geoip 為什麼還是沒作用?
確認是否有 port: "0-65535" 等通用規則提前符合。移除測試方案中的預設攔截規則,確認第一個出口是代理,再用一個不符合網域規則的目標測試。此外,也要確認路由使用的 DNS 能否成功回傳位址。
儲存規則後所有連線都失敗了,該怎麼辦?
先切回備份方案,再查看核心啟動日誌。若顯示無法讀取資料檔,請修正檔案路徑或更新對應資料;若錯誤與出口標籤有關,請逐字核對 outboundTag。設定載入失敗時,不應先更換訂閱或節點。
同一個網站有時直連、有時走代理,該如何排查?
分別記錄主網域、靜態資源網域與目標 IP,並確認是否使用不同的位址類型或 CDN 位址。關閉既有連線後再測一次;若透過網域與 IP 連線的結果不同,請先統一測試方式,再判斷是否需要加入網域例外。
排查時一次只修改一個變數:先確認流量接管,再確認設定載入,接著確認規則是否符合,最後檢查 DNS 與實際連線。暫時提高日誌詳細程度有助於找出問題,但分享日誌前,請先移除訂閱網址、驗證資訊及其他敏感內容。更多設定欄位請參閱設定大全;連線問題則可依疑難排解逐項處理。