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

以一份可用的最小 config.json 為例,逐段說明 inbounds 入站、outbounds 出站與 routing 路由三大區塊的欄位意義與關聯,讀懂後修改設定不必再靠猜。

本文速覽

本文適合已經會匯入節點,但看到 config.json 仍不清楚請求如何流動的使用者。內容從本機 10808 連接埠開始,依序拆解入站、出站、路由、DNS 與日誌,並提供一份可通過語法檢查的 V2Ray 5 系列設定骨架;讀完後即可找出連接埠衝突、出站標籤填寫錯誤、規則順序不當等常見問題。

先看資料流:設定檔各部分如何協作

V2Ray 設定不是一組彼此獨立的開關。應用程式會先將請求交給某個入站,路由模組讀取目標網域、目標 IP、連接埠與入站標籤,再將請求送往指定出站。若沒有符合任何路由規則,V2Ray 通常會使用出站陣列中的第一項,因此 outbounds 的排列順序本身也會影響結果。

inbounds 負責處理「流量從哪裡進入」,outbounds 負責處理「流量從哪裡離開」,routing 則負責連接兩者。設定能啟動,只能證明 JSON 結構與欄位基本上可解析;是否能按照預期分流,還要檢查標籤引用、規則順序以及 DNS 回傳結果。

應用程式發起請求入站連接埠接收符合路由規則選擇出站標籤目標伺服器
10808
SOCKS 入站範例連接埠
10809
可選的 HTTP 入站連接埠
3 類
代理、直連、阻擋出站
由上而下
路由規則比對順序

最小設定骨架:從完整 JSON 開始拆解

以下範例採用一個本機 SOCKS 入站、一個 VMess 代理出站、一個直連出站與一個阻擋出站。伺服器網域、連接埠、使用者 ID 與傳輸方式僅作為結構示例,實際使用時必須逐項符合伺服器端參數。JSON 不允許註解,因此說明文字不能直接寫入正式設定檔。

{
  "log": {
    "loglevel": "warning"
  },
  "dns": {
    "servers": [
      "1.1.1.1",
      "localhost"
    ]
  },
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "server.example.com",
            "port": 443,
            "users": [
              {
                "id": "11111111-2222-3333-4444-555555555555",
                "security": "auto"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "none"
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom"
    },
    {
      "tag": "block",
      "protocol": "blackhole"
    }
  ],
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "protocol": [
          "bittorrent"
        ],
        "outboundTag": "block"
      },
      {
        "type": "field",
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:cn"
        ],
        "outboundTag": "direct"
      }
    ]
  }
}

這份設定會將未符合規則的請求交給第一個出站 proxy。私有位址、中國大陸網域與中國大陸 IP 則指向 direct,特定協定指向 block。如果將 direct 放在出站陣列第一項,卻沒有補充明確的代理規則,未符合規則的流量就會改為直連。

inbounds 入站:應用程式如何將流量交給核心

入站可以理解為 V2Ray 在本機開放的接收入口。範例監聽 127.0.0.1:10808,協定為 SOCKS。將瀏覽器、下載工具或系統代理的 SOCKS 位址設為此連接埠後,請求才會進入 V2Ray。只啟動核心,卻沒有讓應用程式指向入站連接埠,不會自動接管一般應用程式的流量。

settings.auth 設為 noauth,表示此 SOCKS 入口不要求使用者名稱與密碼,因此應維持本機監聽。udp: true 允許 SOCKS UDP 請求進入,但後續出站協定、伺服器與網路環境也必須支援相應處理;單獨啟用此欄位,不代表所有 UDP 流量都能正常通過。

SOCKS 入站

監聽位址
127.0.0.1
監聽連接埠
10808
協定
socks
UDP
true

適合支援 SOCKS5 設定的瀏覽器、命令列工具與桌面應用程式。

HTTP 入站

監聽位址
127.0.0.1
建議範例連接埠
10809
協定
http
用途
HTTP 代理入口

需要同時提供兩種入口時,應使用不同連接埠,以避免監聽衝突。

多個入站可以同時存在。例如保留 10808 作為 SOCKS,再增加 10809 作為 HTTP。每個入站都應設定獨立標籤,方便路由規則透過 inboundTag 區分來源。修改 v2rayN 的本機連接埠時,可前往「設定」→「參數設定」核對 SOCKS 與 HTTP 連接埠;應用程式中的代理連接埠也必須同步修改。

outbounds 出站:代理、直連與阻擋的職責

出站定義請求離開 V2Ray 的方式。代理出站通常包含伺服器位址、伺服器連接埠、使用者憑證與傳輸設定;直連出站使用 freedom;阻擋出站使用 blackhole。路由模組不會直接建立遠端連線,只會根據規則選出一個出站標籤。

VMess 範例中的 vnext 是伺服器清單,每台伺服器可以包含一組使用者。addressport 必須對應伺服器端的監聽資訊,id 必須是伺服器端認可的使用者識別碼。傳輸層還要核對 TCP、WebSocket、TLS 等設定;用戶端與伺服器端只要有一項不一致,就可能出現連線建立後立即中斷或持續逾時。

代理出站 proxy

協定
vmess
伺服器連接埠
443
範例傳輸方式
TCP
預設用途
未符合規則的流量

實際伺服器參數應來自有效的節點設定,不能只替換位址而保留其他範例值。

本機策略出站

direct
freedom
block
blackhole
連線至伺服器
不需要
選擇方式
routing 標籤

直連與阻擋也屬於出站,同樣需要唯一的 tag 供規則引用。

欄位 所在位置 作用 常見錯誤
protocol 出站物件 決定出站處理器類型 將 VMess 參數填入 VLESS 出站
settings 出站物件 儲存伺服器與使用者參數 連接埠、使用者識別碼與伺服器端不一致
streamSettings 出站物件 定義底層傳輸與安全層 TCP、WebSocket 或 TLS 設定不相符
tag 出站物件 供路由規則引用 規則引用了不存在的標籤

