本文適合已能正常連線至節點,但希望減少中國大陸網站繞道的使用者。內容從請求比對流程開始,提供可直接核對的 routing 規則、v2rayN 設定位置、DNS 配合方式與日誌排錯步驟,最終讓中國大陸網域與 IP 直連,其餘流量則進入代理出站。
先確認分流目標與處理順序
V2Ray 路由分流不是把網路切成兩條獨立連線,而是由同一個入站接收應用程式請求,再依據網域、目標 IP、連接埠與網路類型選擇出站。常見設定會準備名為 direct 的直連出站,以及名為 proxy 的代理出站。routing 規則只會引用這些標籤,不會自行建立連線。
中國大陸直連、其餘流量走代理的核心目標,可濃縮為三層判斷:區域網路與保留位址直接連線;中國大陸網域與 IP 直接連線;未符合上述規則的請求交由代理處理。最後的兜底規則不可省略,否則未命中的流量會落到 outbounds 陣列中的第一個出站,結果取決於設定排列,難以直觀判斷。
規則會依陣列中的排列順序執行,第一條符合的規則成功後便立即停止。具體網域規則應放在寬泛規則之前,區域網路位址應放在公網位址規則之前,最後的 tcp,udp 兜底規則必須放在末尾。如果先寫入涵蓋所有網路類型的代理規則,後面的中國大陸直連規則將永遠沒有執行機會。
- 第一層:
geoip:private處理區域網路、回送與保留位址,避免存取路由器和區域網路裝置時繞道至代理端。 - 第二層:
geosite:cn依據網域分類比對中國大陸網站。 - 第三層:
geoip:cn處理直接使用 IP 存取,或網域解析後落在中國大陸位址範圍內的請求。 - 第四層: 未符合規則的 TCP 與 UDP 流量統一交給
proxy出站。
geosite、geoip 與 domainStrategy 的關係
geosite 是網域分類資料,geoip 是 IP 位址範圍分類資料。存取含有網域的網址時,V2Ray 通常會先取得網域;是否繼續解析目標 IP 並執行 IP 規則,則由 domainStrategy 控制。因此,只加入 geoip:cn 並不代表所有中國大陸網域都能穩定直連。
AsIs 表示依原始網域執行路由;網域規則未命中時,不會為了路由判斷而主動解析 IP。IPIfNonMatch 表示先嘗試網域規則,只有未符合時才解析 IP 並繼續檢查 IP 規則。IPOnDemand 會在遇到需要 IP 的規則時更早觸發解析。中國大陸直連情境通常選擇 IPIfNonMatch,兼顧網域分類與 IP 位址範圍兜底。
| 策略 | 比對行為 | 適用情境 | 注意事項 |
|---|---|---|---|
AsIs |
優先保留原始網域,不主動解析 IP 進行路由 | 規則主要依賴網域分類 | 只有 geoip 規則時,可能無法符合網域請求 |
IPIfNonMatch |
網域規則未符合後,再解析並檢查 IP | 中國大陸網域與 IP 雙重直連 | 需要 DNS 正常回傳結果 |
IPOnDemand |
路由判斷需要 IP 時立即解析 | 大量規則依賴目標 IP | 可能增加 DNS 查詢次數 |
結論:預設先使用 IPIfNonMatch
同時設定 geosite:cn 與 geoip:cn 時,IPIfNonMatch 能先使用網域分類,再以解析結果補足未分類網域,比單獨依賴其中一套資料更容易排錯。
可直接套用的 routing 設定
以下是一個完整的 routing 物件,可合併至既有的 V2Ray 或 Xray 設定中。它假設 outbounds 中已存在 direct 與 proxy 兩個標籤。貼上前先確認原設定是否已有 routing 欄位;同一層級的 JSON 物件不能保留兩個同名欄位,應加以替換或合併,不能直接追加。
{
"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"
}
]
}
}
第一條規則可確保 192.168.0.0/16、10.0.0.0/8 等私有網路目標維持本機存取。第二條在 DNS 解析前即可依網域分類決定直連。第三條處理網域分類未涵蓋、但解析位址屬於中國大陸位址範圍的情況。第四條未指定網域或 IP,因此會接收剩餘的 TCP 與 UDP 請求。
- 先確認原設定中的直連出站標籤。常見寫法是協定為
freedom,標籤為direct。 - 確認代理出站標籤指向目前使用的節點,範例使用
proxy,實際名稱可能不同。 - 將 routing 物件放在設定根層級,與
inbounds、outbounds、dns同層。 - 使用支援 JSON 驗證的編輯器檢查逗號、方括號與大括號,再重新啟動核心以載入設定。
- 開啟執行日誌,分別存取區域網路管理位址、中國大陸網站與境外網站,核對實際使用的出站標籤。
在 v2rayN 中建立對應規則
v2rayN 可透過圖形介面管理路由。進入「設定」→「路由設定」,建立新的規則集並啟用。不同版本的介面文字可能略有差異,但需核對的欄位相同:網域策略、規則順序、出站標籤與最後的兜底規則。修改後應重新載入設定或重新啟動核心,僅儲存視窗不一定會立即影響目前連線。
| 順序 | 規則內容 | 出站 | 目的 |
|---|---|---|---|
| 1 | geoip:private |
direct |
保留區域網路與本機服務存取 |
| 2 | geosite:cn |
direct |
中國大陸網域直接連線 |
| 3 | geoip:cn |
direct |
中國大陸 IP 位址範圍直接連線 |
| 4 | tcp,udp |
proxy |
其餘請求進入代理節點 |
本機代理連接埠也必須與應用程式設定一致。常見設定使用 SOCKS 連接埠 10808、HTTP 連接埠 10809,但這兩個數字並非強制標準。請進入「設定」→「參數設定」查看目前的本機監聽連接埠,再確認瀏覽器、下載工具或系統代理是否使用相同連接埠。連接埠不一致時,請求根本不會進入 V2Ray,路由規則自然不會生效。
- 使用系統代理時,先確認 v2rayN 的系統代理狀態已切換至所需模式。
- 使用個別應用程式代理時,請在應用程式內填入
127.0.0.1與實際的 SOCKS 或 HTTP 連接埠。 - 使用 TUN 接管時,請確認 TUN 已啟動,並檢查區域網路繞過設定是否與
geoip:private目標一致。 - 啟用新規則後,關閉舊連線再重新存取;既有的長連線可能會繼續沿用修改前的出站。
結論:先確認請求已進入核心
排查分流前,先在日誌中找到目標網域或目標 IP。完全沒有請求紀錄時,優先檢查系統代理、TUN 狀態與 10808/10809 連接埠,不要先修改 geosite 規則。
DNS 決定 geoip 規則能否接續執行
當 domainStrategy 使用 IPIfNonMatch 時,網域規則未符合後需要由 DNS 回傳位址,接著才能執行 geoip:cn。如果 DNS 查詢失敗、由應用程式自行加密處理,或瀏覽器未將網域交給代理,DNS 與路由看到的目標可能不同。典型現象是同一個網站有時直連、有時走代理,或日誌中只有 IP 而沒有網域。
最容易維護的做法,是讓中國大陸網域使用可直接存取的 DNS,其餘查詢透過受控路徑完成,同時避免系統 DNS、瀏覽器獨立 DNS 與核心 DNS 的多套策略互相覆蓋。V2Ray 的 dns 欄位負責解析,routing 負責選擇連線方向;兩者相關,但不是同一項功能。
明明設定了 geosite:cn,中國大陸網站仍然走代理?
先檢查代理兜底規則是否排在最前面,再確認核心能讀取 geosite.dat。開啟路由日誌查看符合的規則,不要只依出口位址判斷。
存取網域時走代理,直接輸入 IP 卻能直連?
這通常表示 geoip:cn 已生效,但網域規則沒有符合。確認設定中寫的是 geosite:cn,並檢查網域是否使用了未被目前資料分類的 CDN 位址。
啟用分流後區域網路管理頁面打不開?
將 geoip:private 放在第一條並指向 direct,同時檢查 TUN 或系統代理是否設定了區域網路繞過。測試時直接存取路由器的實際位址。
日誌顯示 DNS 逾時,應先修改哪一項?
先使用系統指令確認目前 DNS 可達,再檢查核心 DNS 設定與出站路徑。不要同時更換節點、規則與 DNS,否則無法判斷究竟是哪個步驟恢復正常。
訂閱更新後自訂路由消失?
將規則儲存至 v2rayN 的「設定」→「路由設定」中,並啟用對應規則集。Android 用戶端使用完整自訂設定時,更新訂閱前應確認目前執行設定的來源。
如果應用程式直接傳送 IP,V2Ray 無法從連線本身還原原始網域,此時只會執行 IP、連接埠與網路類型規則。反過來,如果請求帶有網域且 geosite:cn 已符合,就不會繼續解析 IP 進行第二次路由判斷。這正是規則順序與 domainStrategy 必須一起理解的原因。
依日誌逐層排查分流結果
排錯時不要一開始就大幅修改規則。先選定三個固定目標:一個區域網路位址、一個確認屬於中國大陸分類的網域,以及一個需要透過代理存取的網域。每次只修改一個變數,重新建立連線,並記錄日誌中的目標、符合的規則與出站標籤。如此即可區分入口、分類、DNS 與節點問題。
- 確認入口: 日誌中必須出現測試請求。沒有紀錄時,檢查系統代理、應用程式代理或 TUN 接管狀態。
- 確認目標: 查看日誌記錄的是網域還是 IP。只有 IP 時,
geosite無法參與這次比對。 - 確認順序: 檢查是否有更寬泛的規則提前符合,尤其是位於頂部的全域代理規則。
- 確認資料: 核對
geosite.dat與geoip.dat是否存在於核心可讀取的位置,更新後重新啟動核心。 - 確認標籤: routing 的
outboundTag必須與 outbounds 中的tag完全一致。 - 確認 DNS: 使用
IPIfNonMatch時,網域未符合後必須能成功解析,否則無法繼續執行 IP 分類。 - 確認重建連線: 關閉測試頁面或應用程式連線後重新發出請求,避免重用舊連線干擾結果。
在 Android 上使用 v2rayNG 或 v2flyNG 時,訂閱節點通常由用戶端產生執行設定。若只是驗證節點是否可用,先維持預設路由;需要長期套用自訂分流時,應確認用戶端目前使用的是訂閱產生的設定,還是匯入的完整設定。v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心,兩者都應以實際執行日誌與核心支援的資料格式為準。
測試 1:192.168.1.1
預期結果:符合 geoip:private → direct
測試 2:中國大陸網站網域
預期結果:符合 geosite:cn → direct
測試 3:未符合中國大陸分類的網域
預期結果:繼續檢查解析後的 IP,最終進入 proxy 或 geoip:cn
測試 4:UDP 應用程式請求
預期結果:未符合直連規則時,由 tcp,udp 兜底 → proxy
設定完成後的判斷標準,不是所有網站都能開啟,而是每類請求都進入預期的出站。中國大陸網站無法開啟但日誌已符合 direct 時,應繼續檢查本地網路與 DNS;境外網站已符合 proxy 但連線失敗時,應檢查節點、傳輸參數與遠端可達性。將路由判斷與連線品質分開處理,能避免反覆修改正確的規則。
特例規則應該放在哪裡?
實際使用時,可能遇到某個中國大陸網域必須經由代理,或某個未分類網域必須直連。此時應新增範圍盡可能小的特例,並放在通用分類規則之前。網域精確比對可使用 full:;指定某個網域及其子網域可使用 domain:;不要只為了一個網站就擴大到整個頂級網域。
{
"type": "field",
"domain": [
"full:service.example.net"
],
"outboundTag": "proxy"
}
上述結構用於說明精確網域規則的位置與寫法,實際設定時應替換成需要處理的真實網域。如果特例放在 geosite:cn 後面,而目標已被中國大陸分類符合,特例就沒有執行機會。需要強制直連的網域同理,應放在最後的代理兜底規則之前。
- 精確網域優先於分類網域。
- 小範圍 IP 位址段優先於國家或地區位址集合。
- 阻擋、直連與代理互相衝突時,以最先符合的規則為準。
- 每增加一條例外規則,都應寫明原因,並保留一次日誌驗證結果。
- 規則數量增加後仍須保留末尾兜底,避免行為依賴出站排列順序。
不要把短暫的 DNS 故障、節點無法使用或網站本身故障,直接固化成永久路由規則。先透過日誌確認請求確實選錯出站,再新增特例。經過這樣驗證的設定更精簡,更新 geosite 與 geoip 資料後,也更容易判斷哪些手動規則已可刪除。