本文重點

適合已匯入訂閱、但看不懂設定檔的讀者。先用一份只包含本機入口、直連與封鎖的完整範例串起請求流程,再說明連接埠、出站標籤、規則順序和 DNS 的作用範圍。範例不含遠端代理伺服器,不能取代訂閱;讀完後即可判斷該調整用戶端設定,還是檢查核心設定。

1. config.json 的五個主要區段

config.json 是核心讀取的設定檔,不是訂閱連結,也不是用戶端的所有設定。v2rayN 負責管理節點、訂閱群組和介面選項,再將目前選取的項目轉換成核心執行所需的設定。檔名相同,不代表 V2Ray 和 Xray 的所有欄位都能互通。

應用程式送出請求 本機入口 路由比對 選定出站 目標服務

不必按照檔案由上到下的順序閱讀。先找出 inbounds,確認請求從哪裡進入;接著查看 routing 如何選擇路徑,最後透過 outbounds 找到實際出口。log 可協助排除問題,dns 則提供核心需要時使用的網域解析設定。

頂層欄位主要用途優先確認
log設定記錄檔層級與輸出位置目前的層級是否會記錄錯誤訊息
inbounds接收瀏覽器等應用程式的連線監聽位址、連接埠和入口協定
outbounds定義直連、封鎖或遠端代理出口協定、標籤和伺服器參數
routing依規則將連線交由特定出站處理規則順序與目標標籤
dns設定內建 DNS 解析器解析器位址與實際呼叫條件

2. 完整範例:本機入口、直連與網域封鎖

以下使用 V2Ray 和 Xray 常見的傳統 JSON 欄位,方便對照理解。範例提供兩個僅供本機存取的入口:SOCKS 連接埠 10808 和 HTTP 連接埠 10809。連往 example.org 及其子網域的連線會被封鎖;其餘透過這兩個入口的連線則採直連。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": false
      }
    },
    {
      "tag": "local-http",
      "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",
        "domain": [
          "domain:example.org"
        ],
        "outboundTag": "block"
      },
      {
        "type": "field",
        "inboundTag": [
          "local-socks",
          "local-http"
        ],
        "outboundTag": "direct"
      }
    ]
  },
  "dns": {
    "servers": [
      "1.1.1.1"
    ]
  }
}
10808
範例 SOCKS 入口連接埠
10809
範例 HTTP 入口連接埠
2 條
依序比對的路由規則

這裡的連接埠是範例指定的值,不是所有用戶端版本的預設值。JSON 物件使用大括號,陣列使用方括號;鍵名和字串必須使用英文雙引號,最後一個成員後面不可加逗號。為了方便閱讀及比較不同核心,本範例不使用註解語法。

3. inbounds:監聽位址、連接埠與入口協定

inbounds 是陣列,因此同一個核心可以提供多個本機入口。listen 決定監聽哪個網路介面,port 決定應用程式要連線的連接埠,protocol 則決定應用程式應使用哪種代理協定。這三項要一起確認,不能只記連接埠號碼。

SOCKS 本機入口

tag
local-socks
listen
127.0.0.1
port
10808
protocol
socks
udp
false

應用程式需選用 SOCKS 代理;本範例不接收 SOCKS UDP 轉送。

HTTP 本機入口

tag
local-http
listen
127.0.0.1
port
10809
protocol
http
settings
{},使用預設設定

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

127.0.0.1 僅允許本機連線。改為 0.0.0.0 會監聽所有 IPv4 介面,可能讓區域網路中的其他裝置也能連上入口。本範例的 SOCKS 入口使用 noauth,因此不要只為了排除問題就擴大監聽範圍。

在 v2rayN 中,可至「設定」→「參數設定」尋找本機監聽連接埠相關選項,再從主視窗的「系統代理」選單選取「自動設定系統代理」。不同版本的介面可能會調整選項位置,請以目前畫面顯示的名稱和實際連接埠為準。

4. outbounds:出站協定與 tag 的對應關係

outbounds 也是陣列,但描述的是請求離開核心的方式。範例中的 freedom 代表直接連線至目標,blackhole 代表封鎖。direct 和 block 只是自訂標籤,並非協定名稱。

欄位或協定在範例中的用途修改時的限制
tag讓路由規則指定某個出站更名後須同步修改所有引用,並留意大小寫
freedom直接連線至目標位址它不是遠端代理,也不會提供代理伺服器
blackhole中止符合條件的連線它不是備用出口,也不會自動切換節點
settings承載目前協定所需的參數不同協定的設定內容不可直接套用

實際的代理出站還需要伺服器位址、連接埠、使用者識別資訊,以及與伺服器端相符的傳輸和安全性設定。VMess 與 VLESS 的使用者參數不同,TLS、REALITY、WebSocket 等設定也各有適用位置與條件。不能只把 "protocol": "freedom" 改成 "vless",就當作完成設定。

重點:先核對標籤,再檢查伺服器參數

當路由指向 proxy 時,先確認出站陣列中確實有 "tag": "proxy"。標籤引用正確後,再檢查節點參數;否則即使伺服器資訊完整,請求也不會正確送至預期的出站。

沒有符合規則的連線,通常會使用出站陣列中的第一個出站。這項預設行為不代表會自動切換以排除故障。範例將 direct 放在第一位,並用第二條規則明確處理兩個本機入口,方便看出比對結果。

5. routing:規則順序與網域比對

