2026-10-15 · 設定解析 · 約 12 分鐘

V2Ray config.json 設定檔解析:inbounds、outbounds 與 routing 路由規則

逐段認識 V2Ray 設定檔中的本機監聽、代理連線與路由規則,搭配 JSON 範例快速看懂 v2rayN 等客戶端產生的 config.json。

本文重點

適合已匯入節點,卻還看不懂客戶端產生的設定檔的讀者。先用本機 10808 連接埠與直連出站確認設定結構,再透過 VMess 出站和網域路由範例理解欄位間的關係。看完即可分辨本機監聽、遠端連線、規則比對與客戶端設定,不再把訂閱連結誤當成完整的 config.json。

1. config.json 頂層結構與請求流程

config.json 是核心讀取的設定檔名稱之一,並非固定的儲存位置。v2rayN 等客戶端可能會產生暫存的執行設定檔;手動修改產生的檔案,切換節點後可能就會被覆寫。請先確認目前使用的是 Xray 還是 V2Fly,再查看實際載入的設定檔與啟動記錄。

應用程式請求 入站接收 路由比對 出站連線 目標服務

inbounds 和 outbounds 都是陣列,可分別設定多個入口與出口。routing 是物件,其中的 rules 才是規則陣列。tag 是設定檔內部用來識別項目的名稱,不是伺服器位址;規則透過 outboundTag 指定出站。

以下是僅供本機直連測試的完整基本設定。它會在迴路位址開啟 SOCKS 服務,所有未由規則處理的請求都會使用第一個出站 direct。此設定沒有遠端代理節點,也不會自動變更系統代理設定。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    }
  ],
  "routing": {
    "domainStrategy": "AsIs",
    "rules": []
  }
}

2. inbounds:監聽位址、連接埠與本機協定

入站決定「應用程式如何將流量交給核心」。範例中的 127.0.0.1:10808 是本機 SOCKS 入口,不是遠端節點的連接埠。瀏覽器、命令列工具或其他支援 SOCKS 的程式,必須明確指定使用此入口,流量才會進入核心。

本機 SOCKS 入站

tag
local-socks
listen
127.0.0.1
port
10808
protocol
socks

僅接受本機連線;應用程式端必須選擇 SOCKS 協定。

可選的 HTTP 入站

tag
local-http
listen
127.0.0.1
port
10809
protocol
http

必須另外加入 inbounds;不會隨 SOCKS 入站自動啟用。

10808 和 10809 是本文採用的範例值,並非所有版本都固定使用的預設值。若直接將應用程式的 HTTP 代理指向 SOCKS 連接埠,會造成協定不相容。若客戶端提供混合入口,請以該入口實際支援的協定為準,不要只靠連接埠號碼推斷。

使用以下命令檢查應用程式能否透過範例入口發出 HTTPS 請求。Windows 可使用 curl.exe,macOS 和 Linux 可使用 curl。其中 socks5h 表示將目標網域交由代理端處理;代理端最後如何解析,仍取決於設定。

curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 -I https://example.com

3. outbounds:遠端節點與傳輸參數

出站決定「核心要從哪裡連線至目標」。freedom 代表直連,blackhole 用於阻擋連線,vmess 則需要遠端伺服器配合。入站可以是 SOCKS,出站可以是 VMess;兩者不必同名,因為它們位於連線流程的不同環節。

以下範例用來取代頂層的 outbounds。192.0.2.10 是文件專用的示範位址,UUID 與網域也僅用於說明結構,無法直接連線。實際使用時,位址、連接埠、使用者識別碼、傳輸方式與 TLS 參數都必須依據已獲授權的伺服器設定填寫,不能只替換其中一個欄位。

{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "192.0.2.10",
            "port": 443,
            "users": [
              {
                "id": "b43b4b90-a710-4ee4-883d-b8c574099d11",
                "alterId": 0,
                "security": "auto"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "proxy.example.net"
        }
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    }
  ]
}
欄位位置範例值檢查重點
settings.vnext[].address192.0.2.10遠端連線位址,不是本機監聽位址。
settings.vnext[].port443伺服器接收連線的連接埠,不是 10808。
users[].securityautoVMess 使用者的加密選項,不是 TLS 開關。
streamSettings.networktcp本例使用 TCP 傳輸;其他傳輸方式須搭配相應設定。
streamSettings.securitytls傳輸層安全方式,意義不同於協定內的 security。
tlsSettings.serverNameproxy.example.netTLS 服務名稱,必須與伺服器部署及憑證相符。

重點:先確認協定,再檢查傳輸設定

將 VMess 改為 VLESS,不能只修改 protocol。請先依使用中核心的設定規範檢查 settings,再確認 streamSettings;若 TLS 連線失敗,應檢查網域、憑證與系統時間,不要把停用憑證驗證當成一般解法。

v2rayNG 使用 Xray 核心,v2flyNG 使用 V2Fly 核心;v2rayN 可用的核心則依實際安裝與選擇而定。頂層結構相似,不代表擴充欄位完全相容,尤其是 VLESS 的特定安全組合。本文的 TCP 欄位寫法用於說明常見設定;實際欄位名稱與相容性,請依安裝的核心版本確認。

