適合已匯入訂閱,準備在 v2rayN 中調整分流的使用者。先區分網域比對與 IP 比對,再了解首條命中、解析策略和出站標籤。文中的 JSON 是核心設定片段,並非可直接啟動的完整設定;依範例檢查產生的設定,可排查「規則已寫卻未生效」和「例外被大範圍規則覆蓋」這兩類常見問題。
1. 路由規則:決定請求從哪個出站連線
訂閱提供節點連線參數,路由則決定哪些請求使用這些節點。VMess、VLESS 等協定是節點連線方式,不是路由比對前綴。將節點改成 VLESS,不會自動改變特定網站要直連或透過代理連線。
在 V2Ray、Xray 常見的路由架構中,routing.rules 是有順序的陣列。每條規則會比對目標網域、目標 IP、連接埠或入站標籤等條件,符合後透過 outboundTag 指向已定義的出站。標籤只是設定中的名稱,proxy、direct 並非自動存在的內建出站。
- 網域請求:核心取得
www.example.com時,可以直接比對網域規則。 - IP 請求:核心只取得目標位址時,網域規則未必有可供比對的資料;能否還原網域,取決於入站、流量嗅探和 DNS 設定。
- 出站引用:規則中的
outboundTag必須與outbounds中某個實際存在的tag相符,大小寫也應一致。
2. domain、full、regexp:依比對範圍選擇前綴
domain 既是規則中的欄位名稱,也可能是欄位值中的比對前綴。下表的字串都放在 "domain": [...] 陣列中。不要加上網址的通訊協定、路徑或查詢參數;路由的網域比對方式不同於瀏覽器網址列比對。
| 寫法 | 比對範圍 | 典型邊界 |
|---|---|---|
full:example.com | 只比對完整網域 | 符合 example.com,不符合 www.example.com |
domain:example.com | 根網域及其子網域 | 符合 example.com、a.example.com,不符合 notexample.com |
example.com | 一般字串包含比對 | 比網域邊界比對的範圍更廣,可能符合 notexample.com |
regexp:^api[0-9]+[.]example[.]com$ | 正規表示式比對 | 符合 api1.example.com,不符合 api.example.com |
geosite:cn | 資料檔中的網域集合 | 視本機資料檔是否提供 cn 標籤及其具體內容而定 |
只讓單一主機透過代理連線,使用 full:。若要統一處理整個網站及其子網域,使用 domain:。一般裸字串適用於明確需要包含比對的情況,不適合當成精確網域的簡寫。也不要寫成 domain:*.example.com:這裡不是萬用字元語法。
{
"type": "field",
"domain": [
"full:login.example.com",
"domain:example.net",
"regexp:^api[0-9]+[.]example[.]com$"
],
"outboundTag": "proxy"
}
上方三個陣列項目是「或」的關係,符合任一網域條件即可。正規表示式使用 [.] 表示字面上的句點,避免 JSON 反斜線跳脫造成混淆。若改用正規表示式的 \.,在 JSON 字串中必須寫成 \\.。開頭的 ^ 和結尾的 $ 用來限定完整比對範圍。
3. ip、geoip、geosite:分開設定位址集合與網域集合
ip 欄位接受 IP 位址、CIDR 網段或 geoip: 集合;domain 欄位接受網域比對項目及 geosite: 集合。兩種集合不能互換。geoip:cn 表示位址歸屬集合,不代表所有中文網站;geosite:cn 是網域清單,也不保證這些網域永遠解析到同一地區的位址。
{
"type": "field",
"ip": [
"192.168.0.0/16",
"10.0.0.0/8",
"geoip:private"
],
"outboundTag": "direct"
}
這段設定示範讓私有網路目標直連。前兩個網段可能與 geoip:private 重疊,實際設定通常選用明確網段或集合即可。若要讓中國大陸網域及中國大陸 IP 都直連,建議拆成兩條規則:一條設定 domain,另一條設定 ip。不要把兩個欄位放進同一條規則,卻預期它們會以「或」的方式比對。
- 同一欄位內通常是「或」:
ip陣列可以列出多個網段,符合其中一個即可。 - 同一規則中的不同條件欄位通常是「且」:例如搭配
domain與port,表示網域和目標連接埠都必須符合。 - 集合依賴本機資源:常見設定會讀取
geosite.dat與geoip.dat。若標籤不存在、資源路徑錯誤或檔案缺漏,都可能導致核心載入失敗。 - 集合內容會變動:更新資源後,網域或位址的分類可能改變。排查時請記下資源更新日期,不要只查看用戶端版本。
4. 首條命中:例外規則在前,寬泛規則在後
規則依陣列順序逐條檢查,首條符合後便決定路由。規則不會因為「範圍更精確」就自動取得較高優先順序。若先設定 domain:example.com 直連,再設定 full:api.example.com 走代理,後者會被前者覆蓋。
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"domain": ["full:api.example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": ["domain:example.com"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
這段設定先保留單一主機的代理例外,再處理整個網域的直連,最後讓其餘 TCP、UDP 請求透過代理連線。內容只展示 routing,必須已有名為 proxy 和 direct 的出站才能使用。若核心沒有任何規則符合,常見行為是使用第一個出站;不要只憑標籤名稱猜測預設路徑。
- 列出明確例外。例如登入介面、內部服務,或必須使用固定出口的網域。
- 加入集合規則。接著加入已確認的
geosite、geoip分類。 - 設定預設處理方式。確認最後的通用規則或第一個出站,避免未涵蓋的請求意外直連。
- 檢查產生後的順序。用戶端可能同時產生預設規則與自訂規則,介面上的清單不一定等於最後完整的陣列。
連接埠條件也會改變比對範圍。例如在網域規則加入 "port": "443",只會處理目標連接埠為 443 的請求;同一網域的 80 連接埠連線不會符合。若要讓整個網站都透過代理連線,請勿無意間加上連接埠限制。
5. domainStrategy:何時將網域解析為 IP
網域規則設定正確,IP 規則仍可能不符合,常見原因是解析時機。routing.domainStrategy 控制路由比對過程是否將網域解析成位址,但不保證 DNS 查詢一定會透過代理。核心 DNS、出站解析和用戶端 DNS 設定仍須分別確認。
AsIs:先依現有目標比對
- 設定欄位
- routing.domainStrategy
- 設定值
- AsIs
- 網域請求
- 不會為路由比對主動解析 IP
- IP 請求
- 仍可比對 ip 條件
適合主要依賴網域規則,並希望減少路由階段解析的設定方式。
IPIfNonMatch:未符合時再解析
- 設定欄位
- routing.domainStrategy
- 設定值
- IPIfNonMatch
- 觸發條件
- 網域目標未符合現有規則
- 後續動作
- 解析後重新嘗試比對
若前面已有通用預設規則符合,就不會進入未符合後的解析流程。
另一個常見值是 IPOnDemand:比對過程遇到需要 IP 的規則時,可能會觸發目標網域解析。因此,將 IP 規則放得很前面,可能會提早發出 DNS 查詢。選擇策略時,先決定要以「網域分類優先」還是「位址分類優先」,再調整規則順序;不要把切換策略當成萬用修復方法。
- 網域優先:先使用
full:、domain:、geosite:表達需求。 - 補充位址判斷:確實需要依解析後的位址判斷時,再確認策略是否允許解析,以及 DNS 回傳的結果。
- 留意預設規則:
IPIfNonMatch搭配最後一條全匹配規則時,網域請求可能直接符合預設規則,不會再進行 IP 二次比對。
6. 在 v2rayN 驗證:檢查產生的設定與連線記錄
請先備份目前的路由方案,再開啟 v2rayN 的路由設定編輯規則。不同桌面介面的選項名稱可能不同,請以目前版本顯示的「路由設定」及規則編輯介面為準。本文的 JSON 展示 V2Ray/Xray 核心欄位,不應直接貼入只接受網域清單的輸入框。
這些數字代表連接埠用途,不是速度測試結果。連接埠 443 不等於「所有網頁流量」,連接埠 53 也不涵蓋所有加密 DNS。依連接埠分流時,必須同時考慮實際傳輸方式,不能只憑連接埠推斷應用程式用途。
- 檢查輸入格式。JSON 使用英文雙引號,不加註解或尾隨逗號;核心欄位名稱維持原樣。
- 確認執行中的核心。確認目前選用的是預期的核心,以及用戶端最後產生的規則語法。不要混入其他設定格式的欄位。
- 確認標籤與資源。檢查
outboundTag是否存在,以及集合標籤是否能載入;先排除核心啟動錯誤,再測試分流。 - 重新建立連線。儲存並套用路由後,關閉測試應用程式的舊連線,再送出新請求。既有長連線不會因清單變更而自動切換出站。
- 查看連線記錄。在可用的記錄詳細資料中檢查目標網域或 IP、目標連接埠、入站與出站標籤。必要時可暫時提高記錄等級,測試完成後再還原。
驗證網域規則時,至少準備三組輸入:精確例外 api.example.com、同網域的其他主機 www.example.com,以及不屬於該網域的目標。前兩項用來區分 full: 和 domain:,第三項用來確認預設規則。範例網域僅用於說明比對範圍;連線測試請改用自己有權使用且確實提供服務的網域。
7. 常見問題:從規則覆蓋、位址輸入和集合錯誤開始排查
只設定了代理規則,為什麼仍然直連?
先檢查前面是否有比對範圍更大的直連規則。將精確例外移到大型集合之前,套用後重新建立連線,再從記錄確認出站標籤。若產生的設定順序與介面不同,也要檢查是否有預設規則先行符合。
已設定 domain 規則,記錄中卻只有 IP,該怎麼辦?
先確認應用程式是否已在本機完成解析,以及入站是否有傳遞網域。接著檢查目前核心的流量嗅探設定;嗅探只能從支援的流量中擷取資訊,無法保證還原所有連線的網域。已知且固定的內網目標可改用明確的 IP 或網段規則。
加入 geosite 後核心無法啟動,應該修改哪裡?
先查看記錄中的資源檔案路徑和標籤名稱。確認目前的資料檔包含所用標籤,必要時透過用戶端提供的資源更新入口進行更新。可暫時用一條 full: 規則驗證基本路由,再恢復集合設定,避免同時變更多個條件。
切換節點後規則失效,是協定不支援分流嗎?
通常應先檢查產生的設定,而不是歸因於 VMess 或 VLESS。確認切換後規則仍引用正確的代理出站,目前仍選用原本的路由方案,也沒有切換到另一份自訂設定。節點連線失敗與路由選錯出站是兩種不同問題,應分別查看記錄。
穩妥的調整順序是:先用單一精確網域驗證出站,再擴大至子網域或集合,最後加入 IP 補充規則與預設規則。每次只變更一類條件,並保留可還原的路由方案。更多基礎概念請參閱概念速查;若要繼續排查 DNS 與分流的互動問題,請參閱進階設定。