2026-08-24 · 故障排除 · 約 8 分鐘

v2rayNG 核心啟動失敗怎麼辦?從日誌找出 config 設定錯誤

開啟用戶端日誌,依序檢查 JSON 語法錯誤、欄位拼寫、inbound 衝突與 outbound 參數缺漏,快速找出設定出錯的位置。

本文重點

適用於 v2rayNG 點選啟動後立即停止、提示載入設定失敗,或匯入自訂 config 後無法執行的情況。先保留一份完整的啟動日誌,再依序檢查解析、欄位、監聽與出站設定。一般訂閱節點優先在編輯頁面修正欄位;只有自訂設定才需要直接檢查 JSON,不必一開始就重新安裝用戶端。

先開啟日誌,分辨啟動失敗與連線失敗

在 v2rayNG 主畫面開啟左上角側邊選單,進入「日誌」。先停止服務並清除舊日誌,再回到主畫面選取出錯的節點並啟動一次;接著返回「日誌」,保留這次啟動的完整紀錄。不同版本的入口位置可能不同,請以介面中的「日誌」項目為準。不要只截取最後一行「啟動失敗」,真正的原因往往就在上方。

  1. 備份原始設定

    記下目前的節點名稱與設定類型。手動維護的 JSON 請先另存副本;訂閱節點則記下所屬群組,避免後續更新覆蓋暫時修改的內容。

  2. 記錄環境資訊

    在側邊選單的「關於」頁面記下用戶端版本;如果啟動日誌有顯示 Xray 版本,也一併記錄。用戶端版本與核心版本是不同的編號。

  3. 單次重現問題

    停止服務並清除日誌後,只啟動一次。若出現 Android VPN 授權提示,請先確認授權,避免將取消授權誤判為設定錯誤。

  4. 追查錯誤原因

    從 failed to load config 或 failed to start 開始往下讀。若有多層原因,繼續找出具體欄位、連接埠或 JSON 解析提示。

如果日誌已進入接收要求的階段,之後才出現 connection refused、i/o timeout 或憑證交握錯誤,通常是連線階段的問題,不代表核心未啟動。此時反覆調整 JSON 標點,無法解決遠端連接埠無法連線或憑證不相符的問題。

設定解析參數建構本機監聽要求路由遠端連線

前三個階段失敗,優先檢查本文提到的設定與連接埠;後兩個階段失敗,再檢查路由、DNS、節點連線狀態與 TLS。日誌用語會隨 Xray 版本變動,以下列出的是常見錯誤片段,不必與整行文字完全相同。

第一類:JSON 語法錯誤,先檢查括號與資料型別

剛貼上自訂設定就無法啟動,請先檢查 JSON。物件的鍵必須使用英文雙引號,字串也必須使用雙引號;物件或陣列最後一個項目後不要多加逗號。為避免解析器差異,排查時請使用不含註解的標準 JSON。

錯誤:invalid character '}' looking for beginning of object key string

原因:物件結尾前可能多了一個逗號,解析器仍在等待下一個鍵。解法:檢查錯誤位置前一個項目,移除末尾逗號,並確認沒有多寫成對的大括號。

錯誤:unexpected EOF

原因:物件、陣列或字串尚未結束,內容就已遭截斷。解法:重新確認複製範圍,補上真正缺少的內容,而不是只在檔案結尾機械式地加上括號。

錯誤:cannot unmarshal string into Go struct field

原因:欄位型別與核心預期不符。解法:連同後方的欄位路徑一起查看,依欄位要求改為數字、布林值、陣列或物件。

以下是用來說明語法的局部物件,不是可直接匯入的完整代理設定。port 使用數字,listen 使用字串,最後一個項目後不加逗號。發現型別錯誤時,請逐一修正欄位,不要把所有數字都改成字串。

{
  "listen": "127.0.0.1",
  "port": 10808,
  "protocol": "socks"
}

第二類:欄位拼寫錯誤,JSON 合法不代表設定有效

語法檢查通過後,請確認欄位名稱、層級與列舉值。頂層通常是 inbounds 和 outbounds 兩個陣列,而不是單數形式;傳輸設定使用 streamSettings,其中 network 的值也必須是核心支援的名稱。鍵名的大小寫不可任意更改。

錯誤:unknown transport protocol: websoket

原因:傳輸協定名稱不是可辨識的列舉值。解法:依伺服器端要求修正 streamSettings.network;伺服器端使用 WebSocket 時,應填入 ws。

