本文速覽

核心啟動失敗時,先分辨是設定解析失敗、本機監聽失敗,還是啟動後的網路連線問題。本文適合遇到 v2rayN 核心退出、v2rayNG 服務啟動異常的使用者:從單次啟動的日誌著手,依序檢查 JSON、協定欄位、監聽連接埠和規則資料檔,最後透過本機監聽與實際請求確認是否修復。

一、先分辨:核心未啟動,還是請求無法連線

v2rayN 是用戶端介面,Xray、V2Fly 等核心則負責讀取設定、建立入站監聽並執行出站連線。介面能開啟、訂閱能更新,不代表核心已成功執行。反過來說,瀏覽器無法開啟網頁,也不一定是核心啟動失敗:遠端連線逾時、憑證驗證失敗和 DNS 查詢異常,都可能發生在核心啟動之後。

讀取設定 解析欄位 載入資源 本機監聽 出站連線

這個流程用來判斷錯誤階段,不代表所有核心版本都嚴格依照此內部呼叫順序。排查時先找出啟動失敗日誌中最深層的具體原因;如果核心已持續執行,之後才出現 connection refused 或 i/o timeout,應依目標位址判斷是本機接入問題還是遠端連線問題,不能直接歸類為 JSON 錯誤。

二、收集一次完整的啟動日誌

日誌應從按下啟動前開始記錄,直到錯誤出現後為止。不要只截取「啟動失敗」四個字;介面上的提示通常只是結果,真正原因往往藏在後續的 failed to、檔名或系統錯誤訊息中。連續重複啟動會混淆多次執行的資訊,請先停止服務,再單獨重現一次。

  1. 記錄環境

    記下作業系統、用戶端版本、目前核心名稱與核心版本。v2rayNG 使用 Xray,v2flyNG 使用 V2Fly;v2rayN 則應以目前選用的核心為準,不要從視窗名稱推測。

  2. 開啟日誌

    在 v2rayN 主視窗底部查看日誌區域;若面板已收合,請先展開。v2rayNG 可從主畫面選單進入「日誌」。不同版本的入口位置可能不同,請以目前介面標示為準。

  3. 單次重現

    先停止連線並記下目前時間,再啟動一次。保留啟動前後連續的紀錄,尤其要完整保存第一則失敗提示及其原因脈絡,不要只留最後一行。

  4. 先備份再修改

    先備份自訂設定和路由規則,每次只修改一個項目。分享日誌前,請隱去訂閱網址、節點憑證、UUID、伺服器位址及個人目錄名稱,但保留欄位名稱、錯誤類型和連接埠。

若用戶端提示無法建立核心程序,而且完全沒有核心輸出,請先檢查核心執行檔是否存在、壓縮檔是否完整解壓縮、系統安全性紀錄是否封鎖執行,以及安裝套件是否符合處理器架構。這類問題發生在解析設定之前,反覆修改節點參數通常無濟於事。

三、連接埠遭占用:先找出監聽程序,再更換連接埠

本機代理需要在指定的監聽位址與連接埠上建立監聽。同一位址上的同一個 TCP 連接埠,通常不能同時由兩個獨立的監聽器占用。重複開啟用戶端、舊核心程序未結束,或其他程式使用相同連接埠,都可能讓新核心立即退出。請勿混淆遠端伺服器連接埠與本機入站連接埠。

錯誤:bind: address already in use

原因:目標監聽位址與連接埠已遭占用。解法:查出占用的程序,正常關閉重複執行的實例;若確實需要同時執行,請為兩個程式設定不同的本機監聽連接埠。

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

原因:Windows 拒絕重複繫結通訊端位址。解法:從日誌確認具體連接埠,再透過監聽清單找出對應程序;不要直接結束名稱不明的系統程序。

10808
本節示範的本機 TCP 連接埠
10818
確認連接埠未占用後的替代範例
1 項
每次只修改一項設定

以上數值僅供排查示範,並非所有版本的預設值。假設日誌顯示 127.0.0.1:10808 繫結失敗,請在 Windows PowerShell 執行下列指令,取得占用該連接埠的程序 ID,再查詢程序名稱。

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

Get-Process -Id (Get-NetTCPConnection -State Listen -LocalPort 10808).OwningProcess

Linux 可執行 ss -ltnp 'sport = :10808',macOS 可執行 lsof -nP -iTCP:10808 -sTCP:LISTEN。查無結果只代表查詢當下沒有符合條件的 TCP 監聽,不能排除啟動瞬間發生衝突、UDP 衝突或權限限制;應配合日誌中的網路類型判斷。

四、JSON 語法錯誤:分辨「格式有誤」與「欄位不相容」

嚴格 JSON 規定鍵名和字串必須使用英文雙引號,陣列與物件中的逗號位置也必須正確。使用中文引號、最後一個欄位後多出逗號,或複製時漏掉括號,都會使設定在讀取階段失敗。部分載入方式支援註解等擴充語法,其他方式則未必支援;為減少差異,排查時請先使用嚴格 JSON 格式的副本。

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

原因:物件結構不符合解析器要求,常見情況是最後一個欄位後多了逗號。解法:檢查錯誤位置附近及前一行,刪除多餘逗號並確認括號配對正確。

錯誤:unexpected EOF