4. routing:規則順序、標籤引用與預設出口

路由並非將幾個網域分組後就會自動生效,而是依序比對規則。通常由第一條符合的規則決定出口;同一條規則中的不同條件必須全部符合,而同一條件陣列中的多個值則代表符合其中任一項即可。outboundTag 必須與現有出站的 tag 完全一致。

以下範例依賴上一節的 proxy、direct、block 三個出站。規則會先阻擋一個示範網域,再讓私有位址直連,最後將其他流量交給代理。兩個網域都只是規則範例,不代表建議實際造訪。

{
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "domain": ["full:blocked.example.org"],
        "outboundTag": "block"
      },
      {
        "type": "field",
        "ip": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": ["domain:example.org"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}
  1. full:blocked.example.org 只會比對這個完整網域。雖然它也是 example.org 的子網域,但由於阻擋規則排在前面,因此會優先阻擋。
  2. 私有網段規則會處理目標 IP 落在相應範圍內的請求。這並非完整列出所有特殊用途位址,也不會自動涵蓋 IPv6 本機位址。
  3. domain:example.org 會比對該網域及其子網域,不等同於比對任意包含該字串的內容。
  4. 最後的 network: "tcp,udp" 是本例的預設備援規則,必須放在具體規則之後,否則可能先攔截流量,導致前面的分流規則無法生效。

若沒有任何規則符合,通常會使用 outbounds 陣列中的第一個出站。第一節的第一個出站是 direct,第三節則改為 proxy,因此只調整陣列順序也可能改變預設行為。不能因為陣列中有代理節點,就認定所有請求都會經過代理。

5. dns、記錄與客戶端產生設定檔的界線

routing.domainStrategy 控制路由比對階段如何處理網域,不是 DNS 伺服器位址,也不是完整的 DNS 分流策略。AsIs 會盡量保留原始目標進行比對;IPIfNonMatch 會在網域規則未符合時嘗試解析,再繼續檢查 IP 規則;IPOnDemand 則可能在檢查 IP 規則時觸發解析。

以下範例只會新增內建 DNS 設定,不會自動變更作業系統的 DNS,也不保證每個應用程式的查詢都會進入核心。若應用程式在連線前已於本機完成解析,核心可能只會收到 IP;若透過代理協定傳送網域,最後由哪一端解析也可能取決於出站與伺服器設定。

{
  "dns": {
    "servers": ["localhost"]
  }
}

閱讀客戶端匯出的設定檔時,先找到 inbounds[].port、outbounds[].tag 和 routing.rules,再追查 DNS 與傳輸細節。不要直接刪除不熟悉的管理入口或附加欄位,它們可能供客戶端統計、控制介面或執行階段功能使用。分享記錄前,也應移除使用者識別碼、訂閱網址與伺服器資料。

6. 修改設定後的檢查順序與常見問題

修改前先保留一份可還原的設定,每次只調整一個部分。先驗證 JSON 與核心欄位,再確認連接埠監聽狀態,最後測試遠端連線與規則比對。以下檢查命令適用於提供相應命令列介面的較新版本核心;實際參數請以已安裝程式的說明輸出為準。若設定由客戶端管理,請使用它實際載入的檔案路徑。

xray run -test -config config.json
v2ray test -c config.json

測試命令成功,不代表節點一定可用。它主要用來確認目前的核心能否接受設定,不能取代遠端驗證、TLS 交握與目標連線測試。若核心能啟動,但應用程式仍無法連線,請依序檢查「本機入口、遠端出口、路由結果」,逐步縮小問題範圍。

出現 address already in use,應先更改哪個連接埠?

先確認被占用的是哪個入站連接埠。若記錄顯示為 10808,請關閉重複執行的核心,或將 inbounds 中的連接埠改為 10810,並同步修改應用程式的代理位址。不要因此修改遠端節點的 443 連接埠。

核心已啟動,但 curl 仍然連不上?

先使用第一節的直連設定與 socks5h 測試命令確認入口。若連本機連接埠都失敗,請檢查監聽位址、連接埠與代理協定;若請求已進入核心但逾時,則接著檢查遠端位址、驗證資訊與 TLS 記錄。

設定了 direct 規則,為什麼流量仍走 proxy?

確認規則順序、outboundTag 拼字,以及核心實際收到的是網域還是 IP。檢查預設備援規則是否排在前面,再確認目前程序載入的確實是修改過的檔案,而不是客戶端已重新產生另一份設定。

更新訂閱後,手動修改的 JSON 為什麼不見了?

客戶端可能會依據節點與全域設定重新產生執行設定檔。若要保留修改,請使用客戶端提供的路由、入站或自訂設定功能;若選擇自行管理完整 JSON,則須一併確認檔案路徑與核心啟動方式,避免兩套設定互相覆寫。

重點:每次修改都用一筆請求驗證

先固定本機入口 127.0.0.1:10808 與同一個測試目標,再分別驗證直連、代理與路由。每次重新載入後查看一次記錄,比同時修改連接埠、DNS 與傳輸參數更容易找出問題所在。

下載客戶端