v2rayN 核心啟動排查

v2rayN 核心啟動失敗時,如何看懂日誌錯誤?本文整理連接埠占用、JSON 語法錯誤、未知欄位與 geo 檔案遺失等情況,說明定位問題與修復的方法。

本文重點

適用於 v2rayN 可正常開啟,但啟動核心後立即退出,或反覆顯示設定載入失敗的情況。先確認實際啟動的核心與設定檔路徑,再從錯誤訊息末端判斷是監聽失敗、JSON 解析失敗、設定欄位不相容,還是路由資料載入失敗。每次只處理一類問題,並用同一份設定檔重新測試,避免混淆核心啟動問題與節點連線問題。

先分辨核心未啟動與節點無法連線

v2rayN 是用戶端介面,Xray、V2Ray 等核心負責讀取設定、建立本機監聽並處理連線。主視窗顯示伺服器清單,不代表核心已成功執行;系統代理切換為開啟,也不表示相應的本機連接埠已有人監聽。排查應從這次啟動的日誌開始,而不是從瀏覽器的「無法連線至這個網站」著手。

如果日誌顯示讀取設定後立即退出,並出現 Failed to start、failed to load config 或連接埠繫結失敗等訊息,應優先檢查本機設定。如果核心持續執行、本機代理連接埠也已在監聽,只有存取目標時才發生逾時、憑證錯誤或連線遭拒,則應改查節點位址、TLS 與網路連線。日誌用語會因核心版本而異,以下列出常見錯誤片段,不必與整行文字完全相同。

保留這次日誌與實際設定檔路徑

先記下 v2rayN「說明」→「關於」中的用戶端版本,再記錄啟動日誌所列的核心名稱、版本與設定檔路徑。桌面版與 WPF 版的部分選項位置不同;本文提到的參數項目可從「設定」→「參數設定」進入,實際分組名稱請以目前介面為準。不要只根據介面版本推斷核心版本,也不要因為在安裝目錄找到同名檔案,就認定它是這次載入的設定檔。

  1. 保存舊日誌

    先將目前錯誤複製到本機文字檔,再清空主視窗的日誌顯示區。重新選取目前伺服器並設為作用中伺服器,觸發核心重新啟動,只保留這次操作產生的連續日誌。

  2. 確認核心

    查看啟動日誌中的執行檔名稱與版本。若剛修改核心選擇,請開啟「設定」→「參數設定」核對核心相關項目,並以實際啟動輸出為準。

  3. 確認檔案路徑

    記下載入中設定檔的完整路徑。一般節點產生的設定檔與自訂設定檔處理方式不同;先複製一份目前出錯的檔案作為診斷副本,不要直接覆寫用戶端的持久設定。

  4. 查看錯誤末端

    沿著同一串錯誤訊息,從外層提示一路讀到最後的原因。例如「設定載入失敗」後面的「檔案不存在」才是要修復的問題,不要只截取最前面的失敗提示。

一般節點的執行設定可能會在重新設為作用中伺服器、切換路由或重新啟動時重新產生。直接修改產生的 config.json,常會遇到「才修好又被還原」的情況。確認原因後,應回到節點編輯、路由設定或參數設定中修正來源;只有明確使用自訂設定時,才維護該自訂檔案。

連接埠占用:先找出監聽程序,再更改連接埠

最常見的情況是另一個用戶端執行個體或未清除的核心占用了本機監聽連接埠。以下以 Windows 上的 127.0.0.1:10808 為例;這只是排查示範,並非所有版本都使用這個連接埠。請在「設定」→「參數設定」核對本機監聽連接埠;若目前介面將 SOCKS、HTTP 或混合連接埠分開設定,請逐一檢查,不要照抄範例數字。

10808
本文示範的監聽連接埠
10809
本文示範的備用連接埠
65535
TCP 連接埠號碼上限

錯誤:bind: address already in use

原因與解法:目標位址和連接埠已被占用。Windows 也可能顯示 Only one usage of each socket address;找出正在監聽的程序,正常關閉重複執行的執行個體,或更改本機監聽連接埠後重新啟動核心。

在 PowerShell 中執行以下命令,只篩選 TCP 監聽連線,避免將遠端連線中剛好出現的同號連接埠誤判為占用。輸出中的 OwningProcess 是程序識別碼;先查看程序名稱與程式路徑,再決定是否關閉。

Get-NetTCPConnection -State Listen -LocalPort 10808 |
  Select-Object LocalAddress, LocalPort, OwningProcess

Get-NetTCPConnection -State Listen -LocalPort 10808 |
  ForEach-Object { Get-Process -Id $_.OwningProcess }

若沒有任何結果,表示查詢當下未發現該連接埠有 TCP 監聽,並不代表設定一定正確。還要檢查日誌中的實際位址、是否有其他 UDP 衝突,以及是否出現 access permissions 之類的系統限制。若將連接埠改為 10809,需同步更新手動設定代理的瀏覽器與終端機;若系統代理由用戶端管理,請重新設定系統代理以更新連接埠。測試前也要確認備用連接埠未被占用。

JSON 語法錯誤:先修正結構,再檢查參數

JSON 解析失敗通常發生在手動撰寫自訂設定、複製片段或編輯路由規則之後。常見問題包括物件成員之間漏了逗號、字串使用中文引號、括號未成對,以及最後一個項目後多出逗號。不同載入器對註解等擴充語法的支援不一;跨版本排錯時,建議先將副本改寫為嚴格 JSON。

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

原因與解法:物件結尾前的結構不符合解析要求,常見原因是最後一個項目後多了逗號。檢查錯誤位置及前一行,刪除多餘的分隔符號,並確認括號成對。

錯誤:unexpected EOF