原因:物件、陣列或字串尚未結束,輸入內容就已提前結束。解法:確認檔案是否複製完整、下載是否中斷,再補齊缺少的結構;不要只在檔案末尾盲目加上括號。

以下片段僅用來說明語法,並非可直接執行的完整代理設定。loglevel 後沒有多餘逗號,外層與內層物件也各自完整閉合:

{
  "log": {
    "loglevel": "warning"
  }
}

JSON 通過格式檢查,只能證明文字結構合法,不能證明協定名稱、傳輸設定和欄位類型都正確。部分無法辨識的欄位也可能遭到忽略,而不會觸發啟動錯誤。因此,仍須使用目前實際運行的核心測試設定。

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

五、未知協定與欄位錯誤:確認實際執行的核心

分享連結、訂閱內容和原生設定是不同類型的輸入。vless:// 或 vmess:// 分享連結必須由用戶端解析,不能直接存成 JSON 設定交給核心讀取。訂閱中的節點出現在清單裡,也不代表目前的核心支援其所有傳輸和安全參數。

錯誤:unknown outbound protocol

原因:出站協定名稱拼錯,或目前的核心不支援該協定。解法:檢查 outbounds 中的 protocol,確認核心名稱與版本,再修正設定或改用相容的核心。

錯誤:json: cannot unmarshal string into Go value of type uint32

原因:原本應為數值的欄位被寫成字串;具體目標類型和錯誤訊息會因核心實作而異。解法:依日誌指出的欄位確認類型,例如數值型連接埠應寫成 443,而不是 "443"。

VLESS 是協定名稱,REALITY 則是相關安全設定的一部分,兩者不能互相替代作為 protocol 的值。傳輸方式、安全設定、伺服器名稱與憑證都應符合伺服器要求;只把協定名稱改成能啟動的值,不代表節點就能連線。

六、geo 檔案遺失:檢查資料名稱、路徑與規則引用

路由中的 geosite: 和 geoip: 引用需要相應資料支援。即使設定本身語法正確,執行環境若找不到資料檔,或資料中不存在引用的分類,也可能導致規則建立失敗。先確認錯誤是「無法開啟檔案」還是「找不到分類」,兩者的修復方式不同。

錯誤:failed to load geosite

原因:無法載入網域規則資料,可能是檔案遺失、路徑錯誤、檔案損毀或分類不存在。解法:查看後續錯誤原因,確認目前核心實際使用的資源目錄與規則分類。

錯誤:no such file or directory

原因:日誌指出的路徑不存在;只有錯誤同時指向 geo 資料檔時,才能判定是這類資源問題。解法:檢查完整檔案路徑、檔名大小寫及解壓縮後的目錄結構,並依用戶端的資料管理方式還原資源。

  1. 記下錯誤訊息中的檔名,例如 geosite.dat、geoip.dat,以及完整路徑。不要只憑用戶端安裝目錄推測資源位置。
  2. 確認檔案可讀取且不是空檔。Linux 的檔名有大小寫之分,目錄權限也會影響核心讀取檔案。
  3. 透過用戶端提供的資料更新入口,還原相容的資料檔;若介面沒有這個入口,請依該用戶端的資源管理方式處理,不要任意混用不同格式。
  4. 若檔案存在但日誌顯示找不到分類,請檢查 geosite: 後的分類拼字和目前資料內容。第三方分類名稱並非每個資料檔都包含。
  5. 備份後暫時移除有問題的單一規則,再測試啟動。若能啟動,只代表問題範圍已縮小至該規則或資源;恢復正式設定前,仍須補齊資料與規則。

排查期間若刪除所有分流規則,會改變請求的路由方向,可能將原本應直連的請求交給代理,也可能讓代理請求改走直連出站。找出問題後,請還原原有路由設定,並確認 outboundTag 對應到實際存在的出站標籤。

七、Android 服務異常與修復後驗證

v2rayNG 在 Android 上透過系統 VPN 介面接收流量。VPN 授權失敗與 Xray 設定解析失敗屬於不同層次:前者應檢查系統授權、其他 VPN 服務和裝置政策;後者仍須回到日誌檢查 JSON、協定或資源問題。v2flyNG 使用 V2Fly 核心,排查時也應區分這兩類問題。

修正完成後,請使用相同節點和相同測試條件再次確認。先確認核心不會立即退出,再確認本機監聽或 Android VPN 服務正常,最後才測試網頁連線。系統代理、VPN 接入和核心程序分屬不同環節,單一環節正常不足以證明整條連線路徑可用。

  1. 重新啟動確認

    停止服務後重新啟動一次,確認原本的錯誤不再出現;若改為出現另一則錯誤,請依新錯誤所屬階段繼續排查。

  2. 確認接入狀態

    桌面端請確認實際監聽連接埠與系統代理設定;Android 請確認 VPN 服務及應用程式範圍。若連接埠有變更,請更新所有手動設定的接入項目。

  3. 送出請求

    使用瀏覽器開啟已知可正常連線的 HTTPS 網頁,同時觀察日誌是否出現對應請求。若只有遠端逾時,應改查節點與網路,不要再反覆修改 JSON 標點。

  4. 還原設定

    還原排查期間暫時調整的路由和日誌層級,並保存最終設定副本。記錄「錯誤原文、修改項目、驗證結果」,方便下次更新後比對。