先分清網域集合、IP 位址集合與出站標籤,再依「指定例外、中國大陸網域、中國大陸及私有位址、其餘流量走代理」的順序安排規則。本文適合已匯入節點、想調整 v2rayN 分流的使用者;範例採用 V2Ray/Xray 傳統路由欄位,並說明 DNS、規則庫與用戶端產生設定檔之間的差異。
分清 geosite、geoip 與代理出站
路由分流處理的是「這條連線要交給哪個出站」,不是「應該使用哪種節點協定」。VMess、VLESS 等協定是代理出站的連線方式;geosite:cn 與 geoip:cn 則是比對條件。即使訂閱中的節點協定更換,只要實際出站標籤不變,路由規則就不必跟著改。
| 寫法 | 比對對象 | 無法據此推斷的事項 |
|---|---|---|
geosite:cn | 目前規則庫中 cn 分類收錄的網域 | 不代表所有中文網頁,也不等於所有中國大陸 IP |
geoip:cn | 目前規則庫中歸類為 CN 的 IP 網段 | 無法據此確定網站營運方所在地或連線品質 |
geoip:private | 規則庫定義的私有及特殊用途位址集合 | 不能取代作業系統的所有區域網路路由 |
outboundTag | 現有出站的 tag 字串 | 填入 proxy 不會自動建立代理節點 |
傳統設定通常會從 geosite.dat 與 geoip.dat 讀取集合。這裡的「cn」是資料分類名稱,不是核心即時查詢所得的地理判定。規則庫來源、發布日期與分類維護方式都會影響結果;新啟用的網域若尚未納入集合,應先新增精確例外,再考慮更新資料。
依比對順序安排中國大陸直連與代理備援
路由規則通常依陣列順序由上往下檢查,遇到第一條完全符合的規則就會選定出站,不會自動繼續尋找「更精確」的下一條。單一規則同時設定 domain、ip、port 等不同條件時,通常必須全部符合;同一個 domain 清單中的多個項目則只要符合其中一項即可。
方案選擇:中國大陸直連,其餘走代理
網域優先層
- 先加入需要強制走代理或直連的精確例外。
- 接著使用
geosite:cn比對中國大陸網域集合。 - 連線一旦符合網域規則,就不會再檢查後續 IP 規則。
IP 與備援層
- 使用
geoip:private處理私有位址。 - 使用
geoip:cn處理中國大陸 IP。 - 最後將其餘 TCP、UDP 連線交給代理出站。
精確例外必須排在範圍較廣的集合之前;代理備援則放在最後,並搭配網域解析策略。
例如,某個網域雖然屬於 cn 集合,卻需要走代理,就應將該網域的代理規則放在 geosite:cn 前面。只在最後追加代理規則並不起作用,因為前面的直連規則已經結束比對。反過來,若把「所有 TCP、UDP 都走代理」放在第一條,後面的中國大陸分流規則也就沒有機會生效。
full:example.com:只比對這個完整網域,不包含其子網域。domain:example.com:比對該網域及其子網域,但不會比對notexample.com。regexp::用於正規表示式;一般網站例外優先使用前兩種寫法,避免比對範圍過廣。
對照 JSON 設定與 domainStrategy
以下是路由片段,不是包含節點、入站與 DNS 的完整設定。假設已有標籤為 proxy 的可用代理出站,以及標籤為 direct、協定為 freedom 的直連出站。範例網域 example.com 僅用於示範精確例外;若不需要這項例外,刪除第一條規則即可。
{
"routing": {
"domainStrategy": "IPOnDemand",
"rules": [
{
"type": "field",
"domain": ["full:example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:private", "geoip:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
這裡刻意選用 IPOnDemand:網域未符合前兩條規則時,檢查到 IP 規則便會嘗試解析網域,再以解析結果比對中國大陸或私有位址。已符合 cn 網域集合的連線會直接選定直連,不需要為了後續路由規則額外解析。若要求本身就是 IP 位址,則直接進行位址比對。
本文設定
- 解析策略
IPOnDemand- 中國大陸網域
geosite:cn → direct- 中國大陸及私有 IP
geoip:cn / private → direct- 最後備援
tcp,udp → proxy
只有比對到 IP 條件時才按需解析,適合本文明確設定備援規則的架構;若解析失敗或結果不準確,仍會影響判斷。
另一種寫法
- 解析策略
IPIfNonMatch- 解析時機
- 網域未符合任何規則後
- 範圍較廣的備援
- 避免過早比對所有連線
- 未符合規則時的處理方式
- 通常交由設定中的第一個出站處理
也要一併檢查出站順序。不能只更改本文的策略名稱,就認定處理方式仍然相同。
AsIs 不會為了路由判斷而主動將網域解析成 IP。這適合主要依賴網域規則的設計,但不能期待只有網域的要求自動符合 geoip:cn。此外,路由中的 domainStrategy 與直連出站中的同名設定各有用途:前者決定如何比對,後者影響連線目的位址的處理方式,兩者不能互相取代。
在 v2rayN 儲存規則並確認生效
以下以提供「設定」與「路由設定」入口的 v2rayN 繁體中文桌面介面為操作基準。不同版本的對話框版面及規則編輯按鈕文字可能不同;請先確認目前啟用的是哪一套路由設定,再修改規則內容。本文片段依 V2Ray/Xray 的 JSON 結構編寫,請勿貼入不接受 JSON 的單行網域輸入欄。
-
保留原有設定
開啟「設定」→「路由設定」,記下目前啟用的路由項目,並保留原始內容。若可以新增路由項目,建議先建立一份測試設定,避免覆蓋原本可用的規則。
-
確認出站
確認目前節點可以連線,並核對用戶端規則使用的直連與代理出站標籤。範例中的
proxy、direct必須對應實際產生之設定中的標籤,不能用節點顯示名稱取代。 -
依序填入
在「設定」→「路由設定」中編輯目標路由項目,依範例順序填入 domain、ip、network 與目標出站。將網域解析策略設為
IPOnDemand,不要把所有條件合併成一條規則。 -
套用並重新連線
儲存並啟用該路由項目,重新啟動核心,或依介面提示套用設定。確認目前沒有強制所有流量走代理或全部直連的覆寫模式,再建立新連線進行測試;既有的長連線不一定會立即切換路徑。
-
查看記錄
開啟用戶端記錄,分別連線至中國大陸網域、其他網域與區域網路位址。若有連線記錄可查看,請檢查目的位址與選取的出站標籤;若出現規則庫載入失敗或找不到出站,先修正設定再繼續測試。
用戶端通常會依照介面設定重新產生核心設定檔。直接修改暫存產生的檔案,下次切換節點或重新啟動時可能會被覆寫。因此,長期使用的規則應存放在用戶端支援的路由設定入口;只有明確使用完整自訂設定時,才自行維護整份 JSON。
在 Android 上,v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心。不能只因規則欄位相似,就假設兩者的介面入口、內建規則庫與自訂設定匯入方式完全相同。移轉規則時,請先確認目前核心及用戶端支援的設定功能;訂閱網址也不應當作路由規則匯入。
透過連接埠、記錄與 DNS 逐項檢查分流
判斷是否生效,應確認連線是否進入核心、符合哪個出站規則,而不是只比較網頁開啟速度。DNS 快取命中、重複使用連線或遠端內容快取,都可能讓速度看起來差異很大,卻無法證明路由選擇正確。以下三個數值是測試輸入,不是本站實測結果,也不是所有用戶端的預設值。
先前往「設定」→「參數設定」,確認本機監聽連接埠及 SOCKS 支援狀態。若本機 SOCKS 確實監聽 127.0.0.1:10808,可在終端機執行以下命令;Windows 可明確呼叫 curl.exe。socks5h 會將目標網域交由代理端處理,適合檢查網域規則;socks5 通常會在本機解析,送至核心的可能已是 IP。
curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://www.baidu.com/
curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://example.com/
- 第一條用來觀察中國大陸網域的連線路徑,最後是否直連仍須以目前的 geosite 資料與記錄為準。
- 第二條在保留範例第一條規則時,應由精確網域例外選擇
proxy。 - 要求逾時不一定代表沒有符合規則;也要分別確認代理節點、目標服務與 DNS 是否可用。
- 每次修改後都重新送出要求,避免瀏覽器重複使用先前建立的連線。
如果應用程式只將 IP 交給核心,網域規則可能根本沒有網域可供比對。在某些協定與連線中,嗅探可以補充網域資訊,但不保證能識別所有流量,也可能改變比對結果。排錯時先記錄實際目標的形式,再決定是否調整嗅探,避免同時修改 DNS、嗅探與路由,導致無法找出原因。
排查中國大陸網站走代理與規則未生效
加了 geosite:cn,中國大陸網站還是走代理?
先在「設定」→「路由設定」確認該路由項目已啟用,再檢查前面是否有涵蓋全部流量的代理規則。若記錄顯示網域未收錄於集合,可暫時新增 domain: 例外並放在備援規則之前;若收到的是 IP,則應檢查 geoip 與 DNS,而不是繼續新增網域規則。
出現 geosite 或 geoip 載入失敗提示,該怎麼辦?
檢查錯誤訊息指出的規則庫名稱、分類名稱與路徑。使用用戶端提供的資料更新功能,還原相應檔案後重新啟動核心;不要將其他格式的規則檔重新命名為 .dat。使用自訂資料來源時,也要確認其中確實包含 cn、private 等所需分類。
換成 IPIfNonMatch 後,中國大陸 IP 規則反而沒有符合?
檢查末尾是否仍有 network: tcp,udp 這類涵蓋所有連線的規則。網域若先符合這條規則,就不會觸發「未符合規則時再解析」。請恢復本文的 IPOnDemand 架構,或重新設計不含過早備援的規則,並確認第一個出站。
區域網路連線失敗,只加入 private 就夠了嗎?
先確認實際位址,例如閘道是否確實為 192.168.1.1。若要求已進入核心,請檢查私有位址是否符合 direct;若受到 TUN 排除設定、作業系統路由或防火牆阻擋,單靠核心路由無法解決。直連只表示選擇本機出口,不代表一定能連上目標。
更新訂閱後,分流規則為什麼沒有一起更新?
一般節點訂閱主要更新節點連線參數,不代表會同步更新路由規則庫或本機路由設定。請分別檢查訂閱更新、geo 資料更新與目前的路由項目。每次只修改一項,再使用同一組測試網域查看記錄,才能判斷變化來自哪裡。
維護時保留一份精簡的例外清單,記下網域、預期出站與新增原因。優先修正範圍過廣的規則及排序,再考慮增加更多分類。中國大陸直連、其餘流量走代理是一套容易理解的預設方案,並非適用所有網路環境的唯一選擇;最終應依實際使用需求、解析結果與核心記錄共同確認。