適合已匯入節點並能透過代理瀏覽網頁,但想調整中國大陸直連與海外代理規則的使用者。本文以 V2Ray/Xray 路由欄位為例,說明網域資料庫、IP 資料庫、比對順序與預設出站之間的關係,並示範如何在 v2rayN 設定路由。完成後可透過記錄檔,分辨規則未命中、DNS 解析錯誤,以及請求根本未進入核心這三類問題。
一、設定路由分流前,先確認請求是否進入核心
路由規則只會處理進入代理核心的連線。若瀏覽器未使用系統代理,或應用程式自行直連,修改 geosite:cn 也不會改變這些請求的連線路徑。請先在 v2rayN 主視窗選擇「系統代理」→「自動設定系統代理」,再確認瀏覽器沒有使用獨立的代理擴充功能覆蓋系統設定。
連接埠請以用戶端目前顯示的數值為準。例如,本機混合監聽連接埠為 10808 時,手動設定的應用程式應連線至 127.0.0.1:10808;不可將節點伺服器的遠端連接埠填成本機代理連接埠。請先到「設定」→「參數設定」確認監聽連接埠,再使用已知可用的節點測試連線,之後才調整分流。
- v2rayN:負責管理節點、路由設定與核心程序,並非某種傳輸協定。
- V2Ray/Xray:負責執行本文的路由邏輯;實際支援的欄位仍須以目前的核心版本為準。
- VMess/VLESS:用來描述代理連線方式,不會直接決定中國大陸網域是否直連。
- 系統代理與 TUN:決定請求如何進入核心;無論使用哪種入口,都需要確認實際生效的路由。
二、geosite 比對網域,geoip 比對目標 IP
geosite:cn 引用網域分類資料庫中的 cn 集合;geoip:cn 則引用 IP 資料庫中的中國大陸位址集合。兩者不是同一條規則的不同寫法,也不能只憑網域後綴判斷分類結果。網域集合取決於使用的資料檔,更新資料後,個別網站的比對結果也可能改變。
| 規則內容 | 設定欄位 | 實際用途 |
|---|---|---|
geosite:cn | domain | 依網域資料庫比對中國大陸相關網域,不必先解析 IP。 |
geoip:cn | ip | 依目標 IP 的歸屬進行比對,適用於 IP 連線或已解析的位址。 |
geoip:private | ip | 比對資料庫中的私有及特殊用途位址,常用於本機網路直連。 |
geosite:category-ads-all | domain | 比對廣告網域集合,需確認目前使用的網域資料庫包含此集合。 |
domain:example.com | domain | 比對指定網域及其子網域,用於手動設定例外規則。 |
full:example.com | domain | 只比對完整網域,不延伸至其他子網域。 |
同一條規則的 domain 陣列中,通常只要有任一項目符合即可;但若在同一條規則中同時設定 domain 與 ip,就必須同時符合不同欄位的條件。若要設定「中國大陸網域或中國大陸 IP 皆直連」,應拆成兩條規則,而不是放進同一個規則物件。
三、domainStrategy 決定路由何時解析網域
routing.domainStrategy 控制路由階段是否將網域解析為 IP。它不是「所有 DNS 請求都走代理」的開關,也不同於出站本身的網域解析策略。本文採用 IPIfNonMatch:先比對網域等條件,若沒有符合的規則,再解析目標網域並嘗試比對 IP 規則。
AsIs:依現有目標比對
- 欄位
domainStrategy- 值
AsIs- 路由解析方式
- 不主動解析網域以比對 IP 規則
- 適用情況
- 主要依賴網域規則,或入站時已有目標 IP
網域請求未命中時,不會只因為存在 geoip 規則就自動查詢位址。
IPIfNonMatch:未命中時再解析
- 欄位
domainStrategy- 值
IPIfNonMatch- 路由解析方式
- 第一輪沒有符合規則時才觸發
- 適用情況
- 網域優先,IP 分類補充
若第一輪已命中涵蓋所有流量的兜底規則,就不會觸發這次補充解析。
另一個常見值 IPOnDemand 會在比對遇到需要 IP 的條件時觸發解析,因此排在前面的 IP 規則可能增加 DNS 查詢。此設定適合需要提早比對位址的情況,但不能直接理解為「中國大陸分流更嚴格」。應依 DNS 可用性與規則順序選擇,而非只看名稱判斷。
設定注意:使用 IPIfNonMatch 時,勿加入無條件兜底規則
採用本文方案時,請刪除位於末尾、涵蓋所有 TCP/UDP 流量的代理規則,並確認預設出站為代理。否則第一輪就會命中兜底規則,未收錄的中國大陸網域可能無法進入 geoip 補充分流。
四、中國大陸直連、海外代理與廣告封鎖
以下是路由片段,並非可直接執行的完整用戶端設定。此範例假設現有設定已定義 proxy、direct、block 三個出站標籤,而且 outbounds 陣列中的第一個出站是代理。若沒有任何路由規則符合,V2Ray/Xray 會使用第一個出站;因此此處的「海外代理」由預設出站負責,而非透過末尾的全匹配規則實現。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": ["geosite:category-ads-all"],
"outboundTag": "block"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
}
]
}
}
- 優先比對廣告網域:符合
category-ads-all時,交由拒絕出站處理,不再比對後續直連規則。 - 本機 IP 直連:連線至
192.168.1.1等私有位址時,目標本身就是 IP,可直接符合私有位址規則。 - 中國大陸網域直連:已收錄於
geosite:cn的網域會直接使用直連出站,不必等待 IP 分類。 - 補充分流至中國大陸 IP:網域在第一輪未命中時,使用核心 DNS 取得位址後,再嘗試比對
geoip:cn。 - 其他流量使用預設代理:網域與 IP 都未命中時,使用已確認的第一個代理出站。
「由上而下,首次命中即採用」還須配合解析階段理解:對只有網域的請求而言,IPIfNonMatch 不會為了排在前面的私有 IP 規則立即解析。如果網域在第一輪已命中其他規則,之後就不會再根據解析結果重新判斷。因此,內網網域也應加入明確的網域直連規則,不要只依賴 geoip:private。
五、在 v2rayN 建立並啟用路由設定
請先備份現有路由,再前往「設定」→「路由設定」。不同版本的編輯視窗版面可能不同,請以目前視窗中的「網域策略」、「規則清單」和出站選項為準。不要將完整的 routing 物件貼進只接受規則陣列的輸入欄位,也不要直接修改執行時產生、重新啟動後就會被覆蓋的設定檔。
- 建立獨立的測試設定:在「設定」→「路由設定」中新增或複製一份路由設定,並加上容易辨識用途的備註,例如「中國大陸直連測試」。請保留原設定,方便還原。
- 設定網域策略:將「網域策略」設為
IPIfNonMatch。若編輯器顯示英文值,請直接選取原值,不要將它填入網域規則。 - 逐條新增規則:依序加入廣告網域、私有 IP、中國大陸網域、中國大陸 IP。網域集合填入網域條件,IP 集合填入 IP 條件;出站則分別選擇拒絕或直連。
- 確認預設代理:檢查是否有涵蓋所有流量的末尾規則。採用本文方案時,請確認產生的設定中第一個出站是代理,不要新增全匹配規則作為兜底。
- 儲存並套用設定:返回主視窗,在「路由」中選取剛才的設定。確認核心已重新載入;若記錄檔出現設定錯誤,請還原原設定並逐條檢查。
v2rayN 的一般節點設定會產生核心所需的出站。介面中的「代理、直連、阻止」會對應至 JSON 標籤,不能只看中文顯示名稱,就認定最後的標籤一定是 proxy、direct、block。使用自訂完整設定時,請自行確認標籤與預設出站順序;使用圖形化規則編輯器時,建議優先選用內建的出站選項。
| 介面操作目標 | 設定確認項目 | 錯誤情況 |
|---|---|---|
| 選擇網域策略 | routing.domainStrategy 設為 IPIfNonMatch | 仍設為 AsIs 時,不會為了 IP 補充分流規則主動解析網域。 |
| 新增網域分類 | domain 包含 geosite:cn | 若誤填至 IP 條件,可能導致設定無法載入。 |
| 新增位址分類 | ip 包含 geoip:private | 若誤填至網域條件,就無法依目標位址分流。 |
| 設定預設代理 | 第一個出站是代理,且第一輪沒有全匹配規則攔截請求 | 海外目標直連,或中國大陸 IP 補充分流未觸發。 |
六、使用固定請求與記錄檔確認比對結果
驗證分流時,不能只比較網頁開啟速度。快取、連線重用與節點負載都會影響耗時,卻無法證明實際選用了哪個出站。請固定本機入口與測試目標,並在 v2rayN 記錄檔視窗查看目標位址及出站標籤。若目前的記錄層級看不到連線紀錄,可前往「設定」→「參數設定」尋找記錄層級選項,暫時設為 info;驗證完成後再恢復原值。
以下使用 Windows 的 curl.exe 明確連線至本機 HTTP 代理,以排除瀏覽器擴充功能和系統代理狀態的影響。10808 僅為連接埠範例,請改成目前實際支援 HTTP 的監聽連接埠;--max-time 15 代表最多等待 15 秒,不是實際測速結果。
curl.exe --proxy http://127.0.0.1:10808 --max-time 15 -I https://www.baidu.com/
curl.exe --proxy http://127.0.0.1:10808 --max-time 15 -I https://example.com/
- 檢查中國大陸網域:確認測試網域確實包含在目前使用的
cn集合中,再觀察是否選用直連。不能只因網站使用中文,就認定它一定會符合規則。 - 檢查預設出站:選擇一個未包含在現有網域規則中,且解析位址也不屬於中國大陸或私有位址集合的目標,觀察它是否使用代理出站。
- 檢查區域網路:連線至實際存在的路由器位址,例如
http://192.168.1.1/,確認是否使用直連標籤。若裝置沒有回應 HTTP,請求失敗本身並不能證明路由有誤。 - 檢查廣告規則:從目前使用的廣告集合中,選擇一個確實存在的網域進行測試,並觀察拒絕出站的紀錄。不要使用來源不明、可能已失效的廣告網址來判斷。
排查順序:先確認出站,再處理連線失敗
若記錄檔已顯示正確的出站,請接著檢查該路徑上的 DNS、連線與服務回應;若顯示錯誤出站,再回頭檢查規則順序與分類資料。每次只修改一條規則,並重新建立連線,避免快取與既有連線干擾判斷。
七、常見問題:規則已生效,但結果不如預期
加入 geosite:cn 後,為什麼中國大陸網站還是走代理?
先在主視窗的「路由」確認已選取剛儲存的設定,再檢查前面的規則是否已先命中代理。若記錄檔中的目標是 IP 而非網域,網域集合就無法直接判斷這條連線,請檢查 IP 規則;若目標仍是網域,則確認目前使用的資料檔是否收錄該網站。
末尾已設定所有流量走代理,為什麼 geoip:cn 沒有生效?
使用 IPIfNonMatch 時,全匹配代理規則會在第一輪接住請求,核心便不會再觸發「未命中後解析」。請刪除這條兜底規則,並確認第一個出站確實是代理,再以新連線重新測試。若必須保留兜底規則,就需要重新設計解析策略,而不是只調整 geoip 規則的位置。
只啟用 geoip:private,為什麼內網網域還是無法連線?
內網名稱必須先能透過適當的 DNS 解析,而且不能被其他網域規則提前導向代理。請為實際使用的內網後綴新增明確的網域直連條件,並確認對應的 DNS 可以連線。直連規則不會讓公用 DNS 自動辨識組織內部的主機名稱。
啟用流量探測後,就一定能依網域分流嗎?
不一定。流量探測只能從部分協定交握中擷取網域資訊,是否用於路由也取決於入站的探測設定;並非所有連線都能還原網域。請先確認入站收到的原本是網域還是 IP,再決定是否調整探測設定,不要把探測當成修復 DNS 的方法。
封鎖廣告後,登入或付款頁面異常怎麼辦?
先暫時停用廣告規則並重新測試,確認是否誤封。若確實是分類問題,請為必要網域新增範圍盡可能小的例外規則,並將它排在廣告規則之前。例外規則應依實際需求選擇代理或直連;不要只為了恢復單一資源,就放行整個網站的所有子網域。
最後保留一套清楚易懂的規則:必要例外在前,其次是廣告封鎖、私有位址與中國大陸網域直連,再以 IP 分類補充,預設出站則使用代理。DNS 解析出的位址仍會影響 IP 比對結果;若解析受到干擾,即使規則正確,也可能分類錯誤。完成路由驗證後,再單獨檢查 DNS,避免同時修改入口、解析與出站而無從比對。