Xray 核心啟動失敗怎麼辦?排查連接埠占用、JSON 格式與欄位錯誤

核心啟動後立即退出時,可依序檢查連接埠衝突、設定檔格式、欄位拼寫與核心版本,找出出錯行。

本文重點

適用於 v2rayN 顯示 Xray 啟動失敗、啟動後立即退出,或載入自訂設定失敗的情況。先保留完整錯誤訊息,再檢查監聽連接埠,使用實際執行的核心測試設定,最後核對欄位與版本。文中提供 Windows 連接埠查詢指令及本機最小設定,協助分辨用戶端產生設定、設定內容與系統環境問題。

一、先確認是啟動失敗,還是連線失敗

「網頁無法開啟」不代表「核心沒有啟動」。Xray 啟動時會讀取設定、建立入站與出站連線,並開啟監聽連接埠;這些步驟出錯,程序可能立即結束。核心已執行後發生的遠端連線逾時、驗證失敗或 TLS 交握錯誤,則屬於另一種排查方向。先分清問題發生的階段,才能避免反覆修改原本正確的節點參數。

v2rayN 是用戶端介面,Xray 則是實際處理連線的核心。介面仍在執行,不代表核心運作正常。不同版本的選單位置可能有所調整,以下以 Windows 桌面常見介面為例;若找不到同名項目,請依括號中的功能尋找,不要直接套用其他用戶端的選單位置。

  1. 保留錯誤訊息

    展開主視窗下方的資訊或記錄區,記下本次啟動時間。複製從 Failed to start 開始的完整錯誤訊息,保留後續以 > 分隔的內容;最末一層通常比開頭的摘要更具體。

  2. 確認核心

    開啟「設定」→「參數設定」→「Core 類型」,確認目前節點協定所選用的核心;部分版本會顯示「Core 類型設定」標籤。接著查看啟動記錄中的執行檔路徑,確認實際呼叫的是 Xray。

  3. 重現一次

    暫時關閉 TUN,只保留一個 v2rayN 執行個體,選取原本的節點後重新啟動服務一次。不要連續切換節點,讓記錄訊息不斷刷出;同時保留重新啟動前後約 10 秒的記錄,以便判斷錯誤是否來自同一次啟動。

  4. 記錄變更

    記下上次成功啟動後修改過的項目,例如本機連接埠、路由規則、自訂設定或核心檔案。先備份目前設定,每次只修改一個變數,測試後記錄結果。

二、連接埠占用:先找出監聽程序,再決定是否更改連接埠

如果錯誤訊息出現 failed to listen 或 address already in use,請優先檢查本機監聽連接埠,而非遠端節點的 443 連接埠。Windows 也可能顯示英文系統訊息 Only one usage of each socket address。常見原因包括舊核心尚未結束、重複開啟用戶端,或其他程式占用了相同位址與連接埠。

以下以 TCP 連接埠 10808 為查詢範例,並非所有 v2rayN 版本都使用這個預設值。請先在「設定」→「參數設定」→「基本設定」查看實際的本機監聽連接埠,再替換指令中的數字。若使用混合入站,一個連接埠可以同時接受多種代理協定,不必硬拆成兩個連接埠。

netstat -ano -p tcp | findstr ":10808"

powershell -NoProfile -Command "Get-NetTCPConnection -State Listen -LocalPort 10808 | Select-Object LocalAddress,LocalPort,OwningProcess"

錯誤:bind: address already in use

原因與解法:目標監聽位址與連接埠已被占用。請依錯誤訊息中的實際連接埠查詢 PID,正常結束占用程序,或調整目前的入站連接埠後重新啟動。

錯誤:bind: permission denied

原因與解法:系統拒絕繫結,不一定是因為有其他監聽程序。請檢查監聽位址、連接埠權限及安全軟體是否攔截;若 Windows 顯示與存取權限相關的訊息,也要確認系統排除的連接埠範圍,不要只是不斷結束程序。

若 Windows 查不到監聽程序,卻仍顯示拒絕存取通訊端,可執行 netsh interface ipv4 show excludedportrange protocol=tcp 查看 IPv4 TCP 排除範圍。若連接埠位於該範圍內,請優先選擇範圍外可用的連接埠,不要直接刪除系統保留項目。只有記錄明確指向 TUN 或權限問題時,才進一步調整對應權限。

三、JSON 格式:使用實際執行的核心進行離線測試

設定檔能用文字編輯器開啟,不代表 Xray 一定能讀取。缺少逗號、使用中文引號或括號未閉合,都會使解析中斷。語法錯誤通常會附上行號、字元位置,或 invalid character、unexpected EOF 等訊息;實際用語會依核心版本與載入方式而異。

在用戶端停止相關服務後,前往記錄中顯示的 Xray 程式目錄,使用該目錄中的執行檔測試已儲存的設定副本。以下為 Windows PowerShell 寫法;check.json 是本次要檢查的檔名。測試不會啟動代理監聽,但仍可能讀取設定引用的憑證、規則資料等本機檔案。

.\xray.exe version
.\xray.exe run -test -config .\check.json
錯誤線索優先檢查項目修正方式
invalid character錯誤位置及其前一行改用英文雙引號,並檢查鍵值之間的冒號,以及相鄰項目之間的逗號。
unexpected EOF檔案結尾與複製範圍確認內容未遭截斷,並逐層配對物件的大括號與陣列的方括號。
cannot unmarshal欄位值的型別區分字串、數字、布林值、物件與陣列,不要只修改標點符號。
測試成功但啟動後退出執行時所需資源繼續檢查連接埠繫結、檔案權限與實際載入路徑;測試成功不代表一定能開始監聽。

