本文適合已接觸 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"]
}
}
這些連接埠是本文明確指定的設定值,並非所有用戶端版本的預設值。執行前請先關閉占用相同連接埠的代理程序,或一併修改 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,不應直接暴露在不受信任的網路中。
- 標籤不是固定關鍵字:
socks-in可以改名,但所有引用它的inboundTag也必須一併修改。 - 入口協定不等於節點協定:本機 SOCKS 入站可以連接 VMess 出站,也可以連接直連出站,兩端協定不必相同。
- UDP 不是全域開關:
udp: true只會啟用 SOCKS 入站的相關能力,不會讓一般 HTTP 入站變成 UDP 入口。
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 陣列中的多個網域條件則符合任一項即可。
- 應用程式連線至
127.0.0.1:10809,核心會將此連線標記為入站標籤http-in。 - 要求的目標是
example.com,符合full:example.com的完整網域條件。 - 符合第一條規則,透過
outboundTag: "block"找到對應的出站。 - 由
blackhole處理此連線;後續的私有網路規則不會再參與這次判斷。
full:example.com 只代表完整網域比對,不包含其子網域。若要同時比對主網域與子網域,可使用 domain:example.com。直接將一般字串寫入網域陣列時,其比對方式也不能簡單視為完整網域比對。
第二條規則列出三個 IPv4 私有網段,目標 IP 符合這些網段時會直連。由於範例使用 AsIs,路由不會為了比對 IP 條件而主動解析網域。因此,網域最後解析成私有位址,不代表一定會符合這條規則。範例預設也是直連,所以實際結果可能相同,但比對過程不同。
若要預設經由遠端節點連線,可以將有效的遠端出站放在陣列第一個位置,或在規則末尾加入明確的兜底規則。不要把兜底規則放在精確封鎖與私有網路直連規則之前,否則前面的寬泛條件會蓋過後續的細分規則。
6. dns 與 log:分別檢查解析策略與日誌
dns.servers 定義內建 DNS 使用的上游伺服器;範例中的 localhost 表示使用系統本機解析機制。這項設定不會自動修改作業系統 DNS,也不會自動接管其他應用程式的 DNS 要求。只有核心相關模組需要解析時,這些設定才會進入實際處理流程。
AsIs:路由保留原始目標形式,不會為了比對 IP 規則而主動將網域解析成 IP。IPIfNonMatch:網域未符合現有規則時,可嘗試解析網域並比對 IP 規則。IPOnDemand:比對過程遇到需要判斷 IP 的規則時,可觸發網域解析。
這些是路由層的策略,不等於出站連線時的解析策略。即使路由使用 AsIs,直連出站連線至網域目標時仍可能需要解析。如果應用程式一開始就把網域解析成 IP,核心也不一定能取得原始網域;本文測試使用 socks5h,就是為了讓 SOCKS 要求攜帶網域。
log.loglevel 設為 warning,適合先查看警告與錯誤。排查問題時可暫時改成 info,必要時再使用 debug。存取日誌與錯誤日誌各有輸出設定;提高日誌等級不代表會自動啟用完整存取紀錄。
"log": {
"access": "access.log",
"error": "error.log",
"loglevel": "info"
}
上方片段是用來替換完整設定中的 log 物件,並非可單獨執行的設定檔。相對日誌路徑通常以程序的工作目錄為基準;從用戶端啟動時,工作目錄未必與 JSON 檔案所在資料夾相同。排查完成後請恢復適當的日誌等級,分享日誌前也要移除伺服器位址、訂閱網址與帳號資訊。
7. 儲存、測試與驗證:一次只修改一個變數
先確認目前的核心能接受 JSON,再檢查連接埠,最後確認規則結果。設定測試通過只代表設定通過相應檢查,不代表執行時一定能繫結連接埠,也不代表能連上遠端伺服器。
-
儲存設定檔
在 Windows 11 檔案總管中選擇「檢視」→「顯示」→「副檔名」,確認檔名是
config.json,而不是config.json.txt。內容使用英文雙引號,不要加入註解或多餘的結尾逗號。 -
驗證欄位
將設定檔放在 Xray 執行檔所在的獨立測試資料夾,並在該資料夾開啟 PowerShell,執行下方的測試命令。若使用 V2Fly,請先查閱對應核心的命令說明,不要直接套用 Xray 參數。
-
啟動核心
先停止占用
10808、10809的其他代理程序,再執行啟動命令。保留終端機視窗,查看是否出現連接埠繫結失敗或欄位解析錯誤。 -
驗證規則
分別執行 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.org | direct | 未符合任何規則,使用第一個出站 |
| HTTP → example.com | block | 入站標籤與完整網域同時符合 |
| SOCKS → example.com | direct | 入站標籤不符,因此不會符合封鎖規則 |
直連測試能否收到網頁,仍取決於目前網路、系統解析與目標是否可連線。HTTP 封鎖要求應該會失敗,但錯誤訊息與耗時可能因連線階段而異。不能只憑一次逾時就斷定規則已命中;需一併檢查入站、目標網域、規則順序與日誌。
8. 常見設定錯誤:從錯誤位置回頭檢查欄位
設定問題可分為語法、結構、執行環境與連線參數四個層面。看到錯誤時先判斷所屬層面,避免把本機連接埠衝突誤認為節點故障,或把不支援的欄位當成網路不通。
- JSON 無法解析:檢查錯誤行附近的逗號、括號與引號。陣列最後一個元素後不能多加逗號,欄位名稱必須使用雙引號,也不要把說明文字直接貼進檔案。
- 未知協定或欄位:確認實際執行的核心及版本,並對照該核心的設定結構。不要只因另一份設定出現相同欄位,就認定目前的核心也支援。
- 連接埠繫結失敗:檢查
10808和10809是否已被占用。若修改連接埠,也要同步更新應用程式的代理設定與測試命令。 - 啟動成功但規則無效:確認應用程式確實進入指定的入站,再檢查網域是否仍以網域形式傳入、標籤是否一致,以及寬泛規則是否排在前面。
- 匯入後設定改變:先區分手動維護的完整設定與用戶端產生的設定。不要一邊修改產生的檔案,一邊又透過介面儲存同一組執行參數。
完整 JSON、單一出站物件、節點分享連結與訂閱網址是四種不同的輸入。完整設定包含本機入站與路由;訂閱通常是提供用戶端解析節點資訊。將整份 JSON 貼進訂閱網址欄位,或把訂閱網址當成出站伺服器位址,都不會自動轉換設定結構。