2026-08-02 · 進階設定 · 約 12 分鐘

v2rayN 自訂路由規則設定:domain、ip、geosite 語法與比對順序

整理 domain、full、regexp、geosite、geoip 等規則前綴的寫法,說明規則由上而下比對,以及直連、代理與封鎖規則的排列方式。

本文重點

本文適合已能透過節點連線,並準備調整分流規則的 v2rayN 使用者。內容以 Xray 核心的路由欄位為準,說明網域與 IP 的填寫位置、直連/代理/封鎖規則的排序範例,以及如何透過設定、記錄與單次請求確認規則是否生效。

1. 先確認路由入口與實際使用的核心

v2rayN 是用來設定與管理的用戶端,實際比對連線的是正在執行的核心。本文的 routing.rules、domainStrategy 與 outboundTag 均依照 Xray 設定語意說明。若使用不同的設定格式,別只因選單名稱相似,就直接貼上同一份 JSON。

在桌面版先開啟「設定」→「路由設定」,選取要修改的路由設定,再進入規則清單編輯。不同版本的編輯入口可能在雙擊項目或右鍵選單中;請確認目前頁面有網域、IP、連接埠及出站等欄位。儲存後,還要在主畫面的「路由」選單選取並啟用這份設定,不能只新增而未切換。

  1. 記下目前設定:記錄目前的路由名稱、使用中的節點與核心類型,並保留一份可正常運作的原始設定。
  2. 複製設定:在副本中調整規則,避免直接覆寫平常使用的設定。
  3. 確認出站:核對直連、代理與封鎖各自對應的實際標籤;下文以 direct、proxy、block 為例。
  4. 套用變更:儲存並啟用路由,留意核心記錄是否出現啟動失敗或設定解析錯誤。

2. 比對順序:首個符合條件的規則決定出站

一般欄位的路由規則會由上而下依序檢查,遇到第一條符合條件的規則,就採用該規則指定的出站。並沒有「精確網域會自動優先於網域集合」這種機制:即使下方有 full:,只要上方的寬泛規則已符合,下方就不會再有重新選擇的機會。

連線進入核心 讀取目標資訊 依序檢查規則 選定出站標籤 建立出站連線

同一欄位中的多個值通常是「或」的關係,不同條件欄位之間則是「且」。例如網域清單有兩個項目,符合其中一個即可;若同一條規則也填了連接埠 443,就必須同時符合網域與目標連接埠條件。在同一條規則中填入 domain 和 ip,也不代表「網域或 IP 任一符合即可」。

443
HTTPS 常用目標連接埠
53
傳統 DNS 常用目標連接埠
10.0.0.0/8
其中一段 IPv4 私有位址範圍

這些是協定連接埠與位址範圍,不是測速結果。路由中的 port 指的是目標連接埠,不是本機代理的監聽連接埠。瀏覽器連到本機代理後造訪 HTTPS 網站時,規則通常要判斷遠端的 443,而不是瀏覽器連接本機代理所用的連接埠。

結論:例外規則要放在寬泛集合之前

若要讓特定網域單獨走代理,請將該網域的精確代理規則移到可能涵蓋它的直連集合之前,再測試新連線;只修改前綴卻不調整位置,無法解決規則已被上方項目攔截的問題。

3. domain、full、regexp、geosite 的寫法

這些前綴用於網域欄位。填寫時不包含 https://、路徑、查詢參數或連接埠。瀏覽器網址 https://api.example.com/account 對應的網域是 api.example.com;路由網域規則不會依網頁路徑分流。

寫法比對方式適用範圍
domain:example.com比對 example.com 及其子網域適合整個網站;不會比對 notexample.com
full:api.example.com只比對這個完整網域不會涵蓋其他子網域
regexp:^api[0-9]+\.example\.com$使用正規表示式比對 api1、api20 等網域留意起始與結尾錨點、跳脫字元及核心支援的正規表示式語法
geosite:cn引用網域資料檔中的 cn 集合集合內容取決於實際載入的資料檔
example.com未加前綴時,會以一般字串包含比對比網域後綴比對涵蓋範圍更廣,不適合當作精確比對

