本文適合已匯入訂閱、節點也能連線,卻不確定哪些連線會走代理的使用者。先了解網域清單與 IP 位址資料庫的差異,再依序安排「明確例外、一般規則、預設出口」,最後在 v2rayN 與 v2rayNG 中檢查產生的設定與連線記錄。範例使用 Xray 的路由欄位,原生 JSON 片段並非可通用匯入各客戶端的檔案。
路由分流:先確認流量是否進入核心
v2rayN 是桌面圖形化客戶端,v2rayNG 則是使用 Xray 核心的 Android 客戶端。介面用來管理節點與設定,實際比對路由規則的是核心。VMess、VLESS 等協定決定如何建立代理連線,並不會直接決定特定網站該直連還是走代理。
系統代理只會影響遵循該設定的應用程式;TUN 或 Android VPN 接管方式能涵蓋更多流量,但仍會受到應用程式排除項目、路由設定與系統權限影響。如果瀏覽器根本沒有把連線交給客戶端,即使修改十條 geosite 規則,也不會改變連線路徑。
- 系統代理情境:先確認瀏覽器使用本機代理位址,再查看記錄中是否出現目標網域。
- TUN 情境:先檢查虛擬網卡是否已啟動、目標應用程式是否遭到排除,再檢視核心的分流設定。
- Android 情境:確認 v2rayNG 已連線,目標應用程式包含在接管範圍內,且未被應用程式分流設定排除。
geosite 與 geoip:分別比對網域與 IP
geosite.dat 儲存依標籤分類的網域集合,geoip.dat 則儲存依標籤分類的 IP 網段集合。規則中的 geosite:cn 與 geoip:cn 是集合參照,不是網路查詢指令,也不表示客戶端會自動下載最新清單。
網域規則:geosite
- 資料檔案
geosite.dat- 常見參照
geosite:cn- 規則欄位
domain- 比對對象
- 核心可辨識的目標網域
標籤是否存在取決於實際使用的規則檔案;不同資料集的分類範圍可能有所不同。
位址規則:geoip
- 資料檔案
geoip.dat- 常見參照
geoip:cn- 規則欄位
ip- 比對對象
- 目標 IP 或路由解析結果
IP 所屬地區僅供分流判斷,不等於網站營運者所在地或內容使用的語言。
直接指定網域時,full:example.com 只會比對完整網域;domain:example.com 則會涵蓋該網域及其子網域。未加前綴的一般字串通常採子字串比對,容易把不相關的網域也納入,因此精確例外建議使用 full: 或 domain:。
缺少規則資源時,記錄中可能出現無法載入 geosite、geoip 或找不到標籤等錯誤。請透過目前客戶端提供的資源更新功能更新,並確認執行中的核心實際讀取哪個資源位置。不要只把檔案複製到任意下載資料夾,也別把 geosite:某標籤 當成所有資料集都支援的固定語法。
判斷方式:有網域依據時,優先設定網域例外
同一網站可能使用不同地區的 CDN 位址。若只想更改特定網站的出口,新增網域規則會比將一段共用 IP 全部改為直連更容易控管。
規則順序:由上而下,首個符合條件者生效;另行確認預設出口
一般路由規則會依陣列順序由上而下檢查,第一條符合條件的規則決定出口,後續規則不會再覆寫結果。同一條規則中的多個不同條件欄位通常必須同時成立;同一個 domain 陣列中的多個網域項目則符合其中一項即可。
- 明確的網站例外:例如特定網站必須走代理,就將規則放在範圍較廣的直連集合之前。
- 區域網路與私有位址:讓路由器、區域網路服務等連線直連;實際涵蓋範圍取決於使用的私有位址集合。
- 常見網域集合:例如將
geosite:cn設為直連。 - IP 所屬地區規則:例如將
geoip:cn設為直連,並搭配網域策略了解規則的生效條件。 - 未符合規則時:原生設定沒有符合的規則時,會使用第一個出口;客戶端也可能另外產生備援規則。
不要把「所有 TCP、UDP 都走代理」的備援規則放在最前面,否則一般連線會先符合它,後面的直連規則就沒有機會執行。另一個較不明顯的問題是:使用 IPIfNonMatch 時,若已符合範圍過廣的備援規則,「未符合後再解析網域」的流程也不會發生。
domainStrategy:決定路由階段是否解析網域
這裡討論的是 routing.domainStrategy。它控制路由比對時如何處理網域,不等同於直連出口內部的同名設定,也無法單獨確保 DNS 查詢會從哪個出口送出。
| 策略 | 路由階段的行為 | 使用注意事項 |
|---|---|---|
AsIs | 依原始目標比對,不會為了 IP 規則主動解析網域 | 目標原本就是 IP 時,仍可符合 IP 規則 |
IPIfNonMatch | 網域請求第一輪未符合規則時,嘗試解析後再比對 | 適合先使用網域規則,再以 IP 所屬地區補充 |
IPOnDemand | 比對過程遇到需要 IP 的規則時,嘗試進行解析 | 前面的 IP 規則可能提早觸發 DNS 查詢 |
假設某個網域未列於任何網域集合,但解析結果屬於 geoip:cn。若沒有其他規則提早符合,IPIfNonMatch 可在解析後讓它符合直連規則;AsIs 則不會主動為這個網域進行這項轉換。
DNS 回傳結果會影響 IP 規則。不同解析器可能回傳不同的 CDN 位址,IPv4 與 IPv6 的所屬地區也可能不同。若遇到「同一網站有時直連、有時走代理」,應一併檢查實際目標位址、DNS 設定與符合的規則,不要直接認定 geosite 失效。
- 應用程式只提供 IP 時,核心未必知道原始網域,因此網域規則不一定能符合。
- 流量嗅探可能有助於取得部分連線的網域,但效果取決於協定、加密方式與目前設定。
- 若要固定特定網站的出口,請先確認核心能辨識該網域,再新增明確的網域例外。
原生設定範例:網域優先,IP 規則補充
以下僅示範 routing 片段,供檢視產生的設定或編輯原生設定時參考。前提是設定中已有 proxy 與 direct 兩個出口,且第一個出口為 proxy。範例中的 example.com 與 example.org 是文件示範網域,不代表這些網域實際需要使用特定出口。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": ["domain:example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": ["full:example.org"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
}
]
}
}
此片段不包含節點憑證、監聽入站、DNS 或完整出口定義,不能直接取代整份客戶端設定。圖形介面的「匯入路由規則」也可能使用自己的資料格式,不能只因內容是 JSON 就直接貼入。
domain:example.com是優先比對的代理例外,即使解析結果位於直連位址集合中,也會先依網域規則走代理。full:example.org只會讓完整網域直連,不會自動涵蓋其子網域。- 網域請求第一輪完全未符合規則時,
IPIfNonMatch才會嘗試解析並重新比對。 - 若沒有其他備援規則,最後仍未符合規則的連線會使用第一個出口,因此務必檢查出口排序。
v2rayN 與 v2rayNG:在介面中設定路由規則
不同版本的選單名稱可能會加上「設定」或「自訂」等字樣。以下列出常見中文介面的操作入口與順序;若名稱不同,請依功能尋找。不要把桌面版匯出的路由檔案直接當成 Android 版通用格式。
v2rayN:先複製設定方案,再調整規則優先順序
- 開啟「設定」→「路由設定」,先保留目前可用的方案,再複製或新增一個測試方案。
- 在規則編輯器中選擇網域或 IP 條件,填入
domain:example.com、geosite:cn或geoip:cn等項目;出口則選擇介面實際提供的代理或直連選項。 - 將明確的網域例外移到範圍較廣的集合之前。若介面提供網域策略選項,也請確認其對應的路由行為。
- 儲存後,在主介面的路由選擇區啟用該方案。只儲存而未選取方案,通常不會改變目前連線。
- 重新建立測試連線,並透過記錄或檢視產生的設定,確認規則順序、預設出口與實際標籤。
v2rayNG:區分核心路由與應用程式分流
- 開啟側邊選單「設定」→「路由設定」,查看目前的路由模式、網域策略,以及代理、直連、封鎖規則的設定入口。
- 在對應的自訂規則輸入欄位新增網域項目。是否支援完整 geosite 參照、規則排序或 JSON 編輯,請以目前版本的介面為準。
- 若目標應用程式未納入 VPN 接管範圍,請先前往應用程式分流相關設定調整;這與 geosite 網域分流是不同層級的設定。
- 儲存後先中斷連線,再重新連線並發起新的存取。已建立的長連線可能仍會沿用原本的出口。
若需要逐條細緻排序,但目前版本只提供依類別填寫的文字欄位,請檢查最後產生的規則順序。介面將「代理網域」與「直連網域」分開,不代表已說明衝突時哪一項會優先比對。
驗證分流:從記錄確認出口,別只看網頁能否開啟
網頁能開啟只代表連線成功,無法證明使用了預期的出口。建議選三種測試對象:區域網路位址、明確新增的網域例外,以及未符合任何集合的一般網域。每次只修改一項,重新發起連線,再記錄目標與出口。
上方的 10808 僅為測試範例,不保證等於目前客戶端的監聽連接埠。請先檢查實際監聽設定。若系統已提供 curl,可在桌面終端機執行以下請求,明確將目標網域經由 SOCKS 入口交給核心,減少應用程式預先解析所造成的差異。
curl --proxy socks5h://127.0.0.1:10808 --head https://example.com
socks5h 與只傳送已解析 IP 的測試方式不同,它會將網域交由代理處理。測試目的不是比較速度,而是讓記錄中的目標與規則輸入一致。若記錄詳細程度不足,可暫時提高記錄層級;完成後請恢復原設定。分享記錄前,請刪除訂閱網址、節點憑證與個人瀏覽記錄。
操作建議:先建立一條可重現的網域例外
先確認一個明確的網域能穩定使用指定出口,再加入 geosite 與 geoip。若單條規則都沒有生效,請優先檢查流量入口、目前啟用的方案與出口標籤,不要繼續堆疊分類清單。
常見問題:儲存規則後,分流仍不如預期
新增直連網域後,為什麼還是走代理?
先確認目前啟用的是剛編輯的方案,再檢查前面是否有範圍過廣的代理規則。中斷舊連線後再試一次;如果記錄中只有目標 IP、沒有網域,也請檢查應用程式的解析方式與流量嗅探設定。
已新增 geoip:cn,為什麼有些中國大陸網站仍走代理?
檢查 routing.domainStrategy 是否設為 AsIs,以及實際解析出的位址是否屬於目前使用的位址資料庫。若使用 IPIfNonMatch,也要移除提早符合的備援規則,或改用明確的網域直連規則。
更新訂閱會覆蓋自訂路由嗎?
一般節點訂閱主要更新伺服器項目,路由通常由客戶端另外管理;匯入或取代完整設定則可能變更路由。更新前請保留目前方案,更新後確認啟用中的路由,不要把這兩種匯入方式當成相同操作。
出現 geosite 標籤不存在的提示,該如何處理?
先查看錯誤訊息中的標籤名稱,再透過客戶端的資源更新功能更新規則檔案,並確認核心讀取的是更新後的檔案。如果該資料集確實沒有此標籤,請改用資料集實際提供的分類,或先以明確的網域清單取代。
啟用 TUN 後,為什麼還要設定核心路由?
TUN 負責讓更多應用程式流量進入客戶端;核心路由則負責決定流量進入後使用哪個出口。請先確認流量確實進入,再分別驗證區域網路直連、網域例外與預設代理。接管成功不代表分流設定正確。