常見的 field 規則會依陣列順序逐一檢查;符合後便選擇相應出口,不會繼續尋找「更精確」的後續規則。範例先封鎖指定網域,再讓兩個入口的其他連線直連。若將這兩條規則對調,入口規則會先符合,網域封鎖就不會生效。

  1. 取得目標位址:應用程式透過入口提供網域或 IP 位址,核心據此進行路由判斷。
  2. 檢查第一條規則:domain:example.org 會比對該網域及其子網域;符合時選擇 block。
  3. 檢查第二條規則:若未符合第一條規則,來自 local-socks 或 local-http 的連線就會選擇 direct。
  4. 處理未符合規則的連線:如果還有其他入口,且沒有符合的規則,就依預設出站行為處理。

同一條規則中的不同條件通常必須同時符合;同一個條件陣列中的多個值通常代表符合其中任一項即可。例如在同一條規則中同時設定 inboundTag 和 domain,意思是「來自這些入口,而且目標網域符合條件」,不是兩個條件任選一個符合即可。

寫法比對範圍閱讀提示
domain:example.org該網域及其子網域適合用來分類整個網域範圍
full:example.org精確比對完整網域不會一併涵蓋所有子網域
inboundTag比對連線進入時的入站標籤不是伺服器名稱或訂閱群組名稱
outboundTag指定符合規則後使用的出站標籤必須對應到現有的出站

範例未設定流量嗅探。如果應用程式已將網域解析為 IP,並且只把 IP 傳給核心,網域規則就不一定會符合。此時應先確認應用程式是否將網域交給代理,而不是立刻擴大封鎖規則。網域分流也無法比對網址中的路徑,例如 /account 並非此處的網域條件。

6. dns:設定解析器不等於接管全系統 DNS

dns.servers 用來指定內建 DNS 使用的伺服器;範例中的 1.1.1.1 是明確指定的解析器位址。填入這個位址,不代表系統 DNS 已被修改,也不表示瀏覽器使用的加密 DNS 會經由此處;是否呼叫內建 DNS,取決於路由策略、出站設定和實際的請求類型。

這些值屬於 routing.domainStrategy,不要和某個出站自己的 domainStrategy 混為一談。路由決定「走哪個出口」,出站的解析策略則會影響「如何連線至目標」;名稱相似,但作用階段不同。

如果設定中出現 geoip: 或 geosite: 條件,也要確認執行環境具備相應的資料資源。本篇範例未使用這些條件,避免將資料檔案缺漏和 JSON 結構問題混為一談。

7. log 與安全調整:一次只改一個變數

範例的 loglevel 設為 warning,適合查看警告和錯誤,但不一定能看到每次連線的路由細節。需要追查問題時,可暫時改用 info;資訊更詳細的 debug 適合短時間診斷。記錄檔可能包含目標網域和位址,轉交他人前請先移除敏感內容。

  1. 確認設定來源:先判斷這是用戶端產生的執行檔,還是獨立管理的自訂設定。不要隨意編輯安裝目錄中名稱相似的檔案。
  2. 保存原始狀態:記下目前選取的節點、系統代理狀態和監聽連接埠,並保留原設定副本以便還原。
  3. 優先調整圖形介面設定:本機連接埠可在 v2rayN 的「設定」→「參數設定」調整;分流規則則到「設定」→「路由設定」檢查。實際選項名稱以所用版本為準。
  4. 每次只改一項:先調整連接埠並確認入口,再調整規則順序。不要同時修改 DNS、傳輸參數和出站標籤。
  5. 重新載入後查看第一個錯誤:先處理 JSON 解析、連接埠監聽或標籤引用錯誤,再判斷網路是否可連通。
  6. 恢復日常記錄層級:排查完成後,調回合適的層級,避免長期留下大量詳細連線記錄。

重點:從設定來源修改用戶端產生的檔案

如果手動編輯的 config.json 在切換節點後被還原,請先回到相應的用戶端設定,修改產生檔案的來源。只有在確認使用自訂設定且了解載入方式後,才直接維護整份 JSON。

v2rayN 是桌面用戶端;Android 端的 v2rayNG 使用 Xray 核心,v2flyNG 使用 V2Fly 核心。各用戶端的匯入方式和支援欄位有所不同。訂閱能夠匯入,只表示用戶端已完成解析,不代表其中每種協定組合都適用於目前使用的核心。

8. 設定錯誤與網頁無法開啟的排查順序

將問題分成「設定是否載入」、「應用程式是否經過代理」、「路由是否選對」和「出口是否連通」四個層面,通常比一再重新匯入訂閱更有效。以下現象可用來縮小排查範圍,不要只憑某一行記錄就認定伺服器故障。

現象優先檢查下一步處理
核心啟動後立即退出括號、逗號、欄位型別及第一個啟動錯誤還原最後一次修改,比較修改前後的設定
提示位址已被使用10808、10809 是否正由其他程序監聽關閉重複執行的實例,或在用戶端調整連接埠並同步修改應用程式設定
找不到目標出站outboundTag 是否與出站的 tag 完全一致修正引用,避免大小寫或拼字不一致
網域封鎖未生效規則順序、入口標籤,以及目標是否仍是網域先確認比對條件,不要直接改成封鎖所有流量
設定已載入,但網頁連線逾時應用程式的代理類型、目前的出口、目標解析和連線錯誤分開測試入口和出口,判斷是直連失敗還是遠端代理失敗

最後記住三個界線:入口連接埠不等於遠端伺服器連接埠;出站標籤不等於協定名稱;DNS 設定不等於接管系統流量。先釐清這三組概念,再閱讀實際的節點設定,複雜的傳輸參數就更容易放在正確的位置。