本文適合已經會匯入節點,但看到 config.json 仍不清楚請求如何流動的使用者。內容從本機 10808 連接埠開始,依序拆解入站、出站、路由、DNS 與日誌,並提供一份可通過語法檢查的 V2Ray 5 系列設定骨架;讀完後即可找出連接埠衝突、出站標籤填寫錯誤、規則順序不當等常見問題。
先看資料流:設定檔各部分如何協作
V2Ray 設定不是一組彼此獨立的開關。應用程式會先將請求交給某個入站,路由模組讀取目標網域、目標 IP、連接埠與入站標籤,再將請求送往指定出站。若沒有符合任何路由規則,V2Ray 通常會使用出站陣列中的第一項,因此 outbounds 的排列順序本身也會影響結果。
inbounds 負責處理「流量從哪裡進入」,outbounds 負責處理「流量從哪裡離開」,routing 則負責連接兩者。設定能啟動,只能證明 JSON 結構與欄位基本上可解析;是否能按照預期分流,還要檢查標籤引用、規則順序以及 DNS 回傳結果。
最小設定骨架:從完整 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 放在出站陣列第一項,卻沒有補充明確的代理規則,未符合規則的流量就會改為直連。
tag是設定檔內部使用的名稱,可以自行命名,但所有引用處必須完全一致,且區分大小寫。listen設為127.0.0.1時,只接受本機連線,適合一般桌面代理入口。port是數字,不要寫成帶引號的文字;同一個位址上的連接埠不能被其他程式占用。streamSettings必須符合伺服器端的傳輸參數,不能只憑協定名稱推斷。
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 是伺服器清單,每台伺服器可以包含一組使用者。address 與 port 必須對應伺服器端的監聽資訊,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:cn 與 geoip:cn 可以搭配使用,但也代表 DNS 結果會影響 IP 規則的判斷。
- 先處理需要明確阻擋的協定或目標,避免後面的寬泛直連規則提前接管。
- 接著處理
geoip:private,讓區域網路位址與私有位址直接連線。 - 之後比對
geosite:cn,依網域分類選擇直連。 - 網域未命中時,再使用
geoip:cn檢查解析後的目標 IP。 - 其餘流量若沒有符合任何規則,就會落到出站陣列第一項
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.1 與 localhost 放入伺服器清單,表示可以使用指定 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"
]
}
}
- 出現
failed to listen類型的訊息時,優先檢查監聽位址與連接埠占用情況。 - 出現找不到出站標籤時,核對每個
outboundTag與出站tag。 - 連線至遠端伺服器逾時時,核對位址、連接埠、傳輸方式與目前網路的可達性。
- 網域直連結果不符合預期時,檢查規則順序、
domainStrategy與 DNS 回傳的位址。
常見修改問題:從錯誤位置反推欄位
手動修改設定最容易出現三類問題: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 核心,介面中的欄位名稱與可用傳輸能力可能因核心而異。不要將某個用戶端匯出的完整設定直接覆蓋到另一個核心環境,至少應先檢查協定、傳輸欄位與路由資源是否相容。
- 備份目前可正常運作的 config.json,並記錄本機入站連接埠。
- 每次只修改一個區塊,儲存後先執行設定測試。
- 啟動核心,確認 127.0.0.1:10808 已成功監聽。
- 使用單一目標測試代理出站,再測試直連規則與阻擋規則。
- 觀察日誌中的目標位址、比對結果與連線錯誤,確認後再繼續修改。