結論:先確認出站本身可用,再調整路由

暫時只保留一個代理出站並測試連線;確認伺服器參數可用後,再加入 direct、block 與 routing。否則節點錯誤與分流錯誤會同時出現,日誌很難判斷問題來源。

routing 路由:規則順序決定最終出口

routing.rules 是依序由上而下檢查的規則陣列。請求符合某條規則後,就會使用該規則指定的 outboundTag,後續規則不再處理該請求。因此範圍較窄、優先級較高的規則應放在前面,範圍較廣的規則則放在後面。

domainStrategy: IPIfNonMatch 表示先嘗試使用網域規則比對;網域規則未命中時,再解析 IP 並繼續檢查 IP 規則。此設定讓 geosite:cngeoip:cn 可以搭配使用,但也代表 DNS 結果會影響 IP 規則的判斷。

  1. 先處理需要明確阻擋的協定或目標,避免後面的寬泛直連規則提前接管。
  2. 接著處理 geoip:private,讓區域網路位址與私有位址直接連線。
  3. 之後比對 geosite:cn,依網域分類選擇直連。
  4. 網域未命中時,再使用 geoip:cn 檢查解析後的目標 IP。
  5. 其餘流量若沒有符合任何規則,就會落到出站陣列第一項 proxy
比對條件 範例值 目標出站 處理結果
protocol bittorrent block 交給阻擋出站
ip geoip:private direct 區域網路與私有位址直連
domain geosite:cn direct 符合分類中的網域後直連
ip geoip:cn direct 符合目標 IP 後直連

規則中的 outboundTag 不是協定名稱,而是某個出站物件的 tag。如果出站標籤叫做 proxy,規則卻寫成 Proxy,兩者不會被視為同一個標籤。刪除或重新命名出站時,也要搜尋整個檔案並更新所有引用。

結論:調整分流時一次只移動一條規則

先記錄目標網域與預期出口,再調整單條規則的位置並觀察日誌。整段複製新的規則集會同時改變網域、IP 與預設出口,發生異常時很難找出是哪一項造成。

DNS 與日誌:為什麼設定正確仍可能分流異常

DNS 不只是將網域轉換為 IP。啟用網域與 IP 混合比對時,解析結果也會參與路由判斷。範例將 1.1.1.1localhost 放入伺服器清單,表示可以使用指定 DNS,也可以交由本機解析器處理;在實際網路環境中,應根據可達性、解析結果與分流目標選擇合適方案。

loglevel 設為 warning 適合日常執行,可以看到警告與錯誤。排查規則時可暫時改為 info,取得更完整的執行資訊;確認問題後再恢復,避免日誌快速增長。JSON 字串必須使用雙引號,最後一個陣列項目或物件欄位後不能保留多餘逗號。

{
  "log": {
    "access": "access.log",
    "error": "error.log",
    "loglevel": "info"
  },
  "dns": {
    "hosts": {
      "domain:internal.example.com": "192.168.1.20"
    },
    "servers": [
      "1.1.1.1",
      "localhost"
    ]
  }
}

常見修改問題:從錯誤位置反推欄位

手動修改設定最容易出現三類問題:JSON 語法損壞、欄位層級放置錯誤、標籤關係中斷。語法錯誤通常會阻止核心啟動;欄位層級錯誤可能提示未知欄位;標籤錯誤則可能要等請求真正符合規則時才暴露。排查時應先驗證檔案,再檢查入口,最後確認請求走向。

修改連接埠後,瀏覽器立刻無法連線怎麼辦?

同時核對 config.json 的 inbounds.port 與瀏覽器代理連接埠。例如入站從 10808 改為 10818,但瀏覽器仍指向 10808,就無法將請求交給新的入口。

設定測試通過,為什麼所有流量都直連?

檢查 outbounds 第一項是否變成了 direct。未符合規則的請求會使用預設出站;若要預設走代理,應將可用的代理出站放在第一項,或加入明確涵蓋目標的代理規則。

加入 geosite 規則後,仍然沒有依網域分流?

先確認規則位於範圍更廣的 IP 規則之前,再檢查 domainStrategy。如果應用程式只提交目標 IP 而未提交網域,網域規則本身就無法取得原始網域資訊。

日誌提示找不到 proxy 出站,該如何處理?

outbounds 中搜尋 tag,確認確實存在值為 proxy 的物件。標籤區分大小寫,也不能在標籤前後加入空格。

v2rayN 匯入節點後,還需要手動撰寫完整 JSON 嗎?

通常不需要。v2rayN 會根據節點與參數設定產生執行設定。需要自訂本機連接埠時,前往「設定」→「參數設定」;只有使用自訂設定、複雜入站或特殊路由時,才需要逐段維護 JSON。

對 v2rayNG 與 v2flyNG 而言,訂閱或分享連結同樣會產生用戶端執行所需的設定。v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心,介面中的欄位名稱與可用傳輸能力可能因核心而異。不要將某個用戶端匯出的完整設定直接覆蓋到另一個核心環境,至少應先檢查協定、傳輸欄位與路由資源是否相容。

  1. 備份目前可正常運作的 config.json,並記錄本機入站連接埠。
  2. 每次只修改一個區塊,儲存後先執行設定測試。
  3. 啟動核心,確認 127.0.0.1:10808 已成功監聽。
  4. 使用單一目標測試代理出站,再測試直連規則與阻擋規則。
  5. 觀察日誌中的目標位址、比對結果與連線錯誤,確認後再繼續修改。
下載 V2Ray 用戶端 Windows、macOS、Android、Linux