先將路由分流拆成三個判斷對象
v2rayN 中的路由規則最終交由 Xray 核心執行。每個連線進入核心後,路由模組會讀取目標網域、目標 IP、連接埠、網路類型與入站標籤等屬性,再由上而下逐一檢查規則。第一條符合條件的規則會決定連線使用哪個出站。常見出站通常包括代理、直連與阻斷,本文只處理代理與直連的精準分流。
在中國大陸的日常網路環境中,一套容易維護的規則可分為三個邏輯層。第一層處理區域網路與本機私有位址,避免存取路由器、儲存裝置或本機服務時繞進代理鏈路。第二層處理明確屬於中國大陸網站或位址區段的目標,讓它們直接連線。第三層不再列舉網域類別,而是將剩餘流量交給代理出站。
- 私有位址層:比對
geoip:private,使用直連出站。 - 中國大陸目標層:分別比對
geosite:cn與geoip:cn,使用直連出站。 - 預設處理層:比對其餘 TCP 與 UDP 連線,使用代理出站。
這裡的「層」指的是策略結構,不代表每層只能寫入一個規則物件。網域條件與 IP 條件最好拆成獨立規則,因為同一條規則中的不同欄位通常是同時符合,而同一欄位內的多個值才是符合任一項。若將 domain 和 ip 不加區分地塞進同一條規則,實際比對範圍可能會比預期更窄。
geosite 與 geoip 分別解決哪些問題
geosite 依網域類別進行判斷
geosite 資料依網域特徵整理分類。geosite:cn 用於比對歸入中國大陸類別的網域。應用程式存取目標時,如果核心能取得原始網域,網域規則便可在建立目標連線前完成判斷,不必先依賴目標位址屬於哪個 IP 區段。
網域類別適合處理使用內容傳遞網路、動態位址或多位址調度的網站。某個網站的解析結果可能隨電信業者、地區與時間變動,但網域歸屬通常較穩定。將這類網域直接比對至直連出站,可減少位址變動造成的規則漂移。
需要注意的是,geosite:cn 代表資料檔中的網域分類,不等於「目前解析結果一定位於中國大陸」。網站可能使用跨區域節點,企業也可能調整託管位置。因此,geosite 更適合表達網域策略,不能取代即時網路測量。
geoip 依目標位址進行判斷
geoip 資料會依用途或地區分類 IP 位址區段。geoip:private 涵蓋區域網路等非公網路目標,常用於直連本機網段、家用路由器管理位址、區域網路列印服務與內部儲存裝置。它應放在一般地區規則之前,因為私有位址不適合交由遠端代理處理。
geoip:cn 用於比對歸入中國大陸位址區段的目標。當應用程式直接連線至某個 IP,或網域未命中既有 geosite 規則但之後完成解析時,IP 規則便能補充判斷。它與 geosite:cn 並非替代關係,而是分別涵蓋「依網域識別」與「依位址識別」兩條路徑。
| 規則項目 | 判斷依據 | 典型用途 | 建議出站 |
|---|---|---|---|
geoip:private |
目標 IP 屬於私有位址範圍 | 區域網路、本機網段、內部服務 | 直連 |
geosite:cn |
目標網域屬於對應分類 | 依網域識別中國大陸網站 | 直連 |
geoip:cn |
目標 IP 屬於對應位址區段 | 直接存取 IP,或作為網域解析後的補充判斷 | 直連 |
network: tcp,udp |
連線使用 TCP 或 UDP | 接收前述規則未命中的一般流量 | 代理 |
domainStrategy 決定何時將網域解析為 IP
只設定 geosite 與 geoip 還不夠。網域請求是否會繼續進入 IP 判斷,取決於路由設定中的 domainStrategy。這個參數會影響路由階段的解析行為,不是單純的「DNS 開關」。了解它,便能解釋許多「網域規則正常,但 IP 規則沒有接手」的情況。
AsIs:保留原始目標形式
AsIs 表示路由階段優先依連線攜帶的原始目標進行判斷。目標是網域時,主要使用網域相關規則;路由模組不會為了嘗試 geoip 規則而主動將網域解析為 IP。目標本身就是 IP 時,geoip 規則仍可正常比對。
這種模式的解析動作較少,路徑也較直觀,但對於「網域未被 geosite 收錄,還希望依解析位址判斷」的情境支援不足。例如某個中國大陸網域未命中 geosite:cn,即使解析至 geoip:cn 位址區段,也可能直接落入最後的代理規則。
IPIfNonMatch:網域規則未命中後再進行解析
IPIfNonMatch 適合本文的三段式分流。核心會先使用網域資訊嘗試比對規則;網域規則沒有結果時,再解析目標網域,並使用取得的 IP 嘗試位址規則。如此可先發揮 geosite:cn 的分類優勢,再由 geoip:private 與 geoip:cn 承擔補充判斷。
這項策略在準確度與額外解析之間取得較好的平衡。它不會在每次網域連線開始時立即要求 IP 判斷,但網域分類不足時仍保留第二條比對路徑。對於「中國大陸網域直連、中國大陸位址直連,其餘走代理」的一般桌面設定,通常比 AsIs 更符合預期。
IPOnDemand:有 IP 條件時提前解析
IPOnDemand 會在路由判斷需要 IP 資訊時更積極地解析網域。設定中存在可參與比對的 IP 規則時,解析可能會更早發生。它適合確實依賴目標位址進行細緻控制的設定,但也代表 DNS 路徑、快取狀態與解析結果會更直接地影響路由流程。
如果規則目標只是一般的中國大陸直連與其餘代理,沒有必要僅為了「看起來更徹底」而選擇更積極的解析策略。先使用 IPIfNonMatch,再根據日誌中未命中的具體目標調整,通常更容易定位問題。
可直接調整的三段式路由範本
以下片段只展示 routing 部分。它假設現有完整設定中已存在標籤為 direct 的直連出站,以及標籤為 proxy 的代理出站。若目前設定使用其他標籤,應將範本中的 outboundTag 改為實際值。標籤必須完全一致,包括大小寫。
{
"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"
}
]
}
}
從策略上看,這仍是三個層次。第一條對應私有位址層;第二、第三條共同構成中國大陸目標層,但為避免不同欄位之間必須同時符合而拆開;第四條則是代理兜底層。
目標是區域網路 IP 時,第一條規則會直接命中。目標是 geosite:cn 分類中的網域時,第二條規則命中。目標是直接輸入的中國大陸 IP,或未命中網域分類但在 IPIfNonMatch 階段解析至中國大陸位址時,第三條規則便會接手。其餘一般 TCP、UDP 流量進入最後的代理出站。
如果完整設定中還包含阻斷特定網域、指定某項服務走代理、指定某個程序使用特定出站等規則,應將這些更具體的規則放在兜底規則之前。是否放在中國大陸直連規則之前,則取決於優先順序。例如某個歸入 geosite:cn 的網域必須走代理,針對它的獨立代理規則就要排列在 geosite:cn 之前。
在 v2rayN 中實際套用時,先確認四個位置
一、確認規則使用的出站標籤
範本中的 direct 與 proxy 只是常見標籤。實際執行設定可能由 v2rayN 依目前伺服器、路由模式與核心設定產生。修改自訂設定或進階路由前,先查看目前的出站標籤,確認規則引用的目標確實存在。引用不存在的標籤會導致規則無法依設計轉送,核心日誌通常會顯示相應錯誤。
二、確認目前核心能讀取 geosite 與 geoip 資料
geosite:cn 與 geoip:cn 依賴資料檔案。核心程式負責執行規則,分類內容則來自配套資料。若日誌提示無法載入分類、找不到檔案或項目未知,應先處理核心與資料檔案的配套狀態,而不是反覆調整規則順序。
更新資料後應重新啟動相關核心程序,讓新程序重新讀取資源。只關閉設定視窗,不一定代表執行中的核心已重新載入。測試前可在 v2rayN 中停止並重新啟動連線,再觀察新產生的日誌。
三、確認系統流量確實進入 v2rayN
路由規則只能處理已進入核心的連線。使用系統代理時,應用程式需要遵循系統代理設定;使用 TUN 模式時,則要檢查 TUN 是否啟動、路由是否建立,以及 DNS 是否依預期接管。如果某個應用程式完全繞過目前入口,修改 geosite 或 geoip 規則不會改變它的網路路徑。
排查時不要先根據網頁開啟速度猜測分流結果。更可靠的方法是觀察存取目標時是否產生連線日誌、命中了哪個出站標籤,以及目標在日誌中以網域還是 IP 顯示。完全沒有對應紀錄時,應先檢查流量入口,而不是繼續增加路由條件。
四、確認訂閱更新不會覆蓋自訂路由
訂閱負責提供伺服器節點與相關連線參數,路由規則則屬於用戶端本機策略。更新訂閱後,節點清單會變動,但自訂路由是否保留,取決於規則儲存位置與目前設定方式。長期使用的規則應儲存在 v2rayN 提供的路由設定或明確管理的自訂設定中,不要只修改一次產生的暫存執行檔案。
規則順序錯誤時會出現哪些典型現象
代理兜底規則放在最前面
如果 network: tcp,udp 的代理規則位於清單開頭,大多數一般連線會立即命中,後面的 geoip:private、geosite:cn 與 geoip:cn 便沒有機會執行。通常表現為中國大陸網站與區域網路目標都進入代理。修正方式不是新增排除項,而是將寬泛的兜底規則移到末尾。
獨立例外放在 geosite:cn 後面
假設某個中國大陸分類中的業務網域因測試需求必須使用代理,但它的獨立規則排在 geosite:cn 後面,連線就會先被中國大陸直連規則接手。應將具體網域規則放在分類規則之前。路由清單越前面,越適合放置範圍窄、意圖明確的例外。
只寫 geosite:cn,沒有 geoip:cn
這種設定能處理大量含網域的存取,但無法涵蓋直接連線至中國大陸 IP 的情況,也無法利用解析結果補足未收錄網域。若日誌中的目標經常直接顯示為 IP,新增獨立的 geoip:cn 規則,會比不斷擴充網域清單更有效。
只寫 geoip:cn,沒有 geosite:cn
只依賴位址判斷,會讓解析程序承擔更多工作,也會受到內容傳遞節點與位址調度影響。某個中國大陸業務網域可能解析至不屬於預期類別的位址,進而落入代理。網域策略明確時,優先使用 geosite:cn 表達意圖,再以 geoip:cn 補充會更合適。
誤把多個條件當成符合任一項
若一條規則同時寫入 domain、ip、port 與 network,通常代表連線必須同時符合這些欄位。規則未命中時,應逐一檢查各欄位,而不是只確認其中一個網域是否在清單中。為降低維護難度,可以將不同判斷維度拆成多條意圖單一的規則。
用日誌驗證,不要靠感覺判斷
完成一套分流規則後,至少選擇四類目標進行測試:區域網路位址、中國大陸分類網域、中國大陸直連 IP,以及預期進入代理的一般外部網域。每次只測試一個目標,並記錄目標形式、解析結果與最終出站標籤。
- 存取路由器或區域網路服務,確認連線使用
direct。 - 存取一個穩定的中國大陸網域,確認
geosite:cn對應的直連路徑已生效。 - 對明確的中國大陸 IP 發起連線,確認
geoip:cn能夠獨立命中。 - 存取不屬於上述類別的目標,確認最後由
proxy兜底。
如果核心日誌層級過低,看不到足夠的路由資訊,可以在排查期間提高日誌詳細程度,完成後再恢復日常設定。日誌中應重點關注目標位址、網域解析、規則錯誤與出站標籤。測試期間也應避免瀏覽器快取、既有長連線或背景請求干擾判斷;關閉目標頁面後重新建立連線,結果會更容易辨認。
從基礎範本擴充時,維持「具體在前,寬泛在後」
三段式範本適合作為起點,不適合無限堆疊未經驗證的分類。擴充時可先釐清業務意圖,再決定使用網域、IP、連接埠或入站標籤。某個固定網域必須走代理,就新增具體的網域代理規則;某個內部網段必須直連,就新增對應的 IP 網段直連規則;某類 UDP 業務需要特殊出站,再單獨加入網路與連接埠條件。
每增加一條規則,都應回答三個問題:它要涵蓋什麼目標、必須排在什麼規則之前、未命中時應落到哪裡。無法回答時,表示規則範圍或優先順序仍不清楚。比起大量規則,順序明確、欄位單一且可透過日誌驗證的精簡規則集,更容易長期維護。
對本文情境而言,最終原則可濃縮成一句話:先保護私有網路,再辨識明確的中國大陸網域與位址,最後將剩餘連線交給代理。geosite:cn 負責網域層面的策略,geoip:private 與 geoip:cn 負責位址層面的補充,IPIfNonMatch 則串起兩種判斷路徑。只要出站標籤正確、資料檔案可讀,且流量確實進入核心,這套結構便能提供可解釋、可排查的直連代理分流。