V2Ray 設定檔 JSON 結構解析:inbounds、outbounds 與 routing 詳解

以最小可執行設定檔,說明 log、inbounds、outbounds、routing、dns 欄位用途,以及 tag 如何串起入站、出站與分流規則。

本文重點

本文適合已接觸 v2rayN、想看懂核心執行設定的使用者。先執行只有本機入站、直連與封鎖出站的 JSON,再依序檢查「應用程式 → 入站 → 路由 → 出站」各欄位。範例不需要遠端節點,可用來確認監聽連接埠、標籤引用與規則順序;接上 VMess 或 VLESS 時,再依伺服器參數替換出站設定。

1. 設定流程:先釐清用戶端、核心與 JSON

inbounds 負責接收應用程式傳來的流量,outbounds 負責將流量送往目標或遠端伺服器,routing 則在兩者之間選擇出站。JSON 是設定格式,不是節點協定;副檔名相同,也不代表不同核心可以直接互換整份設定。

v2rayN 是桌面用戶端,提供訂閱管理、伺服器編輯與路由設定介面;實際監聽連接埠並處理連線的是所選核心。Android 版 v2rayNG 使用 Xray 核心,v2flyNG 使用 V2Fly 核心。排查欄位相容性時,應先確認實際啟動的核心,而不是只看用戶端名稱。

兩種設定方式:介面產生與手動維護

由用戶端產生設定
  • 透過訂閱或伺服器編輯視窗填入節點參數。
  • 用戶端組合本機連接埠、DNS 與路由規則後,交由核心使用。
  • 切換伺服器或重新啟動核心時,產生的檔案可能遭到覆寫。
獨立 JSON 設定檔
  • 手動維護完整的入站、出站與標籤引用。
  • 先在獨立資料夾中使用核心命令驗證設定。
  • 匯入用戶端前,先確認它如何處理自訂設定。

學習設定結構時先使用獨立檔案;日常訂閱節點則優先從用戶端的對應設定介面修改,避免編輯暫存產生的檔案。

下文採用 V2Ray 傳統 JSON 設定結構中的基本欄位,並以 Xray 命令示範驗證方式。V2Fly 不同主版本可能有設定格式與命令差異;尤其 TLS、REALITY、傳輸層設定,不應直接跨核心照搬。

2. 最小可執行設定:兩個入站、兩個出站

將以下內容存成 UTF-8 編碼的 config.json。此設定會在本機開啟 SOCKS 與 HTTP 代理連接埠,正常流量直接連線;只有從 HTTP 入站進入,且目標網域為 example.com 的要求會遭到封鎖。此處的「代理連接埠」是本機接入方式,不代表連線會經過遠端代理伺服器。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "socks-in",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    },
    {
      "tag": "http-in",
      "listen": "127.0.0.1",
      "port": 10809,
      "protocol": "http",
      "settings": {}
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    }
  ],
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "inboundTag": ["http-in"],
        "domain": ["full:example.com"],
        "outboundTag": "block"
      },
      {
        "type": "field",
        "ip": [
          "10.0.0.0/8",
          "172.16.0.0/12",
          "192.168.0.0/16"
        ],
        "outboundTag": "direct"
      }
    ]
  },
  "dns": {
    "servers": ["localhost"]
  }
}
10808
範例 SOCKS 入站連接埠
10809
範例 HTTP 入站連接埠
2 條
依陣列順序比對的路由規則

這些連接埠是本文明確指定的設定值,並非所有用戶端版本的預設值。執行前請先關閉占用相同連接埠的代理程序,或一併修改 JSON 與測試命令中的連接埠。範例不會啟用系統代理或 TUN,只有明確指定這些連接埠的應用程式要求才會進入核心。

3. inbounds:監聽位址、連接埠與入站標籤

inbounds 是一個陣列,每個物件代表一組入口。listen 決定接受哪個本機位址的連線,port 決定監聽連接埠,protocol 則決定應用程式與核心之間使用的協定。應用程式選錯協定時,即使連得上連接埠,也無法正常轉送要求。

SOCKS 入口

tag
socks-in
listen
127.0.0.1
port
10808
protocol
socks
udp
true

