V2Ray 核心啟動失敗排解:從 v2rayN 日誌找出 JSON 設定錯誤

按下啟動卻無法連線?本文帶你看懂核心錯誤訊息,排查連接埠衝突、欄位拼寫、路由規則格式與 geo 資源缺漏,並逐項修正。

本文重點

先確認核心是否真的已退出,再從這次啟動日誌找出第一個具體錯誤。本文適用於 v2rayN 的設定載入與啟動故障,依序排查 JSON 解析、欄位語意、路由與資源載入、連接埠監聽問題。讀完後,你可以保留有效線索、逐項修正,並分辨啟動失敗與啟動後連線失敗。

先釐清:核心已退出,還是連線失敗

網頁無法開啟,不代表 V2Ray 核心啟動失敗。v2rayN 是用來管理節點、訂閱與代理設定的用戶端;實際處理連線的是所選核心,可能是 Xray,也可能是 V2Fly。主視窗仍然開啟,只能表示用戶端正在執行,不能證明核心已成功啟動。

真正的啟動故障通常發生在讀取設定、建立入站與出站、載入規則資源或綁定本機連接埠時。如果核心已監聽本機連接埠,之後才出現節點連線逾時或 TLS 交握失敗,就應改從網路與節點設定著手排查。不要反覆更新訂閱來處理本機 JSON 語法錯誤。

讀取設定 建立規則 載入資源 監聽連接埠 處理連線
日誌或現象優先判斷下一步
設定解析出錯後,程序立即退出設定未成功載入檢查錯誤指出的檔案與欄位
本機 10808 連接埠綁定失敗監聽建立失敗查詢占用該連接埠的程序
出現啟動訊息,且實際設定的連接埠已在監聽核心很可能已啟動檢查系統代理、路由與對外連線
瀏覽網頁時才發生逾時執行期間的連線故障確認節點位址、連接埠與傳輸參數

表中的 10808 僅供排查示範。實際連接埠請以「設定」→「參數設定」中的本機監聽設定及產生的設定檔為準。即使看到此連接埠正在使用,也可能是另一個用戶端正在監聽,請一併確認程序。

保留一次啟動的完整日誌

先保留線索,再修改設定。日誌結尾通常只是「啟動失敗」的摘要,真正原因往往藏在前面的核心輸出中。檢視錯誤鏈時,請找出最具體的解析、檔案讀取或系統錯誤;同一次啟動的上下文比單獨一行訊息更有參考價值。

  1. 記錄環境資訊

    記下 v2rayN 版本、作業系統、所選核心,以及核心啟動輸出中的版本號。用戶端版本與核心版本請分開記錄,不能互相替代。

  2. 確認設定

    開啟「設定」→「參數設定」,記下本機監聽連接埠;若目前版本有「Core 類型」設定,也請記下所選項目。介面分組可能因版本而異,最終以這次日誌中實際啟動的執行檔為準。

  3. 重新重現一次

    在主畫面開啟日誌或資訊輸出區,記下目前時間,再對目標節點執行一次「設為活動伺服器」。確認日誌對應這次啟動,別混入先前測速所產生的暫時性核心輸出。

  4. 保存錯誤鏈

    從核心版本行開始,保存到退出訊息為止。保留設定路徑、錯誤欄位與系統錯誤原文;對外分享前,請遮蔽訂閱權杖、節點憑證及個人目錄名稱。

  5. 逐項修正

    每次只修改一類設定,再重新啟動。如果錯誤從解析失敗變成連接埠占用,表示排查已進入下一階段,不要把這兩則日誌誤認為同一個原因。

JSON 語法:先檢查逗號、引號與資料類型

JSON 解析錯誤會在設定欄位發揮作用之前發生。嚴格 JSON 的物件鍵與字串必須使用英文雙引號,最後一個成員後面不能多出逗號。部分核心載入器支援註解等擴充語法,但不要因此認定所有工具都接受相同寫法。

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

