先確認核心是否真的已退出,再從這次啟動日誌找出第一個具體錯誤。本文適用於 v2rayN 的設定載入與啟動故障,依序排查 JSON 解析、欄位語意、路由與資源載入、連接埠監聽問題。讀完後,你可以保留有效線索、逐項修正,並分辨啟動失敗與啟動後連線失敗。
先釐清:核心已退出,還是連線失敗
網頁無法開啟,不代表 V2Ray 核心啟動失敗。v2rayN 是用來管理節點、訂閱與代理設定的用戶端;實際處理連線的是所選核心,可能是 Xray,也可能是 V2Fly。主視窗仍然開啟,只能表示用戶端正在執行,不能證明核心已成功啟動。
真正的啟動故障通常發生在讀取設定、建立入站與出站、載入規則資源或綁定本機連接埠時。如果核心已監聽本機連接埠,之後才出現節點連線逾時或 TLS 交握失敗,就應改從網路與節點設定著手排查。不要反覆更新訂閱來處理本機 JSON 語法錯誤。
| 日誌或現象 | 優先判斷 | 下一步 |
|---|---|---|
| 設定解析出錯後,程序立即退出 | 設定未成功載入 | 檢查錯誤指出的檔案與欄位 |
| 本機 10808 連接埠綁定失敗 | 監聽建立失敗 | 查詢占用該連接埠的程序 |
| 出現啟動訊息,且實際設定的連接埠已在監聽 | 核心很可能已啟動 | 檢查系統代理、路由與對外連線 |
| 瀏覽網頁時才發生逾時 | 執行期間的連線故障 | 確認節點位址、連接埠與傳輸參數 |
表中的 10808 僅供排查示範。實際連接埠請以「設定」→「參數設定」中的本機監聽設定及產生的設定檔為準。即使看到此連接埠正在使用,也可能是另一個用戶端正在監聽,請一併確認程序。
保留一次啟動的完整日誌
先保留線索,再修改設定。日誌結尾通常只是「啟動失敗」的摘要,真正原因往往藏在前面的核心輸出中。檢視錯誤鏈時,請找出最具體的解析、檔案讀取或系統錯誤;同一次啟動的上下文比單獨一行訊息更有參考價值。
-
記錄環境資訊
記下 v2rayN 版本、作業系統、所選核心,以及核心啟動輸出中的版本號。用戶端版本與核心版本請分開記錄,不能互相替代。
-
確認設定
開啟「設定」→「參數設定」,記下本機監聽連接埠;若目前版本有「Core 類型」設定,也請記下所選項目。介面分組可能因版本而異,最終以這次日誌中實際啟動的執行檔為準。
-
重新重現一次
在主畫面開啟日誌或資訊輸出區,記下目前時間,再對目標節點執行一次「設為活動伺服器」。確認日誌對應這次啟動,別混入先前測速所產生的暫時性核心輸出。
-
保存錯誤鏈
從核心版本行開始,保存到退出訊息為止。保留設定路徑、錯誤欄位與系統錯誤原文;對外分享前,請遮蔽訂閱權杖、節點憑證及個人目錄名稱。
-
逐項修正
每次只修改一類設定,再重新啟動。如果錯誤從解析失敗變成連接埠占用,表示排查已進入下一階段,不要把這兩則日誌誤認為同一個原因。
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
}
- 編輯器標示的錯誤位置可能在問題發生處之後。遇到閉合括號錯誤時,先回頭檢查前一行。
- 字串中的反斜線必須正確跳脫。將 Windows 路徑寫入 JSON 時,可使用雙反斜線,或改用載入器支援的正斜線路徑。
- 不要把含有憑證的完整設定檔上傳到線上格式化工具。使用本機編輯器與核心測試指令即可。
欄位與路由:能解析,不代表能正常使用
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 }
- 確認程序所屬的視窗與檔案位置後,優先透過用戶端正常結束,而不是直接終止不明程序。
- 若改用 10818,請在「設定」→「參數設定」儲存本機連接埠後重新啟動,並確認系統代理或瀏覽器手動代理仍指向 10808。
- 一般本機代理連接埠遭占用,通常無法靠系統管理員權限解決。TUN 權限問題應依日誌另外排查。
- 設定可能同時包含 TCP 與 UDP 監聽。查不到 TCP 監聽結果,不代表 UDP 連接埠一定空閒;必要時可另外查詢
Get-NetUDPEndpoint -LocalPort 10808。
geo 資源:分辨檔案缺漏與標籤缺漏
geosite.dat 提供網域分類,geoip.dat 提供 IP 分類。規則引用這些資源時,檔案不存在、無法讀取,或檔案內缺少所需標籤,都可能導致設定無法建立。更換節點無法修復本機資源讀取錯誤。
錯誤片段:failed to load geosite
原因:網域資源載入失敗;後續錯誤鏈會說明問題是出在檔案讀取,還是分類標籤不存在。
解法:依完整日誌確認路徑與標籤,再還原資源或修正規則引用;不要只憑這段文字就判定檔案已損毀。
錯誤片段:no such file or directory
原因:日誌指出的檔案不存在;只有在路徑確實指向 geo 檔案時,才屬於資源缺漏。
解法:確認資源目錄與實際啟動位置,補回對應檔案,並確認啟動程序具有讀取權限。
- 查看路徑。保留錯誤中的檔名與目錄。透過用戶端啟動與直接在終端機啟動,可能會使用不同的工作目錄或資源搜尋設定。
- 查看標籤。若錯誤提到某個清單不存在,請檢查規則中的分類名稱。檔案存在,不代表所有標籤都可用。
- 還原資源。使用目前 v2rayN 版本提供的資源更新功能,或從完整用戶端套件還原配套檔案;不要混用來源或格式不明的資料。
- 縮小範圍驗證。備份後暫時移除引用該分類的規則,再重新測試。這麼做只是為了定位原因,不代表最終分流方案已經完成。
使用相同核心測試,再確認能否正常啟動
測試時必須使用 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。更多常見問題請參閱說明中心。