本文適合已能連上節點,接著想微調分流設定的使用者。先分清網域項目與 IP 欄位,再透過三條規則了解首條命中、欄位組合與 DNS 解析之間的關係,最後在 v2rayN 儲存一份可還原的自訂設定。範例使用保留的示範網域說明語法,並非用來測試網路連線。
先分清楚:網域前綴與 IP 欄位
Xray 的 routing.rules 是有順序的規則陣列。每條規則都會指定「哪些連線」交由「哪個出站」處理,其中 domain、ip、port 是比對條件,outboundTag 則指向既有出站。這裡的路由與訂閱節點清單排序無關,也不會修改 VMess 或 VLESS 節點的驗證參數。
| 寫法 | 填寫欄位 | 比對範圍 |
|---|---|---|
full:api.example.com | domain 陣列 | 只比對這個完整網域,不包含其子網域。 |
domain:example.com | domain 陣列 | 比對根網域及子網域,例如 www.example.com,但不會比對 notexample.com。 |
regexp:^api[0-9]+\.example\.com$ | domain 陣列 | 比對符合正規表示式的網域,例如 api12.example.com。 |
geosite:cn | domain 陣列 | 引用目前網域資料庫中的分類,實際涵蓋範圍依使用的資料檔而定。 |
192.168.0.0/16 | ip 陣列 | 比對這個 IPv4 網段,前面不應加上 ip:。 |
geoip:private | ip 陣列 | 引用 IP 資料庫中的私有位址集合,並需有相應資料可供使用。 |
容易混淆的是「ip 前綴」:在此處,ip 是 JSON 欄位名稱,不是與 domain: 對應的通用網域項目前綴。將 ip:192.168.1.1 填入網域清單,無法表示比對目標 IP。沒有前綴的網域字串通常會以子字串比對,因此 example.com 的涵蓋範圍會比明確指定的 domain:example.com 更廣。
依比對範圍選擇寫法
只要讓單一 API 改走代理,通常不需要用正規表示式;若要統一處理整個網站及其子網域,也不必逐一列出主機名稱。優先採用界線明確的寫法,可減少日後排查時的疑慮。
明確指定網域範圍
建議用 full: 指定單一主機,用 domain: 涵蓋根網域及子網域。兩種寫法都方便逐條檢查,適合作為手動編寫規則的起點。
適用情境:修正單一網站的路由,或為特定 API 設定例外。
引用分類集合
用 geosite: 指定一組網域。分類名稱不是可以任意取用的標籤,必須存在於目前使用的資料庫中;資料更新後,分類內的項目也可能改變。
適用情境:管理地區或業務分類,再用少量特定網域補充例外。
用正規表示式描述模式
用 regexp: 表示編號主機等規律。Xray 使用的正規表示式語法並非所有瀏覽器正規表示式功能的通用版本,不要直接照搬含有環顧或反向參照的表示式。
適用情境:多個主機名稱遵循固定命名規則,且能列出正向與反向測試範例。
正規表示式要留意輸入格式。在圖形介面的純文字網域欄位中,通常填入 regexp:^api[0-9]+\.example\.com$;若寫成 JSON 字串,反斜線還要再跳脫一層,如下所示。開頭的 ^ 與結尾的 $ 可限定完整網域,避免將更長的字串誤判為目標。
{
"type": "field",
"domain": [
"regexp:^api[0-9]+\\.example\\.com$"
],
"outboundTag": "proxy"
}
比對順序:例外在前,集合在後
規則會由上而下檢查,第一條符合條件的規則就會決定出站,不會繼續尋找「更精確」的後續規則。full: 不會自動優先於前面的 domain:,分類項目也沒有獨立於陣列順序之外的優先權。
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"domain": ["full:api.example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": ["domain:example.com"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["192.168.0.0/16"],
"outboundTag": "direct"
}
]
}
}
這是路由片段,不是完整的用戶端設定,也不應直接當成整份設定匯入。使用前,現有設定必須已定義 proxy 與 direct 出站。以網域為目標時,api.example.com 會符合第一條,www.example.com 會符合第二條;若連線直接以 IP 為目標,192.168.1.20 會符合第三條。
- 交換前兩條:API 網域會先被整個網域集合比對到,後面的精確例外就沒有機會生效。
- 同一陣列中有多個值:
domain中只要有任一項符合即可,適合合併幾個走相同出站的網域。 - 同一條規則中有多個條件:例如同時填入
domain和port,通常必須兩個條件都符合,而非擇一即可。 - 所有規則都未命中:通常會使用設定中的第一個出站,不一定是直連;也請檢查用戶端產生的預設規則。
結論:先移動例外,再擴大分類
如果發現特定網域走錯出站,先將它的精確規則移到較廣泛的集合規則之前,再檢查記錄;不要立刻新增一組重複分類,否則只會增加被前面規則遮蔽的項目。
IP 網段如何搭配 DNS 策略
IP 規則比對的是目標位址,不是電腦目前的公網出口位址。用戶端收到網域時,是否先解析並以解析結果參與路由,取決於 domainStrategy。這不等於完整的 DNS 設定:要使用哪個解析器、DNS 查詢如何送出,仍須查看 DNS 與相關路由設定。
| 策略值 | 處理方式 | 檢查重點 |
|---|---|---|
AsIs | 路由階段不會主動將網域解析為 IP。 | 網域未命中時,不要預期 IP 規則會自動補上;原本就是 IP 的目標仍可比對。 |
IPIfNonMatch | 網域依現有條件未比對到規則時,會嘗試解析後再進行比對。 | 若前面已有較廣泛的網域規則命中,就不會為了尋找更合適的 IP 規則而重新選擇。 |
IPOnDemand | 比對過程中遇到需要 IP 的規則時,才會進行所需的解析。 | IP 規則的位置會影響解析時機;過早放置涵蓋範圍廣的 IP 規則,可能改變網域例外的比對結果。 |
例如,要讓辦公設備 192.168.1.20 的管理頁面直連,可在 IP 欄位填入 192.168.1.20/32,不必加入整個私有位址範圍。若透過網域存取頁面,也要確認連線交給核心時是網域還是 IP;應用程式的代理方式、DNS 快取及嗅探設定,都可能影響核心實際看到的目標資訊。
在 v2rayN 建立可還原的規則設定
以下以中文桌面介面常見的操作路徑為例。不同版本可能將編輯功能放在按鈕或右鍵選單中,請先找到「路由設定」及目前啟用的方案;不要將路由片段貼到節點的伺服器位址、訂閱連結或傳輸參數欄位。
-
確認核心類型
開啟「設定」→「參數設定」,檢查目前節點協定對應的核心類型是否為 Xray。如果版本在設定頁另外列出核心對應關係,請依該頁確認;先確保節點本身可以連線。
-
備份方案
進入「設定」→「路由設定」,記下目前使用的路由方案,並使用介面提供的匯出或複製功能保留副本。若已有自訂規則,修改前請先保存規則順序。
-
新增例外規則
編輯準備使用的方案,新增一條規則:網域填入
full:api.example.com,出站選擇代理,其餘不需要的條件留白。圖形化表單只填欄位值,不要貼上整段 JSON。 -
調整規則順序
接著新增一條網域為
domain:example.com、出站為直連的規則。使用介面上的移動功能,讓精確例外排在涵蓋整個網站的規則之前;也要檢查是否有更前面的分類規則會覆蓋它。 -
啟用並驗證
儲存方案並設為目前使用的路由,依介面提示重新載入或重新啟動服務。將示範網域換成實際要管理的目標後,關閉舊連線並重新送出請求;若結果不如預期,切回備份方案以找出變更原因。
驗證時一次只修改一個條件。分別選一個應走代理的網域、一個應直連的網域,以及一個區域網路 IP,重新建立連線並記錄時間與目標。修改規則通常不會立即將已建立的長連線切換到另一個出站;瀏覽器重複使用連線,也可能讓結果看起來像是「儲存後沒有生效」。
- 查看核心記錄:在主視窗的記錄區查看新連線的目標及出站資訊;預設記錄不一定會逐條顯示規則編號,必要時可暫時提高記錄詳細程度,測試後再恢復。
- 確認請求有進入核心:使用系統代理時,應用程式必須確實遵循系統代理設定。完全繞過核心的連線不受這些路由規則控制。
- 檢查產生的設定:如果該版本提供檢視或匯出執行中設定的功能,請檢查
routing.rules的順序及實際出站標籤,不要只憑編輯器中的顯示位置判斷最終結果。
常見問題:規則設定正確,為何沒有生效?
已使用 full,為什麼仍然走直連?
先檢查前面是否已有 domain:、geosite: 或其他涵蓋範圍較廣的規則先行命中,再確認實際連線使用的主機名稱。網頁、API、圖片及登入服務可能各自使用不同網域,只為首頁設定例外不會涵蓋所有請求。
加入 geosite 分類後核心無法啟動,該怎麼辦?
查看記錄中是否有檔案載入失敗或找不到分類的訊息,確認目前資料檔是否包含該分類,以及核心實際讀取的檔案位置。先移除新增項目,恢復連線後,再透過用戶端的規則資料更新功能處理;不要只憑分類名稱猜測它一定存在。
網域和 IP 分別都能命中,放在同一條規則卻不行?
同一條規則中的不同條件通常必須同時成立。如果目的是「這個網域或這個網段都直連」,請拆成兩條規則;如果確實要限定在同一組目標,還要檢查 DNS 策略與核心實際取得的位址。
正規表示式測試通過,貼進 JSON 卻出錯?
先檢查反斜線跳脫:在 JSON 中,要比對一個字面句點通常寫成 \\.;純文字輸入欄位通常寫成 \.。接著移除目前正規表示式引擎不支援的語法,並分別用一個應命中及一個不應命中的網域進行驗證。
穩定的自訂路由通常由少量精確例外、明確的集合規則及清楚的預設處理方式組成。每次修改都記錄「目標、規則位置、預期出站、實際出站」四項,比不斷堆疊相似項目更容易維護;資料庫更新後,也應重新檢查先前需要例外處理的網域。