V2Ray 核心啟動失敗怎麼辦:從日誌找出 config.json 設定錯誤

從用戶端日誌視窗開始,針對 JSON 語法錯誤、連接埠被占用、欄位拼寫錯誤、協定參數缺漏等常見原因,解讀典型錯誤訊息並提供修正與啟動驗證方法。

本文快速導覽

適合遇到 v2rayN、v2rayNG 或 v2flyNG 顯示核心退出、設定載入失敗、啟動後立即停止的使用者。排查順序固定為取得第一則錯誤、檢查 JSON 結構、確認監聽連接埠、核對欄位與協定參數,最後透過日誌狀態與本機連接埠完成複測。

先確認問題發生在啟動階段

核心啟動失敗與節點連線失敗不是同一類問題。啟動失敗時,V2Ray 或 Xray 程序通常會在讀取 config.json、建立入站監聽或初始化出站設定時退出;節點連線失敗則是核心仍在執行,但存取目標時發生逾時、握手失敗或伺服器拒絕。兩者的排查入口不同,不能只憑「網頁打不開」判斷。

開啟日誌後,先往上尋找本次啟動對應的第一則 errorfailed。後續出現的「程序退出」「重新啟動失敗」通常只是結果,真正原因多半在前面一至五行。例如設定解析錯誤會先指出字元位置,接著才顯示核心退出碼;連接埠衝突則會先顯示監聽位址,再回報啟動失敗。

以 v2rayN 7.x 為例,可先進入「設定」→「參數設定」→「Core 類型」,確認目前節點呼叫的是 Xray Core 還是 v2fly Core,再回到主畫面開啟日誌區域。切換 Core 類型後應重新啟動一次,讓日誌只保留目前核心產生的新紀錄,避免把舊設定的錯誤誤認為目前問題。

  1. 停止核心

    在用戶端執行停止操作,等待日誌出現程序結束訊息,確認舊程序不再占用本機監聽連接埠。

  2. 清除日誌

    清除日誌視窗或記下目前時間,接著只啟動一次核心,避免連續重試產生大量重複錯誤。

  3. 定位第一則錯誤

    從新日誌頂端往下尋找第一筆包含 failederrorinvalidunknown 的紀錄。

  4. 記錄上下文

    保留錯誤行前後各三行,重點記錄設定檔路徑、行列位置、監聽連接埠與出站標籤。

  5. 逐項修改

    一次只修正一個問題,儲存後重新啟動。若同時修改多個欄位,新日誌很難判斷是哪項修改生效。

1 則
優先處理第一個錯誤
3 行
保留前後日誌上下文
3 秒
觀察程序是否持續執行
2 次
完成啟停複測

JSON 語法錯誤:依行列位置修正結構

config.json 必須符合標準 JSON 語法。鍵名與字串使用半形雙引號,陣列與物件分別使用方括號和大括號,相鄰欄位之間使用逗號,最後一個欄位後不可保留多餘逗號。中文輸入法產生的彎引號、遺漏的引號,以及複製時混入的註解,都會讓核心在處理協定參數前直接停止。

下面的片段在 port 行末缺少逗號,因此解析器讀到下一行的 protocol 時無法繼續。日誌提供的行號有時指向「發現問題的位置」,真正缺少的字元可能位於上一行。

{
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 10808
      "protocol": "socks"
    }
  ]
}

修正時不要只盯著錯誤字元本身。應從提示位置向上檢查最近一組大括號,確認每個物件中的鍵值對都有正確分隔,並從檔案開頭到結尾核對括號是否成對。若編輯器支援 JSON 格式化,可先執行格式化;無法格式化通常表示結構仍未閉合。

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

原因與解法:物件結尾通常保留了多餘逗號,或逗號後缺少下一組鍵名。檢查提示位置前一行,刪除尾端逗號或補完整的鍵值對。

錯誤:invalid character 'p' after object key:value pair

原因與解法:兩個相鄰欄位之間缺少逗號。重點檢查日誌所示行的上一行,在前一個值後補上半形逗號。

錯誤:unexpected end of JSON input

原因與解法:檔案在物件或陣列閉合前就結束。找出末尾缺少的大括號或方括號,並檢查複製設定時是否只儲存了部分內容。

錯誤:invalid character '/' looking for beginning of value

原因與解法:設定中可能加入了 // 或區塊註解。標準 JSON 不接受這類註解,應刪除註解並保留實際欄位。

連接埠被占用:找出衝突程序與重複入站

JSON 能正常解析後,核心會依序建立入站監聽。若 v2rayN 的舊程序沒有退出、其他本機網路工具占用了相同連接埠,或 config.json 中兩個入站重複使用同一個位址與連接埠,啟動就會停在監聽階段。日誌中通常可看到 listenbindaddress already in use 等關鍵字。