行號通常指向「解析器發現問題」的位置,不一定是錯誤最初發生的地方。若第 24 行出現錯誤,請連同第 23 行一起檢查。不要將含有憑證的完整設定貼到線上格式化工具;使用本機編輯器的括號配對功能,搭配核心測試指令,通常就足以排查。

結論:測試哪個檔案,結果就只適用於那個檔案

若手動測試成功但用戶端仍失敗,請立即比對啟動記錄中的設定路徑、核心路徑與工作目錄。不要以另一份設定測試成功,就推斷用戶端目前產生的設定也沒有問題。

四、欄位錯誤:依層級檢查,別只看拼寫

JSON 語法正確後,還必須符合 Xray 的設定結構。inbounds、outbounds 是陣列;協定專屬參數應放在對應的 settings 中;傳輸與安全參數通常歸在 streamSettings。欄位放錯層級時,即使檔案仍是合法 JSON,也可能導致建立設定失敗,或設定無法生效。

不要將某種核心的設定片段直接貼進另一種設定格式。v2rayN 的節點編輯表單也不等於完整的 Xray JSON:用戶端會根據節點、路由與全域選項產生執行設定。尤其要分清 VLESS 與 VMess 的協定參數,不能因為兩者都使用使用者識別資訊,就互換整個 settings 區塊。

錯誤:unknown config id

原因與解法:錯誤訊息中的某個協定或設定類型不受目前的核心版本識別。查看後續指出的具體值,核對拼寫、所在層級與核心支援範圍,不要只修改 JSON 括號。

錯誤:no such file or directory

原因與解法:設定引用的檔案或啟動所需資源不存在。沿著錯誤訊息找出具體路徑,確認執行環境中確實有該檔案;若記錄提到規則資料,先檢查資源路徑,再考慮修改路由。

另請留意:某些解析流程可能會忽略未知欄位,不一定都會回報錯誤。因此,「沒有錯誤」只代表通過目前的檢查,無法證明每個手動撰寫的欄位都已生效。調整路由後,應使用明確的目標網域確認出站選擇;不要以某個網頁能開啟取代完整驗證。

五、最小設定:區分環境問題與節點問題

完整設定內容很長時,可先將以下設定存成 check.json。它只會在本機 127.0.0.1:10818 提供 SOCKS 入站,並直接連線至目標;不包含遠端代理節點,也不能用來驗證訂閱是否可用。這份設定用於確認目前的 Xray 能否讀取設定、建立出站並開啟本機連接埠。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-check",
      "listen": "127.0.0.1",
      "port": 10818,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": false
      }
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    }
  ]
}
  1. 先執行 .\xray.exe run -test -config .\check.json。若測試失敗,請保留輸出內容,優先檢查檔案內容與目前使用的核心,不要加入實際節點參數。
  2. 測試通過後,執行 .\xray.exe run -config .\check.json。只有程序持續執行,且查得到 127.0.0.1:10818 正在監聽,才算通過繫結驗證。視窗暫時沒有新輸出,不代表程式沒有回應。
  3. 按下 Ctrl+C 停止測試程序,再逐部分還原原始設定:先加入節點出站,再加入傳輸與安全設定,最後加入路由和規則資料。每還原一部分就測試一次。
  4. 如果最小設定能啟動,加入某個部分後才失敗,排查範圍就縮小到新增的欄位或相依項目。不要在同一輪測試中同時更換節點、連接埠與核心。

六、版本相容性:確認實際執行的檔案

用戶端版本與核心版本是兩回事。只更新 v2rayN 主程式,不能據此認定 Xray 也已更新;手動覆蓋核心檔案,也不代表用戶端實際呼叫的就是該檔案。請以啟動記錄中的路徑和 xray.exe version 輸出為準,並記下處理器架構。

新增欄位、新傳輸類型或已調整的舊欄位,都可能受到核心版本影響。遇到這類情況,請先保留可正常啟動的版本與設定副本,再透過用戶端提供的更新功能或下載中心取得相容元件。不要為了勉強啟動而不斷刪除欄位,導致設定改變原本需要的連線行為。

結論:保留一組可重現問題的診斷資料

記錄用戶端版本、實際核心版本、設定載入路徑、第一條完整錯誤訊息與最後一次變更。如果最小設定可以啟動,也請記下加入哪一部分設定後開始失敗;這些資訊比單獨一張「啟動失敗」截圖更有助於找出問題。

七、啟動失敗常見問題

修改產生的設定後,為什麼重新啟動又變回原樣?

v2rayN 會依節點與全域選項重新產生執行設定。請回到「設定」→「參數設定」、節點編輯或路由設定中修改來源資料;若需要手動撰寫完整 JSON,請使用用戶端的自訂設定功能,並確認實際載入的檔案路徑。

設定測試通過了,為什麼仍顯示啟動失敗?

run -test 不代表已成功開始監聽。先查詢實際的入站連接埠,再確認用戶端呼叫的核心與設定是否和命令列相同;接著檢查記錄檔、規則資料等路徑的存取權限,最後再擴大檢查其他系統環境因素。

換一個節點就正常,是訂閱出問題了嗎?

不一定。不同節點可能使用不同協定與傳輸參數,也可能在用戶端中對應到不同核心。請保留發生問題的節點,在節點編輯視窗比對協定、傳輸、安全類型與 Core 選擇,找出是哪組參數造成設定錯誤,不必先刪除整個訂閱群組。

以系統管理員身分執行就正常了,需要一直這樣使用嗎?

先確認問題發生在一般本機監聽,還是 TUN 初始化。一般高位回送連接埠通常不需要系統管理員權限;若只是檔案或目錄權限異常,請修正目錄存取權限。確實需要 TUN 權限時,再依用戶端要求授權,不要用提高權限的方式掩蓋所有錯誤。

下載v2rayN