原因與解法:讀到檔案結尾時,內容仍未完整,可能缺少右括號或檔案未完整儲存。檢查檔案末段,還原完整設定後再進行語法檢查。

以下是合法的局部物件,示範數字連接埠、字串引號與陣列的閉合方式,不是可直接啟動的完整設定。將規則片段併入現有檔案時,應確認它所屬的父層欄位,不可直接將兩個完整 JSON 物件首尾相接。

{
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "udp": true
      }
    }
  ]
}

未知欄位與不支援的設定值

JSON 能成功解析,只能證明檔案結構成立,不代表核心支援其中所有協定、傳輸方式或參數。v2rayN 的介面設定、V2Ray 設定與 Xray 設定並非同一種檔案。將用戶端儲存的設定檔當成核心設定,或直接匯入其他核心的設定,都可能造成載入失敗或行為異常。

還要注意,未知欄位不一定會引發錯誤,有些解析流程會忽略無法辨識的鍵。沒有出現「unknown field」,不能據此判斷欄位拼字正確。更常見的情況是某個設定值不受支援,例如 unknown transport protocol;此時應核對傳輸方式與實際執行的核心,而非只調整 JSON 標點。

錯誤:unknown field

原因與解法:嚴格解碼流程拒絕了無法辨識的欄位。記下後續顯示的欄位名稱,核對所屬層級、拼字與目前核心的文件;若錯誤出現在用戶端匯入階段,應先確認匯入的是節點、自訂核心設定,還是用戶端設定。

錯誤:unknown transport protocol

原因與解法:目前核心無法辨識設定中的傳輸標識。核對節點編輯介面中的傳輸設定與核心版本,不要為了消除錯誤就任意改成其他傳輸方式。

VMess、VLESS 是協定名稱,不能互相替換來「試試看」是否能修好。伺服器協定、傳輸方式與安全參數之間有明確的對應關係。若是從訂閱匯入的一般節點,請優先重新匯入有效設定並核對伺服器要求;若是自訂設定,請保留原始檔案,逐項比對可疑欄位與目前核心支援的範圍。

geo 檔案遺失:檢查檔案、路徑與分類名稱

路由使用 geoip:cn 或 geosite:cn 時,採用傳統 DAT 資料的設定通常需要相應的 geoip.dat、geosite.dat。錯誤訊息可能先顯示「建立路由規則失敗」,到末端才指出資料檔案無法開啟或分類不存在。前者是結果,後者才決定應補上檔案還是修改規則。

錯誤:failed to load GeoIP

原因與解法:GeoIP 資料載入失敗。繼續查看後續顯示的路徑與系統錯誤;若出現 no such file or directory,請檢查實際資源目錄,並還原所需的 geoip.dat。

錯誤:failed to load geosite

原因與解法:網域分類資料讀取失敗,或要求的分類不在檔案中。先確認是檔案不存在、無法讀取,還是缺少分類,再分別修正資源位置、存取權限或規則中的分類名稱。

  1. 從日誌複製完整資源路徑,不要假設工作目錄就是程式所在目錄。自訂啟動方式與資源路徑設定可能會改變搜尋位置。
  2. 若檔案不存在,請檢查用戶端的資源更新入口與更新日誌;必要時從完整用戶端套件還原相應元件,再確認檔案確實已寫入目標目錄。
  3. 若檔案存在但分類不存在,請核對規則中的分類名稱與資料來源。不同資料檔案包含的分類可能不同,重新命名檔案也無法增加分類內容。
  4. 暫時停用引用該分類的自訂規則後,如果核心能啟動,可將問題範圍縮小至規則與資料相依性;恢復使用前仍應補齊資料並重新驗證分流。

修復後依相同步驟重新測試

每次只修改一個變數,然後重新啟動核心並保存新日誌。如果同時更換節點、修改連接埠、更換核心又刪除路由,即使恢復正常,也無法判斷真正原因。若使用自訂 Xray 設定,可用實際配套的 Xray 執行檔測試載入;以下命令應在診斷副本所在目錄執行,檔名為 config.json。

.\xray.exe run -test -config .\config.json

此命令適用於支援這種命令列格式的 Xray;其他核心請先查看自身說明,不要直接套用。測試時應使用與用戶端相同的資源環境,否則 geo 檔案搜尋路徑不同可能造成額外錯誤。設定測試通過不代表遠端連線正常,也不保證實際執行時能成功繫結連接埠,仍須回到用戶端驗證。

核心啟動失敗常見問題

修改 config.json 後,為什麼下次啟動又出錯?

先確認它是否為用戶端產生的執行設定。一般節點應在節點編輯、路由設定或「設定」→「參數設定」中修改來源,再重新設為作用中伺服器以產生設定檔。若使用自訂設定,請檢查實際載入路徑,避免修改到備份檔案。

更新訂閱能解決核心啟動失敗嗎?

只有錯誤來自訂閱節點參數時,更新才可能有效。監聽連接埠衝突、JSON 檔案損毀與本機 geo 檔案遺失,都不應只靠反覆更新訂閱處理。請先根據錯誤訊息末端判斷問題類型。

連接埠明明沒有占用,為什麼仍顯示 bind 失敗?

檢查日誌中的監聽位址是否屬於本機,以及系統是否限制該連接埠。若錯誤包含 cannot assign requested address,優先修正位址;若包含權限遭拒,請檢查系統限制。不要把所有 bind 錯誤都當成已有程序占用。

需要分享日誌求助時,應保留哪些內容?

提供用戶端版本、核心版本、作業系統、這次從啟動到退出的連續日誌,以及最近進行的修改。遮蔽訂閱連結、使用者識別資訊與驗證資料,但保留錯誤欄位名稱、本機連接埠及路徑結構,讓問題能夠被定位,同時避免外洩憑證。

用戶端下載