本文適合需要閱讀用戶端產生的設定檔,或排查連接埠與分流問題的使用者。先透過一份僅含本機入站、直連與封鎖出口的完整設定,掌握各欄位的對應關係,再了解遠端代理、規則順序與 DNS 的適用範圍。範例用於檢查設定檔結構,不含可連線的遠端代理節點;讀完即可判斷要求從哪裡進入、符合哪條規則,以及最後使用哪個出口。
1. config.json 頂層結構與要求流向
config.json 是常見的設定檔名稱,並非固定名稱。實際載入哪個檔案,取決於核心的啟動參數。本文採用 V2Ray 傳統 JSON 設定結構;V2Ray 與 Xray 共用部分欄位,但擴充功能與版本支援並不完全相同,不能直接將某個核心的新欄位複製到另一個核心。
inbounds 接收應用程式流量,outbounds 定義連線方式,routing 決定使用哪個出口。log 負責記錄執行資訊,dns 用來設定內建解析器。JSON 物件中這些頂層鍵的排列順序通常不影響執行,但路由規則陣列的順序會影響結果。
| 頂層欄位 | 資料類型 | 優先確認事項 |
|---|---|---|
log | 物件 | 是否能查看啟動錯誤與連線記錄 |
inbounds | 陣列 | 應用程式連線使用的協定、位址與連接埠是否一致 |
outbounds | 陣列 | 出口協定及相關參數是否完整 |
routing | 物件 | 規則順序是否與出口標籤相符 |
dns | 物件 | 哪些環節會實際呼叫內建解析器 |
以下設定可做為獨立核心的結構測試檔。它會在本機監聽兩個連接埠、封鎖 example.org 及其子網域,其餘要求預設直連。這份設定不會將流量送往遠端代理伺服器,也不會自動啟用系統代理。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "socks-in",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false
}
},
{
"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",
"domain": ["domain:example.org"],
"outboundTag": "block"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
}
]
},
"dns": {
"servers": ["1.1.1.1"]
}
}
2. log:讓設定錯誤更容易排查
loglevel 常用值包括 debug、info、warning、error 和 none。範例使用 warning,可減少日常輸出。排查啟動或連線問題時,可暫時改為 info;需要更詳細的內部記錄時,再使用 debug。
{
"log": {
"access": "access.log",
"error": "error.log",
"loglevel": "info"
}
}
這是頂層片段,應取代完整設定中的 log,而不是另外新增一個重複鍵。相對日誌路徑會依據程序的工作目錄解析,不一定位於設定檔旁。由用戶端啟動核心時,工作目錄、檔案寫入權限及日誌顯示方式可能不同,建議優先查看用戶端提供的執行日誌。
- 啟動後立即失敗:先檢查 JSON 解析錯誤、未知欄位或連接埠綁定失敗。
- 沒有應用程式要求記錄:先確認應用程式是否連到正確的入站,別急著修改遠端協定參數。
- 要求進入後連線失敗:接著檢查出口、目標位址、網域解析及網路連線狀況。
- 分享日誌前:請移除伺服器位址、使用者識別資訊、訂閱網址與瀏覽網域等敏感內容。
3. inbounds:監聽位址、連接埠與代理協定
inbounds 是陣列,可同時提供多個入口。每個入口的 protocol 決定如何解讀應用程式送來的資料。SOCKS 與 HTTP 代理是不同協定;即使都在本機監聽,應用程式選錯類型仍可能無法連線。
這些連接埠是本文明確指定的範例值,不代表所有版本用戶端的預設值。應用程式若設定 HTTP 代理,請填入位址 127.0.0.1 與連接埠 10809;若設定 SOCKS5 代理,則填入 127.0.0.1:10808。
SOCKS 本機入口
- 標籤
socks-in- 監聽
127.0.0.1:10808- 協定
socks- 驗證
noauth- UDP
false
本文僅示範本機 TCP 要求,不啟用 SOCKS UDP 轉送。
HTTP 本機入口
- 標籤
http-in- 監聽
127.0.0.1:10809- 協定
http- 設定
{}
供支援 HTTP 代理的應用程式使用;HTTPS 要求通常會透過 CONNECT 建立通道。
listen 設為迴送位址,代表只有本機可以連線。改成 0.0.0.0 會監聽所有 IPv4 網路介面,可能讓區域網路中的其他裝置連上入口。如需共用,應一併規劃驗證機制、防火牆與存取範圍,不能只改監聽位址。
tag是入口識別標籤,可供路由規則中的inboundTag引用。- 連接埠遭占用會導致啟動失敗。執行測試核心前,請先停止占用相同連接埠的用戶端。
- 系統代理只是應用程式連線方式之一。若應用程式忽略系統代理,仍可能直接連線至目標。
- 網域嗅探是另一項獨立設定。本文未啟用嗅探,因此不能假設核心總能從目標 IP 還原網域。
4. outbounds:出口協定與標籤的對應關係
outbounds 定義流量如何離開核心。範例中的 freedom 是直連出口,blackhole 是封鎖出口。direct 和 block 只是自行指定的標籤;標籤本身不會賦予出口功能,實際行為取決於 protocol 與相關設定。
| 出口標籤 | 協定 | 本文中的行為 |
|---|---|---|
direct | freedom | 直接連線至目標,並做為未符合規則時的預設出口 |
block | blackhole | 封鎖符合條件的要求,不連線至遠端代理 |
proxy | 由實際節點決定 | 本文未定義;加入完整代理出口後才能引用 |
這類設定中,未符合路由規則的要求預設會使用 outbounds 陣列中的第一個出口。本文將 direct 放在第一位,因此預設直連。若將第一個出口改為實際代理出口,未符合規則的流量也會改走該出口。
VMess 或 VLESS 出站需要實際的伺服器位址、連接埠、使用者識別資訊,以及與伺服器端一致的傳輸與安全參數。WebSocket 路徑、TLS 伺服器名稱等參數,不能只憑協定名稱推斷。若設定使用 Xray 擴充功能,也要確認核心支援範圍;並非所有 VLESS 設定都能通用於 V2Ray。
重點:先核對標籤,再調整節點參數
逐字比對每條規則的 outboundTag 與出口的 tag,並確認第一個出口符合預設流量策略;完成這兩項檢查後,再排查伺服器與傳輸設定。
5. routing:規則順序與 outboundTag
routing.rules 會依陣列順序逐條檢查,符合規則後便使用該規則指定的出口。若將範圍太廣的規則放在前面,後續較精確的規則可能沒有執行機會。同一條規則中的不同條件欄位通常必須同時符合;同一欄位陣列中的多個選項則通常符合任一項即可。
{
"type": "field",
"inboundTag": ["http-in"],
"domain": ["domain:example.org"],
"outboundTag": "block"
}
上方片段示範了條件組合:要求必須來自 http-in,且目標網域符合 example.org 或其子網域,才會走 block。若只想限制單一特定網域,應使用 full:example.org,而非網域後綴比對。
- 先列出實際使用的出口標籤,例如本文中的
direct、block。 - 先將需要優先處理的精確規則放在前面,再加入範圍較廣的規則。
- 逐條核對
outboundTag;拼字、大小寫與連字號都必須與出口標籤一致。 - 確認入口收到的是網域還是 IP。目標資訊不同,能符合的規則也可能不同。
- 明確設定未符合規則的流量走第一個出口,別以為「沒有符合規則」就會自動封鎖。
| domainStrategy | 路由處理方式 | 使用時注意事項 |
|---|---|---|
AsIs | 使用現有的目標資訊,不為路由比對主動解析網域 | 目標原本是 IP 時,仍可符合 IP 規則 |
IPIfNonMatch | 網域未符合規則時,嘗試解析後再比對 IP 規則 | 可能增加解析步驟,結果會受 DNS 回傳位址影響 |
IPOnDemand | 遇到需要 IP 判斷的規則時才會觸發解析 | 須搭配規則順序理解解析時機 |
本文使用 AsIs。因此,應用程式提交私有 IP 時可以符合 geoip:private;若應用程式提交的網域最後解析為私有位址,這條 IP 規則則不一定會符合。路由層不主動解析,不代表實際建立連線時完全不需要解析。
6. dns:內建解析器不等於系統 DNS
dns.servers 用來指定核心內建解析器使用的伺服器。本文以 1.1.1.1 做為傳統 DNS 位址範例,這不代表已啟用加密 DNS,也不保證目前的網路可以連線。請依實際網路環境選擇解析方式,並確認查詢要求能送達目標解析器。
- 作業系統、瀏覽器與核心可能各自進行解析。填寫
dns不會自動取代系統中的所有 DNS 要求。 - 路由採用需要解析的策略時,內建 DNS 可參與網域轉換為 IP 的比對流程。
freedom出站有自己的domainStrategy,其預設行為與主動呼叫內建 DNS 的策略不同。- 網域交由遠端代理處理時,解析位置也會受到出站協定及目標表示方式影響。
例如,若要讓直連出口主動透過內建 DNS 取得 IPv4 位址,確認核心支援後,可將該出口的設定改為以下片段。這是出站設定,不是路由設定;兩處雖然都使用 domainStrategy,作用範圍卻不同。
{
"tag": "direct",
"protocol": "freedom",
"settings": {
"domainStrategy": "UseIPv4"
}
}
7. 設定驗證與用戶端使用注意事項
先驗證語法,再啟動監聽,最後檢查要求的流向。一般 JSON 不允許註解與尾隨逗號;複製片段時應取代對應物件,避免留下兩個同名頂層鍵。有些載入器能接受擴充語法,不代表其他核心或用戶端也能處理。
- 先備份原始設定,並確認目前操作的是實際載入的檔案。
- 使用目前核心提供的設定測試指令,先處理欄位錯誤與資源檔錯誤。
- 停止占用
10808、10809的程序,再啟動測試核心。 - 明確指定代理連接埠發出要求,不依賴系統代理是否已啟用。
- 確認封鎖網域與一般目標的測試結果,再逐步加入實際代理出口與複雜規則。
V2Ray 5 系列常用以下指令測試傳統 JSON 設定。不同發行版本的可執行檔位置可能不同;請先執行 v2ray help 確認子指令。舊版使用的 -test -config 參數格式,請勿與新版子指令混用。
v2ray test -c config.json
v2ray run -c config.json
核心正常啟動後,可使用支援代理的要求工具檢查連線路徑。以下兩個指令都會連線至本文設定的封鎖網域,預期結果是要求失敗或連線遭關閉;這是用來確認規則生效,不是測試連線是否成功。第二個指令中的 socks5h 會將網域交由代理端處理,有助於保留網域比對條件。
curl --max-time 10 --proxy http://127.0.0.1:10809 http://example.org/
curl --max-time 10 --proxy socks5h://127.0.0.1:10808 http://example.org/
v2rayN 是桌面用戶端,會依據節點、路由與設定產生核心執行設定;切換節點或重新啟動時,產生的檔案可能遭到覆寫。v2rayNG 使用 Xray 核心,v2flyNG 使用 V2Fly 核心。閱讀這些用戶端的執行設定,有助於了解同類欄位;不過自訂 JSON 是否能匯入、能否與介面設定並存,仍須以該用戶端的實際版本為準。
修改 config.json 後,為什麼用戶端流量沒有改變?
先確認修改的是目前程序載入的檔案,而非過去匯出的檔案。接著檢查用戶端是否重新產生設定、核心是否重新啟動,以及應用程式是否經過對應的入站。訂閱中的節點參數、用戶端路由預設值與完整核心設定屬於不同層級,修改其中一層不一定會影響其他層。
設定測試通過,是否代表代理節點一定可用?
設定測試主要確認設定檔能否載入,無法證明遠端伺服器正常運作,也不能保證使用者識別資訊、傳輸路徑與 TLS 參數都與伺服器端一致。本文範例不含遠端代理出口;要實際驗證節點,必須加入完整出站,並透過實際要求檢查連線結果。
只有網域分流失效,該從哪裡開始檢查?
先查看應用程式交給入站的是網域還是已解析的 IP,再核對 domain: 與 full: 的比對範圍,最後檢查規則順序與 domainStrategy。尚未確認目標資訊前,別同時修改 DNS、嗅探與所有出口參數。