原因:常見情況是物件最後一個成員後仍留有逗號,解析器因此預期還有另一個鍵。

解法:檢查錯誤位置前一行,刪除結尾大括號前多餘的逗號,再用原本的核心測試設定。

錯誤:unexpected EOF

原因:讀到檔案結尾時,內容仍不完整;可能是括號未配對,也可能是檔案遭到截斷。

解法:檢查結尾的大括號、方括號與雙引號,並確認編輯器已儲存完整檔案。

錯誤:cannot unmarshal string into Go value of type uint16

原因:要求整數的欄位收到字串;完整日誌通常還會指出相關欄位或結構資訊。

解法:依照目前核心的欄位定義修正類型。不要把所有數字都加上引號,也不要全域刪除字串的引號。

以下片段只用來示範嚴格 JSON 中的尾隨逗號問題,並非可直接執行的完整代理設定。即使某個核心欄位接受多種連接埠寫法,JSON 物件的結構仍必須正確。

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

上方 10808 後面多了一個逗號。修正後如下:

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

欄位與路由:能解析,不代表能正常使用

JSON 格式正確,只代表內容可讀取,不代表核心認得其中的協定、傳輸選項與路由規則。欄位名稱通常區分大小寫;用戶端設定、訂閱文字與核心執行設定也不是相同結構,不能直接把一段訂閱內容當成核心 JSON。

欄位拼錯不一定會觸發「未知欄位」錯誤。有些載入器會忽略未知鍵,結果反而是必要欄位缺漏,或選項恢復預設值。因此,不能只因測試通過,就認定每個自訂欄位都已生效。

檢查項目具體檢查內容修正方向
協定與傳輸protocol 與傳輸設定是否屬於目前核心支援的範圍確認所選核心,不要直接套用另一個核心的完整設定
出站標籤outboundTag 的值是否對應到實際出站的 tag依原有大小寫統一名稱;測試通過後仍須確認流量去向
路由規則routing.rules 是否為陣列,以及每條規則是否包含有效的比對條件刪除意外的空白規則;檢查 domain、ip 等欄位的類型
資源引用geosite:cn、geoip:private 對應的檔案與標籤是否存在讓資源版本、路徑與引用標籤相符

以下是常見的路由片段,只能合併到既有的完整設定中。這段設定需要已有標籤為 direct 的出站,而且核心必須能讀取包含相應標籤的資源檔案。

{
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      }
    ]
  }
}

結論:先精簡規則,再恢復分流

備份目前的路由方案後,暫時切換至用戶端內建的簡化方案。如果同一個節點能啟動,就分批恢復自訂規則;每次只恢復一組,找出觸發錯誤的資源引用或規則欄位。

啟動後也要確認規則順序。範圍較廣的規則若排在前面,可能會先比對到流量,導致後面的細項規則無法生效。這是分流邏輯問題,應與 JSON 解析失敗分開處理。相關概念可參考進階設定中的路由說明。

連接埠占用:查明程序,不要先強制結束

本機監聽衝突與遠端節點連接埠無關。核心想綁定 127.0.0.1:10808,但該位址與連接埠已被另一個程序占用,就可能無法啟動。常見原因包括另一個 v2rayN 仍在執行,或上次啟動的核心尚未退出。

錯誤:bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

原因:Windows 拒絕重複綁定已在監聽的位址;完整錯誤通常會包含遭占用的位址與連接埠。

解法:找出正在監聽的程序,再正常關閉重複執行的實例;或更換本機連接埠,並同步調整使用該連接埠的應用程式。

錯誤:bind: address already in use

原因:在 Linux 等環境中,相同的監聽位址與連接埠已被占用。

解法:使用系統連接埠查詢工具確認占用者,避免同時啟動兩個使用相同設定的核心。

在 Windows PowerShell 中,以下兩個指令會列出 TCP 10808 的監聽程序及其程序名稱,不會終止任何程序。若設定使用其他連接埠,請將 10808 替換為日誌中的實際值。

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

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