domain: 適合讓某項服務及其子網域使用相同出站;full: 適合為單一介面設定例外。未加前綴的字串可能連 example.com.other.test 這類網域也比對到,因此一般設定建議優先使用邊界明確的前綴。

{
  "type": "field",
  "domain": [
    "full:api.example.com",
    "domain:example.net",
    "regexp:^api[0-9]+\\.example\\.org$"
  ],
  "outboundTag": "proxy"
}

這裡的三個網域條件是「或」的關係。程式碼採用 JSON 格式,因此正規表示式中的一個反斜線必須寫成兩個;若直接在 v2rayN 的網域文字框輸入規則,通常寫成 regexp:^api[0-9]+\.example\.org$ 即可,不需要額外進行 JSON 字串跳脫。正規表示式語法以核心支援範圍為準,不能直接照搬瀏覽器支援的所有語法特性。

4. ip 欄位、CIDR 與 geoip 的差異

ip 是規則欄位名稱,不需要加在位址前面。圖形介面的 IP 欄位可填入單一位址、CIDR 網段或 geoip: 集合。例如填寫 192.168.0.0/16,而不是 ip:192.168.0.0/16。IPv6 位址也應填在 IP 欄位中。

{
  "type": "field",
  "ip": [
    "10.0.0.0/8",
    "172.16.0.0/12",
    "192.168.0.0/16",
    "fc00::/7"
  ],
  "outboundTag": "direct"
}

這段規則涵蓋常見的私有位址範圍,但並未列出所有本機、鏈路本地及保留位址。若使用 geoip:private,請確認本機 IP 資料檔有提供這個集合,並了解其涵蓋範圍。存取區域網路服務時,也要確認請求確實進入代理核心;若連線被系統代理略過,就不會留下這條路由的比對記錄。

IP 項目代表意義排查重點
192.168.1.10單一 IPv4 位址裝置位址變更後,需要調整規則
192.168.0.0/16比對該 IPv4 網段網段範圍越大,受影響的目標越多
geoip:cn依資料檔中的 IP 集合比對不是判斷網域歸屬或服務營運者
geoip:private引用 private 位址集合確認實際使用的資料檔包含這個集合

同一個網站可能使用多個 CDN 位址,DNS 回傳結果也可能隨網路而改變。以單次解析取得的單一 IP 為整個網站設定分流,通常不如網域規則穩定。只有在應用程式直接存取 IP、目標是固定的內網裝置或明確網段時,才建議優先使用 IP 項目。

5. 網域解析策略會決定何時比對 IP 規則

當請求帶有網域時,核心是否先解析出 IP,再用 IP 項目參與路由判斷,取決於 routing.domainStrategy 等設定。這與「最後由哪台 DNS 解析連線」以及「是否啟用流量嗅探」是不同層面的問題,不能只開啟一個選項就以為全部都已處理。

策略值路由階段的行為使用時注意事項
AsIs不會為了路由比對而主動將網域解析成 IP原本以 IP 為目標的請求仍可比對 IP 規則
IPIfNonMatch網域未符合規則時,嘗試解析後再比對一次寬泛的網域兜底規則會讓請求提早結束比對
IPOnDemand比對過程遇到需要判斷 IP 的條件時才進行解析前面的 IP 規則可能先於後面的網域規則符合

例如將「所有 TCP、UDP 流量都走代理」放在清單末尾時,採用 IPIfNonMatch 的情況下,網域請求即使沒有符合明確的網域項目,也可能先符合這條網路兜底規則;一旦已有規則符合,就不能期待系統接著自動解析,再交由 geoip:cn 處理。這也是「設定了中國大陸 IP 直連,卻看起來沒作用」的常見原因。

6. 直連、代理與封鎖規則排列範例

常見的排列方式是「明確例外在前、寬泛集合在後、最後才放兜底規則」。但封鎖規則與例外規則哪個優先,必須依實際需求決定:若某個網域必須封鎖,就把封鎖規則放在可能放行它的規則上方;若要放行封鎖集合中的某個網站,就把精確的放行規則移到該集合之前。