應用程式選擇 SOCKS5;是否使用 UDP,也取決於應用程式本身與後續出站的支援能力。

HTTP 入口

tag
http-in
listen
127.0.0.1
port
10809
protocol
http
settings
{}

應用程式選擇 HTTP 代理;連線至 HTTPS 目標時,通常會透過 HTTP CONNECT 建立通道。

127.0.0.1 僅允許本機存取。改成 0.0.0.0 會擴大 IPv4 監聽範圍,不能當成一般的相容性修正。尤其範例 SOCKS 入口使用 noauth,不應直接暴露在不受信任的網路中。

4. outbounds:預設出站與遠端節點的差異

outbounds 定義可用的出口。範例中的 direct 使用 freedom,直接連線至目標;block 使用 blackhole,丟棄符合條件的連線。沒有規則符合時,一般路由會使用出站陣列中的第一個出站,因此此例預設為直連。

欄位或協定用途設定要點
tag供路由引用的出站名稱使用唯一且易於辨識的名稱
freedom直接連線至目標位址不需要遠端伺服器帳號
blackhole封鎖連線測試時預期要求會失敗
vmess連線至 VMess 伺服器確認位址、連接埠、使用者參數與傳輸設定
vless連線至 VLESS 伺服器確認使用者參數、加密欄位與安全層設定

接入遠端節點不能只把 protocol 改成 vless。協定對應的 settings、傳輸層 streamSettings 與伺服器設定都必須相互配合。位址、連接埠、UUID、傳輸類型、TLS 伺服器名稱,以及必要時的 flow,各自負責不同功能。

VMess 與 VLESS 也不是「加密強度」選項。尤其 VLESS 本身不會為應用程式流量提供傳輸加密,必須搭配伺服器要求的 TLS 或其他安全層。REALITY 是 Xray 的相關功能,不能把對應欄位直接放進 V2Fly 設定並期待正常運作。

先保留直連範例

建議

先確認本機連接埠、JSON 格式與路由標籤,再一次替換一組出站參數。如此可分辨是本機設定錯誤,還是遠端連線問題。

適用情境:初次閱讀設定、找出啟動失敗原因、確認規則順序。

使用有效的節點出站

從已確認可用的節點設定取得完整出站物件,保留伺服器要求的傳輸與安全參數,再調整本機標籤引用。

適用情境:已有可用節點,並想在現有設定中加入分流。

5. routing:tag 如何串起完整連線

routing.rules 會由上而下逐一檢查,第一條符合的規則決定目前連線的路由結果。範例第一條規則同時包含 inboundTag 與 domain,兩類條件必須同時成立;同一個 domain 陣列中的多個網域條件則符合任一項即可。

  1. 應用程式連線至 127.0.0.1:10809,核心會將此連線標記為入站標籤 http-in。
  2. 要求的目標是 example.com,符合 full:example.com 的完整網域條件。
  3. 符合第一條規則,透過 outboundTag: "block" 找到對應的出站。
  4. 由 blackhole 處理此連線;後續的私有網路規則不會再參與這次判斷。

full:example.com 只代表完整網域比對,不包含其子網域。若要同時比對主網域與子網域,可使用 domain:example.com。直接將一般字串寫入網域陣列時,其比對方式也不能簡單視為完整網域比對。

第二條規則列出三個 IPv4 私有網段,目標 IP 符合這些網段時會直連。由於範例使用 AsIs,路由不會為了比對 IP 條件而主動解析網域。因此,網域最後解析成私有位址,不代表一定會符合這條規則。範例預設也是直連,所以實際結果可能相同,但比對過程不同。

若要預設經由遠端節點連線,可以將有效的遠端出站放在陣列第一個位置,或在規則末尾加入明確的兜底規則。不要把兜底規則放在精確封鎖與私有網路直連規則之前,否則前面的寬泛條件會蓋過後續的細分規則。

6. dns 與 log:分別檢查解析策略與日誌

dns.servers 定義內建 DNS 使用的上游伺服器;範例中的 localhost 表示使用系統本機解析機制。這項設定不會自動修改作業系統 DNS,也不會自動接管其他應用程式的 DNS 要求。只有核心相關模組需要解析時,這些設定才會進入實際處理流程。