常見測試設定會將 SOCKS 入站放在 127.0.0.1:10808,HTTP 入站放在 127.0.0.1:10809。這些數字並非所有用戶端版本的固定值,實際排查應以日誌和目前參數設定為準。如果日誌顯示衝突連接埠為 10808,就只檢查 10808,不必同時修改遠端伺服器連接埠。

日誌線索 常見原因 處理方式
bind 127.0.0.1:10808 舊核心或其他程式占用本機連接埠 找出程序,正常退出後再啟動
address already in use 兩個入站使用相同的監聽組合 為其中一個入站指定不同連接埠
permission denied 連接埠或執行目錄權限不足 改用一般高位連接埠並檢查目錄權限
cannot assign requested address 監聽位址不是本機可用位址 改為 127.0.0.1 或正確的本機位址

在 Windows 上可於終端機執行以下命令,查看 10808 對應的程序編號。假設結果最後一欄顯示 6420,再透過第二個命令查詢程序名稱。看到連接埠被占用後,不要直接結束任意系統程序,應先確認它是否是尚未退出的舊核心執行個體。

netstat -ano | findstr :10808
tasklist /FI "PID eq 6420"

錯誤:failed to listen TCP on 127.0.0.1:10808

原因與解法:本機 TCP 監聽建立失敗。檢查 10808 的占用程序,關閉舊執行個體,或在「設定」→「參數設定」中調整本機連接埠後重新啟動。

錯誤:bind: Only one usage of each socket address is normally permitted

原因與解法:相同的位址與連接埠組合已被使用。檢查是否重複啟動用戶端,以及設定中的多個 inbound 是否寫入相同連接埠。

結論:先釋放連接埠,再考慮改號

舊程序殘留時直接改成 10810,只能暫時避開衝突,還會讓系統代理繼續指向舊連接埠。應先結束殘留執行個體並確認連接埠已釋放;只有在連接埠被必要程式長期使用時,才同步修改入站連接埠與系統代理設定。

欄位拼寫錯誤:區分層級、核心與設定格式

欄位名稱拼寫正確但層級放錯,同樣會導致設定載入失敗。以 TLS 的伺服器名稱為例,serverName 應位於對應的傳輸安全設定內,而不是隨意放在 outbound 根層。類似問題還包括把 settings 寫成 setting、把 streamSettings 寫成 streamSetting,或把陣列欄位寫成單一物件。

另一個常見來源是混用不同核心或不同版本的設定片段。v2rayN 可根據節點與 Core 類型產生設定,但 Xray Core 和 v2fly Core 對部分協定、流控值與傳輸欄位的支援範圍並不完全相同。設定在某個核心中可用,不代表原樣切換 Core 類型後仍能載入。

{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": []
      },
      "streamSettings": {
        "security": "tls",
        "tlsSettings": {
          "serverName": "example.com"
        }
      }
    }
  ]
}

錯誤:json: unknown field "streamSetting"

原因與解法:欄位少寫了結尾字母,正確名稱通常是 streamSettings。依目前核心支援的設定格式修正,不要只靠拼寫推測。

錯誤:failed to parse outbound config

原因與解法:出站物件的協定名稱、settings 結構或傳輸層級不符合要求。先保留一個最小出站,再逐項恢復 TLS、傳輸與路由參數。

錯誤:failed to load config files

原因與解法:這是上層彙總訊息,無法直接定位欄位。向前查找同一次啟動中的 unknown fieldinvalid value 或具體檔案行號。

  1. 確認 v2rayN「設定」→「參數設定」→「Core 類型」中選擇的核心與節點協定相符。
  2. 檢查日誌顯示的實際設定路徑,避免編輯了備份檔案或舊目錄中的 config.json。
  3. 將複雜設定縮減為一個入站、一個出站,確認能夠啟動後,再恢復 DNS、路由與其他入站。
  4. 若錯誤來自訂閱節點,請在用戶端編輯節點參數後重新產生設定,不要只修改執行期間的暫存檔案。

結論:未知欄位不能靠移動位置反覆試錯

先確定目前 Core 類型與設定格式,再核對欄位所屬的物件。反覆將欄位移到不同層級,可能消除一則錯誤,卻產生語意錯誤,使核心啟動後仍無法建立連線。

協定參數缺漏:從入站到出站逐段檢查

JSON 語法與欄位層級都正確後,核心才會檢查協定參數。VMess 常見問題是使用者 ID 格式無效;VLESS 常見問題是位址、連接埠、使用者 ID、加密值或流控參數不相符;使用 TLS 時還要核對安全類型與伺服器名稱。參數缺漏不一定顯示為「missing」,也可能顯示為無法解析使用者、無效 UUID 或不支援的流控值。

匯入訂閱後出現這類錯誤,應先在用戶端開啟對應節點的編輯介面,確認伺服器位址前後沒有空格、連接埠介於 1 至 65535、使用者 ID 完整,且協定與傳輸類型沒有對錯位置。不要把訂閱位址本身當成節點伺服器位址,也不要將本機 10808 連接埠填入遠端伺服器連接埠欄位。