請留意:解析器可能會忽略部分未知欄位,而不會直接回報「欄位拼錯」。因此,「沒有語法錯誤」不代表參數已生效。一般節點請回到主畫面,開啟該節點的編輯頁面,逐項檢查位址、連接埠、協定與傳輸設定;不要只為了修正一個欄位,就把整個節點改成自訂 JSON。

第三類:inbound 監聽衝突,檢查位址與連接埠

日誌出現 bind: address already in use,代表本機監聽端點已被占用。這是裝置上的連接埠衝突,不是節點伺服器拒絕連線。請先停止其他代理服務,再檢查自訂設定中是否重複宣告相同的監聽位址、連接埠與傳輸協定。

10808
範例:發生衝突的本機 TCP 連接埠
10818
範例:確認未被占用後可嘗試的替代連接埠
1–65535
連接埠數值範圍;本機手動監聽通常選用較高的連接埠

這些數字僅用來說明排查方式,不代表所有版本的預設值。一般設定可在側邊選單的「設定」中尋找本機 SOCKS 連接埠選項,修改後停止並重新啟動服務;實際名稱以目前版本為準。自訂 JSON 則請檢查實際 inbounds 中的 listen 和 port,不要假設通用設定會覆蓋自訂設定。

錯誤:listen tcp 127.0.0.1:10808: bind: address already in use

原因:該 TCP 監聽端點已被其他服務占用。解法:停止占用該端點的服務,或改用確認未被占用的較高連接埠;接著同步修改手動設定此代理連接埠的應用程式。

結論:只修改本機連接埠,不要改節點連接埠

看到日誌中的 listen 與 bind,請先處理本機入站設定。不要順手把遠端伺服器連接埠也改成 10818;遠端連接埠必須與伺服器實際監聽的連接埠一致。

0.0.0.0 表示通用監聽,可能與相同連接埠上的特定 IPv4 位址監聽發生衝突。兩個入站設定是否衝突,還取決於 TCP、UDP 與位址族,不能只看連接埠數字。也不要為了避開問題而任意開啟區域網路存取,這會擴大本機代理的可存取範圍。

第四類:outbound 參數缺漏,依協定檢查必填項目

出站設定決定連線至哪台伺服器、使用哪種協定以及如何驗證身分。VMess 與 VLESS 的常見 JSON 出站設定會在 settings.vnext 中定義伺服器,並在 users 中定義使用者;Trojan 通常使用 settings.servers。混用不同協定的欄位,即使 JSON 語法正確,也可能在建構出站時失敗。

協定優先檢查的設定路徑常見問題
VMesssettings.vnext[].address / port / users[].id位址空白、缺少連接埠、使用者 ID 格式錯誤
VLESSsettings.vnext[].users[].id / encryptionUUID 格式不正確;一般設定中的 encryption 應為 none,並須符合目前核心的要求
Trojansettings.servers[].address / port / password誤用 vnext 結構,或缺少密碼與伺服器位址

錯誤:invalid UUID

原因:使用者 ID 無法以該核心接受的格式解析。解法:從原始節點資料重新複製完整 ID,檢查空格、截斷與全形字元;不要隨機產生新 ID 來取代伺服器端帳號。

錯誤:failed to build outbound handler

原因:這是出站建構失敗的概括提示,單看這句無法判斷缺少哪個參數。解法:繼續查看巢狀錯誤原因,依具體協定檢查伺服器清單、使用者參數與傳輸層設定。

連線位址、TLS 的伺服器名稱與 WebSocket 的 Host 用途不同,不能只因為看起來都是網域名稱就互相替換。VLESS 搭配 REALITY 時,還需要核對與伺服器端相符的公鑰、伺服器名稱及其他相關參數;欄位名稱與支援情況以實際核心版本為準。缺少參數時,請向設定提供者確認,不要照抄其他節點的值。

修改後重新啟動,保留可還原的排查紀錄

每次只修改一類問題,接著停止服務、重新啟動並查看新日誌。先修正語法,再處理欄位與參數,最後確認監聽成功。若一次同時修改連接埠、DNS、協定與路由,即使連線恢復,也很難判斷究竟是哪項修改有效。

如果核心已啟動,但 Android VPN 尚未建立,請檢查系統授權,以及其他正在使用 VPN 的應用程式。Android 的同一使用者環境通常只能維持一個作用中的 VPN。這類問題應依系統 VPN 狀態處理,不必反覆更換 UUID 或關閉憑證驗證。

下載用戶端v2rayNG / v2rayN