這些是路由層的策略,不等於出站連線時的解析策略。即使路由使用 AsIs,直連出站連線至網域目標時仍可能需要解析。如果應用程式一開始就把網域解析成 IP,核心也不一定能取得原始網域;本文測試使用 socks5h,就是為了讓 SOCKS 要求攜帶網域。

log.loglevel 設為 warning,適合先查看警告與錯誤。排查問題時可暫時改成 info,必要時再使用 debug。存取日誌與錯誤日誌各有輸出設定;提高日誌等級不代表會自動啟用完整存取紀錄。

"log": {
  "access": "access.log",
  "error": "error.log",
  "loglevel": "info"
}

上方片段是用來替換完整設定中的 log 物件,並非可單獨執行的設定檔。相對日誌路徑通常以程序的工作目錄為基準;從用戶端啟動時,工作目錄未必與 JSON 檔案所在資料夾相同。排查完成後請恢復適當的日誌等級,分享日誌前也要移除伺服器位址、訂閱網址與帳號資訊。

7. 儲存、測試與驗證:一次只修改一個變數

先確認目前的核心能接受 JSON,再檢查連接埠,最後確認規則結果。設定測試通過只代表設定通過相應檢查,不代表執行時一定能繫結連接埠,也不代表能連上遠端伺服器。

  1. 儲存設定檔

    在 Windows 11 檔案總管中選擇「檢視」→「顯示」→「副檔名」,確認檔名是 config.json,而不是 config.json.txt。內容使用英文雙引號,不要加入註解或多餘的結尾逗號。

  2. 驗證欄位

    將設定檔放在 Xray 執行檔所在的獨立測試資料夾,並在該資料夾開啟 PowerShell,執行下方的測試命令。若使用 V2Fly,請先查閱對應核心的命令說明,不要直接套用 Xray 參數。

  3. 啟動核心

    先停止占用 10808、10809 的其他代理程序,再執行啟動命令。保留終端機視窗,查看是否出現連接埠繫結失敗或欄位解析錯誤。

  4. 驗證規則

    分別執行 SOCKS 與 HTTP 測試。先確認一般網站可以連線,再比較 example.com 經由兩個入站時的結果。測試完成後,在核心終端機按 Ctrl+C 停止程序。

.\xray.exe run -test -config .\config.json

.\xray.exe run -config .\config.json

讓核心持續執行,並在另一個 PowerShell 視窗執行下列命令。明確使用 curl.exe,避免部分環境將 curl 解讀為其他命令。每條命令都設有 15 秒逾時,只用來限制等待時間,並非效能測試。

curl.exe --max-time 15 --proxy socks5h://127.0.0.1:10808 https://example.org/

curl.exe --max-time 15 --proxy http://127.0.0.1:10809 https://example.com/

curl.exe --max-time 15 --proxy socks5h://127.0.0.1:10808 https://example.com/
測試要求預期路由判斷依據
SOCKS → example.orgdirect未符合任何規則,使用第一個出站
HTTP → example.comblock入站標籤與完整網域同時符合
SOCKS → example.comdirect入站標籤不符,因此不會符合封鎖規則

直連測試能否收到網頁,仍取決於目前網路、系統解析與目標是否可連線。HTTP 封鎖要求應該會失敗,但錯誤訊息與耗時可能因連線階段而異。不能只憑一次逾時就斷定規則已命中;需一併檢查入站、目標網域、規則順序與日誌。

8. 常見設定錯誤:從錯誤位置回頭檢查欄位

設定問題可分為語法、結構、執行環境與連線參數四個層面。看到錯誤時先判斷所屬層面,避免把本機連接埠衝突誤認為節點故障,或把不支援的欄位當成網路不通。

完整 JSON、單一出站物件、節點分享連結與訂閱網址是四種不同的輸入。完整設定包含本機入站與路由;訂閱通常是提供用戶端解析節點資訊。將整份 JSON 貼進訂閱網址欄位,或把訂閱網址當成出站伺服器位址,都不會自動轉換設定結構。

v2rayN 下載入口