geo 資源:分辨檔案缺漏與標籤缺漏

geosite.dat 提供網域分類,geoip.dat 提供 IP 分類。規則引用這些資源時,檔案不存在、無法讀取,或檔案內缺少所需標籤,都可能導致設定無法建立。更換節點無法修復本機資源讀取錯誤。

錯誤片段:failed to load geosite

原因:網域資源載入失敗;後續錯誤鏈會說明問題是出在檔案讀取,還是分類標籤不存在。

解法:依完整日誌確認路徑與標籤,再還原資源或修正規則引用;不要只憑這段文字就判定檔案已損毀。

錯誤片段:no such file or directory

原因:日誌指出的檔案不存在;只有在路徑確實指向 geo 檔案時,才屬於資源缺漏。

解法:確認資源目錄與實際啟動位置,補回對應檔案,並確認啟動程序具有讀取權限。

  1. 查看路徑。保留錯誤中的檔名與目錄。透過用戶端啟動與直接在終端機啟動,可能會使用不同的工作目錄或資源搜尋設定。
  2. 查看標籤。若錯誤提到某個清單不存在,請檢查規則中的分類名稱。檔案存在,不代表所有標籤都可用。
  3. 還原資源。使用目前 v2rayN 版本提供的資源更新功能,或從完整用戶端套件還原配套檔案;不要混用來源或格式不明的資料。
  4. 縮小範圍驗證。備份後暫時移除引用該分類的規則,再重新測試。這麼做只是為了定位原因,不代表最終分流方案已經完成。

使用相同核心測試,再確認能否正常啟動

測試時必須使用 v2rayN 實際選用的核心與設定副本。Xray 與 V2Fly 的命令列入口不同;以下分別列出常見的 Xray 指令與 V2Fly 5.x 子命令形式。執行前請透過對應程式的說明輸出確認參數,不要直接套用另一種核心的指令。

# PowerShell:在對應的核心目錄中執行,config.json 是測試用副本
.\xray.exe -test -config .\config.json

# V2Fly 5.x 的子命令形式
.\v2ray.exe test -c .\config.json

設定測試通過,不代表實際啟動一定成功。測試模式主要檢查解析與建構,無法取代實際監聽,也不能證明能連上遠端節點。終端機測試也可能因工作目錄不同而發生資源路徑錯誤;請讓測試環境與用戶端啟動環境一致。

測試通過了,為什麼啟動還是出錯?

重新檢查正常啟動時的日誌。如果是連接埠綁定失敗,請依實際連接埠查詢占用程序;如果再次出現資源路徑錯誤,請比較用戶端與終端機的啟動目錄。不要把「設定可解析」當成「網路已連通」。

換了核心才出錯,應該先改哪裡?

先切回原本的核心,確認設定是否仍可用,再檢查新核心支援的協定與傳輸方式。自訂設定需要逐項調整,不能只更改執行檔名稱;一般節點則請確認用戶端選項與實際啟動日誌。

更新訂閱後,所有節點都無法啟動?

先檢查共用的本機連接埠、路由方案與 geo 資源。若所有節點都出現相同的本機錯誤,請優先處理共用設定;若只有某類節點失敗,再檢查該類節點的協定與傳輸參數。

準備尋求協助時,需要提供哪些內容?

提供用戶端與核心版本、一次啟動的完整錯誤鏈、是否啟用自訂路由、最近一次變更,以及已執行的測試結果。請遮蔽訂閱連結中的權杖與節點憑證,也要處理設定路徑中的個人資訊。

依照這個順序處理,就能把「啟動失敗」拆解成可驗證的小問題。如果前三項驗收都已完成,但特定網站仍無法連線,請改從 DNS、節點與路由著手排查,不要繼續修改已通過測試的 JSON。更多常見問題請參閱說明中心。

下載v2rayN查看平台與安裝套件