適合已匯入訂閱、但看不懂設定檔的讀者。先用一份只包含本機入口、直連與封鎖的完整範例串起請求流程,再說明連接埠、出站標籤、規則順序和 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"
]
}
}
這裡的連接埠是範例指定的值,不是所有用戶端版本的預設值。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,因此不要只為了排除問題就擴大監聽範圍。
- 應用程式無法連上入口:先核對應用程式中的代理類型和連接埠,不要把 HTTP 代理設定到 SOCKS 連接埠。
- 核心提示連接埠已被占用:確認是否同時執行了兩個用戶端,或先前的核心程序尚未結束。
- 瀏覽器沒有使用代理:確認系統代理或瀏覽器內的代理設定是否已啟用。核心啟動後,不會自動改變所有應用程式的網路連線路徑。
在 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 規則會依陣列順序逐一檢查;符合後便選擇相應出口,不會繼續尋找「更精確」的後續規則。範例先封鎖指定網域,再讓兩個入口的其他連線直連。若將這兩條規則對調,入口規則會先符合,網域封鎖就不會生效。
- 取得目標位址:應用程式透過入口提供網域或 IP 位址,核心據此進行路由判斷。
- 檢查第一條規則:
domain:example.org會比對該網域及其子網域;符合時選擇block。 - 檢查第二條規則:若未符合第一條規則,來自
local-socks或local-http的連線就會選擇direct。 - 處理未符合規則的連線:如果還有其他入口,且沒有符合的規則,就依預設出站行為處理。
同一條規則中的不同條件通常必須同時符合;同一個條件陣列中的多個值通常代表符合其中任一項即可。例如在同一條規則中同時設定 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,取決於路由策略、出站設定和實際的請求類型。
AsIs:路由階段使用現有的目標資訊,不會為了 IP 規則主動解析網域。範例採用此值,方便觀察網域規則。IPIfNonMatch:網域規則未符合時,可解析目標網域,再嘗試比對 IP 規則。IPOnDemand:比對過程遇到需要 IP 的規則時,可觸發網域解析。
這些值屬於 routing.domainStrategy,不要和某個出站自己的 domainStrategy 混為一談。路由決定「走哪個出口」,出站的解析策略則會影響「如何連線至目標」;名稱相似,但作用階段不同。
如果設定中出現 geoip: 或 geosite: 條件,也要確認執行環境具備相應的資料資源。本篇範例未使用這些條件,避免將資料檔案缺漏和 JSON 結構問題混為一談。
7. log 與安全調整:一次只改一個變數
範例的 loglevel 設為 warning,適合查看警告和錯誤,但不一定能看到每次連線的路由細節。需要追查問題時,可暫時改用 info;資訊更詳細的 debug 適合短時間診斷。記錄檔可能包含目標網域和位址,轉交他人前請先移除敏感內容。
- 確認設定來源:先判斷這是用戶端產生的執行檔,還是獨立管理的自訂設定。不要隨意編輯安裝目錄中名稱相似的檔案。
- 保存原始狀態:記下目前選取的節點、系統代理狀態和監聽連接埠,並保留原設定副本以便還原。
- 優先調整圖形介面設定:本機連接埠可在 v2rayN 的「設定」→「參數設定」調整;分流規則則到「設定」→「路由設定」檢查。實際選項名稱以所用版本為準。
- 每次只改一項:先調整連接埠並確認入口,再調整規則順序。不要同時修改 DNS、傳輸參數和出站標籤。
- 重新載入後查看第一個錯誤:先處理 JSON 解析、連接埠監聽或標籤引用錯誤,再判斷網路是否可連通。
- 恢復日常記錄層級:排查完成後,調回合適的層級,避免長期留下大量詳細連線記錄。
重點:從設定來源修改用戶端產生的檔案
如果手動編輯的 config.json 在切換節點後被還原,請先回到相應的用戶端設定,修改產生檔案的來源。只有在確認使用自訂設定且了解載入方式後,才直接維護整份 JSON。
v2rayN 是桌面用戶端;Android 端的 v2rayNG 使用 Xray 核心,v2flyNG 使用 V2Fly 核心。各用戶端的匯入方式和支援欄位有所不同。訂閱能夠匯入,只表示用戶端已完成解析,不代表其中每種協定組合都適用於目前使用的核心。
8. 設定錯誤與網頁無法開啟的排查順序
將問題分成「設定是否載入」、「應用程式是否經過代理」、「路由是否選對」和「出口是否連通」四個層面,通常比一再重新匯入訂閱更有效。以下現象可用來縮小排查範圍,不要只憑某一行記錄就認定伺服器故障。
| 現象 | 優先檢查 | 下一步處理 |
|---|---|---|
| 核心啟動後立即退出 | 括號、逗號、欄位型別及第一個啟動錯誤 | 還原最後一次修改,比較修改前後的設定 |
| 提示位址已被使用 | 10808、10809 是否正由其他程序監聽 | 關閉重複執行的實例,或在用戶端調整連接埠並同步修改應用程式設定 |
| 找不到目標出站 | outboundTag 是否與出站的 tag 完全一致 | 修正引用,避免大小寫或拼字不一致 |
| 網域封鎖未生效 | 規則順序、入口標籤,以及目標是否仍是網域 | 先確認比對條件,不要直接改成封鎖所有流量 |
| 設定已載入,但網頁連線逾時 | 應用程式的代理類型、目前的出口、目標解析和連線錯誤 | 分開測試入口和出口,判斷是直連失敗還是遠端代理失敗 |
最後記住三個界線:入口連接埠不等於遠端伺服器連接埠;出站標籤不等於協定名稱;DNS 設定不等於接管系統流量。先釐清這三組概念,再閱讀實際的節點設定,複雜的傳輸參數就更容易放在正確的位置。