{
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "domain": ["full:blocked.example.org"],
        "outboundTag": "block"
      },
      {
        "type": "field",
        "domain": ["full:api.example.com"],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "ip": ["10.0.0.0/8", "192.168.0.0/16"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

範例中的網域僅用來說明語法,不是可用節點或實際測試服務。設定中必須已定義對應的出站標籤:direct 對應直連出站,block 對應封鎖出站,proxy 對應實際的代理出站。標籤只是引用名稱,單純填入 proxy 字串並不會自動建立節點。

  1. 明確封鎖:先處理必須拒絕的特定目標。
  2. 網域例外:為特定介面或網站指定出站,避免被後面的集合規則涵蓋。
  3. 私有 IP:處理以 IP 存取的內網目標;此範例使用 AsIs,不會主動解析網域來比對這一行。
  4. 集合直連:依實際的 geosite 資料比對其餘網域。
  5. 最後代理:讓尚未符合規則的 TCP、UDP 流量走代理。

若沒有任何規則符合,Xray 通常會使用設定中的第一個出站。不要把這項隱含行為當成「預設一定走代理」:用戶端產生的設定可能有不同的出站順序。明確設定兜底規則較容易理解,但也要一併考量上一節提到的解析策略影響。

7. 規則未生效時的驗證步驟與常見問題

先區分三種狀況:請求未進入核心、進入核心後符合錯誤規則,或已選到正確出站但連線失敗。第一種請檢查系統代理與應用程式設定;第二種請檢查規則順序與比對欄位;第三種則檢查節點、DNS 與目標連線狀態。路由設定正確,不代表代理節點一定可用。

  1. 一次只改一條:選一個實際使用的網域,新增一條 full: 規則,並放在可能涵蓋它的規則之前。
  2. 建立新連線:儲存並啟用路由後,關閉原有頁面或應用程式連線,再重新發出請求。既有的長連線不會因為編輯規則而自動重新選路。
  3. 查看記錄:在 v2rayN 的記錄區核對目標、錯誤與出站標籤。必要時可暫時提高記錄等級;一般存取記錄不一定會標示符合的規則行號。
  4. 確認產生的設定:確認目前核心實際載入的設定包含新項目,且標籤拼法與 outbounds 一致。不要長期直接修改用戶端會重新產生的暫存設定。
  5. 還原設定:確認原因後,移除暫時測試規則並還原記錄等級,避免留下不必要的存取細節。

設定了 domain:example.com,為什麼介面還是走直連?

先檢查上方是否已有直連規則符合,再確認介面的實際網域是否屬於 example.com。可暫時將該介面的 full: 代理規則移到相關直連規則之前,儲存後重新建立連線;同時確認目前啟用的路由就是剛才編輯的設定。

儲存 geosite:cn 後核心啟動失敗,問題出在哪裡?

查看核心記錄中的具體錯誤。若提示資料檔或清單不存在,請檢查實際使用的 geosite 資料檔與集合名稱;若是 JSON 解析錯誤,則檢查逗號、引號與正規表示式跳脫。先移除新增項目以恢復連線,再逐項修正。

網域和 IP 都填了,為什麼符合的連線反而變少?

同一條規則中的不同條件欄位必須同時符合。若原本的需求是「網域符合,或 IP 屬於某個網段」,就拆成兩條規則並指定相同的出站;不要把兩種條件填在同一列,當成可擇一符合的選項。

改成代理後網頁還是打不開,是路由沒有生效嗎?

先查看存取記錄是否已選擇代理出站。若已選擇,接著檢查目前節點的連線錯誤、網域解析與目標服務狀態;若記錄中沒有這次請求,請確認應用程式是否遵循系統代理。不要只憑網頁能否開啟,推斷規則是否符合。

保留排查記錄時,只需記下規則順序、目標類型、出站標籤與錯誤訊息。分享截圖或設定前,請遮蔽訂閱網址、節點憑證及不必要的瀏覽網域。能明確重現一次比對結果,比一次新增大量規則更容易找出問題。

用戶端下載