讀取設定 解析入站 解析出站 關聯路由 建立監聽 進入執行狀態

流程停在哪一段,決定檢查範圍。若日誌已顯示本機連接埠監聽成功,之後才回報找不到路由標籤,就不必回頭修改 SOCKS 入站;若在解析出站使用者時退出,表示 DNS 和路由尚未開始運作,應優先處理節點協定參數。

錯誤:failed to parse ID: invalid UUID

原因與解法:VMess 或 VLESS 使用者 ID 不完整、含空格或格式錯誤。重新複製完整 ID,並檢查開頭與結尾是否混入不可見字元。

錯誤:outbound tag not found

原因與解法:路由規則引用的出站標籤不存在。核對 outboundTag 與 outbounds 中的 tag,包括大小寫與連字號。

錯誤:unsupported flow value

原因與解法:所選核心、協定或版本不接受目前的流控值。確認節點要求並選擇相符的 Xray Core 設定;未使用流控時刪除錯誤值。

錯誤:failed to find an available destination

原因與解法:出站伺服器位址無法解析,或目標清單為空。檢查位址拼寫、DNS 是否可用,以及出站伺服器清單是否確實包含節點。

檢查項目 有效範圍或格式 常見混淆
本機入站連接埠 1 至 65535,且未被占用 與遠端伺服器連接埠混淆
伺服器位址 完整網域名稱或有效 IP 位址 誤貼成訂閱位址或帶有空格
使用者 ID 節點提供的完整 UUID 少複製一段或混入換行
路由標籤 與出站 tag 完全一致 大小寫不同或引用已刪除的標籤

最小設定法:縮小錯誤範圍

當日誌同時出現多則設定錯誤時,最有效的方法不是一次修改所有欄位,而是建立可啟動的最小設定。先只保留一個本機入站和一個參數完整的出站,暫時移除自訂 DNS、路由規則、其他入站與複雜傳輸選項。核心能持續執行後,再按模組逐項恢復。

每恢復一個模組,都執行一次停止、啟動和本機連線測試。例如先恢復 DNS,確認沒有網域解析錯誤;再恢復 routing,確認規則引用的 inboundTag 與 outboundTag 都存在;最後恢復其他監聽。這樣能把「在幾十個欄位中找錯誤」縮小為「檢查剛加入的一個模組」。

  1. 保留入站

    只保留一個監聽於 127.0.0.1 的本機入站,並使用目前未被占用的高位連接埠。

  2. 保留出站

    僅保留一個參數完整的 VMess 或 VLESS 出站,刪除暫時不參與測試的備用節點。

  3. 暫停路由

    暫時移除自訂 routing 規則,避免規則引用已刪除的標籤並干擾啟動判斷。

  4. 啟動複測

    確認日誌不再出現設定錯誤,程序執行超過 3 秒,且本機監聽連接埠持續存在。

  5. 逐項恢復

    按照 DNS、路由、其他入站、傳輸選項的順序恢復,每次只加入一個模組。

驗證啟動成功:日誌、連接埠與連線都要通過

設定不再報錯只是第一步。真正的啟動成功應同時符合三個條件:核心程序沒有立即退出、本機入站連接埠處於監聽狀態,以及用戶端發出的測試請求能經由對應出站。只看到「設定載入完成」但程序隨後退出,仍不能算恢復。

先觀察啟動後 3 至 10 秒的日誌。如果紀錄持續輸出執行資訊,且沒有新的 failed to startpanic 或退出碼,即可繼續檢查連接埠。在 Windows 上再次執行 netstat -ano | findstr :10808,應看到與目前核心程序對應的監聽紀錄;若用戶端實際設定為其他連接埠,請替換命令中的數字。

接著執行一次用戶端內建的延遲測試或連線測試。若此時出現 TLS 握手、伺服器逾時或連線遭拒,表示啟動問題已解決,故障已進入遠端連線階段。後續應檢查伺服器位址、網路可達性、TLS serverName、傳輸方式與節點有效性,而不是繼續修改 JSON 括號。

結論:分開驗收啟動成功與節點可用性

程序持續執行且本機連接埠正常監聽,表示 config.json 已通過啟動階段;之後出現的握手或逾時問題應轉入連線鏈路排查。分階段驗收可避免反覆修改已正確的設定結構。

若仍無法定位,可將本次啟動的第一則錯誤、前後三行日誌、目前 Core 類型、用戶端版本與發生問題的設定模組整理在一起。分享日誌前應移除伺服器位址、使用者 ID、訂閱位址等連線憑據,但保留錯誤類型、欄位名稱、行列位置與連接埠號碼;這些資訊才是判斷設定問題的關鍵。

下載v2rayN