適合已匯入訂閱、節點可正常連線,但想調整分流方式的使用者。先確認流量確實進入客戶端,再分辨 domain 與 ip 的比對對象,最後依「自訂例外、通用分類、預設出口」的順序設定規則。本文提供 V2Ray/Xray 格式的路由片段、v2rayN 操作步驟與驗證方式;程式碼中的出口標籤必須與目前設定相符,不能直接當成完整客戶端設定匯入。
設定路由的前提:流量必須先進入核心
路由規則只負責選擇出口,不會自動讓所有應用程式使用代理。瀏覽器遵循系統代理設定時,請求才會送至本機代理連接埠;忽略系統代理的程式通常需要個別設定代理,或使用 TUN 接管。啟用 TUN 也不代表所有流量都走代理:流量進入核心後,仍可依路由規則直連。
v2rayN 是桌面客戶端,實際路由由目前執行的核心處理。本文的 JSON 使用 V2Ray/Xray 路由格式,適用於相應核心設定,並非所有核心都通用。Android 上的 v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心;兩者的介面入口、內建規則與資源更新方式不盡相同。
domain 與 ip:比對對象及寫法
domain 比對請求中的目標網域,ip 比對目標 IP 或依策略解析出的 IP。網域規則不是完整網址篩選器:不要填入 https://、網頁路徑或查詢參數。造訪同一網域的不同路徑,通常不會因此使用不同出口。
| 寫法 | 實際意義 | 適用情境 |
|---|---|---|
full:example.com | 只比對 example.com 本身 | 只為單一主機名稱設定例外 |
domain:example.com | 比對根網域及其子網域 | 讓同一網域下的服務使用相同出口 |
example | 以一般字串比對網域關鍵字 | 比對範圍較廣,容易誤判,請謹慎使用 |
geosite:cn | 引用網域資源中的 cn 分類 | 依維護好的網域清單分流 |
192.168.0.0/16 | 比對指定的 IPv4 網段 | 區域網路位址直連 |
geoip:cn | 引用 IP 資源中的 cn 分類 | 依目標 IP 所屬位址清單分流 |
例如 domain:example.com 可以比對 api.example.com,但不會把 notexample.com 視為其子網域。若要精確控制,優先使用 full: 或 domain:,不要用過短的關鍵字取代網域邊界判斷。
網域例外規則
- 規則欄位
- domain
- 比對內容
- domain:example.com
- 目標出口
- direct
- 建議位置
- 放在通用分類之前
適合明確知道網域的服務;範例網域僅用於說明格式。
區域網路 IP 規則
- 規則欄位
- ip
- 比對內容
- geoip:private
- 目標出口
- direct
- 檢查重點
- IPv4 與 IPv6 位址範圍
確認資源檔案包含該分類;也可依實際網路填入明確的 CIDR 網段。
規則順序:比對到第一條就決定出口
規則會依清單由上往下檢查,比對成功後便不會繼續尋找「更精確」的後續規則。範圍很大的規則若放在最前面,後面的自訂例外可能永遠不會執行。同一欄位陣列中的多個值通常是「或」的關係;同一條規則同時填入 domain、ip、port 等不同條件時,則必須符合這些條件的組合。
- 例外規則優先:必須直連或必須使用代理的特定網域,請放在通用國家分類之前。
- 接著設定分類:依序處理區域網路、國內網域與國內 IP 等一般範圍。
- 最後處理其餘流量:明確指定預設出口,避免依賴不明確的出站排列順序。
- 網域與 IP 分開設定:若要表示「國內網域或國內 IP 直連」,請建立兩條規則,不要把兩類條件放進同一條規則。
核心設定未符合任何規則時,通常會使用 outbounds 陣列中的第一個出站。以下範例在末尾加入 TCP/UDP 規則,明確將流量導向代理作為後備,避免誤以為「未符合規則」就一定直連。此片段只有 routing 部分;direct、proxy 必須是目前完整設定中已存在的出站標籤。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": ["domain:example.com"],
"outboundTag": "direct"
},
{
"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"
}
]
}
}
geosite、geoip 與 DNS 策略
geosite 是網域清單,geoip 是 IP 位址清單,兩者都不是即時查詢服務。引用不存在的分類,或資源檔案遺失、格式不相容,都可能導致核心載入失敗。更新訂閱只代表重新取得節點,不保證路由資源也會同步更新。
domainStrategy 決定路由階段如何處理網域解析,並不等於完整的 DNS 伺服器設定。設為 IPIfNonMatch 時,只有網域階段沒有比對成功,才可能解析 IP 後再次比對;如果最後一條萬用規則已經比對成功,就不符合「未比對」的條件。
| 策略 | 路由行為 | 使用提醒 |
|---|---|---|
AsIs | 路由階段不會主動解析網域的 IP | 網域請求主要依賴 domain 規則,IP 欄位仍可比對直接連線的 IP |
IPIfNonMatch | 網域未比對成功時,嘗試解析並重新比對 | 末尾的萬用規則會提前比對成功,不能期待此時再進行 IP 後備比對 |
IPOnDemand | 比對過程遇到需要 IP 的規則時,嘗試解析 | 規則順序會影響解析觸發時機,也需確認 DNS 是否正常 |
上一節設定中的 geoip:cn 可處理目標為 IP 的直接連線;但若存在末尾的萬用規則,就無法保證所有未分類網域都會以 IP 後備比對。若希望未比對到的網域也依解析後的 IP 分類,可考慮使用 IPOnDemand,並將需要優先判斷的網域規則放在 IP 規則之前;另一種做法是移除萬用後備規則,並確認第一個出站確實是代理。
- 使用
IPOnDemand後,DNS 解析異常可能拖慢路由判斷,因此不能只檢查節點延遲。 - 網域可能同時傳回 IPv4 與 IPv6;只查看一筆 IPv4 結果,無法說明所有連線的分流結果。
- 嗅探可在部分連線中補充網域資訊,但會受到協定與加密方式影響,不能視為一定能還原網域的機制。
三種設定方式:繞過中國大陸、全域代理、自訂直連
「繞過中國大陸」通常是指區域網路與中國大陸境內目標直連,其餘目標則透過代理;「全域代理」則是讓進入核心的流量統一使用代理出口。兩種方式都無法保證應用程式流量已交由核心處理。公司內網、印表機與家用儲存裝置等需求,應另外檢查,避免切換設定後無法存取。
| 設定方式 | 規則安排 | 驗證重點 |
|---|---|---|
| 繞過中國大陸 | 自訂例外 → 區域網路直連 → 國內網域/IP 直連 → 代理後備 | 國內服務使用 direct,其他測試目標使用 proxy |
| 全域代理 | 依需求保留區域網路例外,其餘 TCP/UDP 指向 proxy | 是否有更早比對成功的直連規則,以及應用程式是否已進入核心 |
| 自訂直連 | 將指定的 full/domain 規則移至最上方,再保留原有分流設定 | 主網域、登入網域與資源網域是否需要分別處理 |
要讓某個服務網站直連,不一定只新增主網域就足夠。登入、API 與靜態檔案可能使用不同網域。先從記錄確認實際請求,再逐一新增必要網域;不要為了省事就把共用 CDN 的整段位址範圍設為直連,否則可能影響其他無關網站。
-
儲存目前設定
先記下目前的路由名稱並備份規則。確認節點可正常使用,保留一份未修改的設定,方便發生問題時還原。
-
開啟路由設定
在提供此功能的 v2rayN 桌面介面中,依序前往「設定」→「路由設定」。不同介面可能會將入口放在主畫面的「路由」選單,請以目前安裝版本顯示的名稱為準。
-
編輯目標規則
選取要使用的路由設定,開啟規則編輯視窗。新增 domain 項目,例如
domain:example.com,並將出口設為直連;若介面將前綴與內容分成兩欄,請分別選擇類型並填入網域。 -
調整規則位置
將例外規則移至國內分類與後備規則之前。分別新增網域規則與 IP 規則,儲存後在主畫面的「路由」選擇器中啟用該設定。
-
重新建立連線並驗證
等待設定重新載入,必要時重新啟動核心。關閉原有網頁連線後再重新造訪,查看新連線記錄中的目標與出口;不要用已建立的長連線判斷新規則是否生效。
驗證分流:交叉檢查連接埠、記錄與出口
網頁能開啟只能表示某條連線路徑可用,無法證明使用了預期出口。建議分別測試一個應直連的目標、一個應走代理的目標,以及一個區域網路位址。查看記錄時,留意目標網域或 IP、所選出站標籤與錯誤訊息;若記錄層級太低,可暫時調高,測試結束後再還原。
以下命令會強制透過本機 HTTP 代理送出請求,範例假設 HTTP 或混合入站監聽於 127.0.0.1:10808。請先在客戶端確認實際協定與連接埠;若該連接埠只提供 SOCKS 服務,就不能直接照用 HTTP 代理參數。命令僅示範請求方式,不代表目標網站必須採用特定分流策略。
curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
- 連線遭拒:先檢查本機連接埠是否正在監聽,以及核心是否已執行。此時通常尚未進入路由比對階段。
- 連線走錯出口:檢查選取的路由設定、前方是否有更早比對成功的規則,以及目前核心是否已載入最新設定。
- 出口正確但連線逾時:接著檢查節點是否可連線、目標服務狀態與 DNS;不要反覆堆疊相同類型的路由規則。
- 瀏覽器與命令結果不同:檢查瀏覽器是否另行設定代理、是否沿用既有連線、DNS 快取與 TUN 接管範圍。
路由規則常見問題
新增 domain 規則後,為什麼還是走代理?
先確認填入的是網域,不含通訊協定與路徑;再將規則移至通用規則之前,並確認已啟用目前的設定。若記錄只顯示目標 IP,請檢查應用程式是否在進入核心前就已完成解析,以及目前入站是否能提供目標網域。
geosite:cn 和 geoip:cn 一定要一起新增嗎?
語法上並非強制,但兩者涵蓋的輸入不同:前者適合已知網域,後者適合目標 IP 或解析後的位址。若要同時涵蓋,請分成兩條規則,並確認 domainStrategy;不能認為新增分類名稱就一定會觸發解析。
更新訂閱後,自訂直連規則會消失嗎?
節點訂閱與客戶端路由設定通常分開管理,但匯入完整設定、還原設定或覆寫路由方案時,可能會修改規則。請先備份自訂設定,並避免直接編輯執行時產生的暫存設定檔。
Android 可以直接複製桌面規則嗎?
可以沿用網域、CIDR 與規則優先順序的設定思路,但不能直接複製整份桌面設定。v2rayNG 與 v2flyNG 的資源檔案、出站標籤及自訂規則入口都需要分別確認;儲存後重新建立連線,再透過記錄驗證實際出口。