本文適用於 v2rayN 視窗仍開啟,但 Xray 子程序啟動失敗的情況。先保留完整啟動輸出,再用實際使用的核心測試設定,最後檢查監聽連接埠與程式檔案。範例以 Windows PowerShell 為主,教學用連接埠為 10808;操作前請改成目前設定使用的連接埠,切勿直接照抄。
一、查看啟動輸出:分辨核心退出與連線失敗
v2rayN 是管理介面,Xray 則是負責處理連線的核心。視窗能開啟,不代表核心已成功監聽本機連接埠。反過來說,網頁逾時也不一定是核心啟動失敗:遠端無法連線、路由分流不如預期,或應用程式未遵循系統代理設定,都可能發生在核心正常執行之後。
先在 v2rayN 主視窗的資訊或記錄區找到這次啟動紀錄。不同版本的介面入口名稱可能不同,請以目前介面中的記錄入口為準。記下啟動時間、核心名稱、執行檔路徑、設定檔路徑,以及退出前最早出現的錯誤。不要只保留最後一句「啟動失敗」,那通常只是結果。
| 現象或輸出 | 優先檢查 | 暫不處理 |
|---|---|---|
出現 failed to load config files | 設定檔路徑、JSON 語法、欄位值 | 遠端速度測試結果 |
出現 failed to listen TCP | 監聽位址、連接埠占用、系統限制 | 訂閱更新頻率 |
程序持續執行,但請求時出現 i/o timeout | 遠端連線狀況、DNS、路由與傳輸參數 | 把所有問題都當成啟動失敗 |
| 系統提示無法執行程式 | 架構、檔案路徑、存取權限 | 先修改節點密碼 |
二、測試實際設定:先檢查 JSON,再檢查 Xray 欄位
v2rayN 儲存的介面設定,和傳給核心使用的執行設定並非同一層資料。請先從啟動輸出確認實際設定檔位置,再複製一份進行排錯。直接修改自動產生的執行檔,切換節點或重新啟動後可能會被覆蓋;找出問題後,也要回到自訂設定、路由規則或相關設定項目修正來源。
- 停止這次失敗的啟動操作,儲存錯誤輸出,並備份目前相關設定。
- 找到啟動參數指定的檔案,不要只憑檔名猜測,也不要把訂閱文字當成核心 JSON。
- 使用與 v2rayN 實際呼叫相同的 Xray 執行檔,對複本執行設定測試。
- 每次只修改一個項目,然後重新測試;前一個錯誤消失後,再處理下一個。
以下假設目前所在目錄包含 xray.exe 與待測複本 config.json。這是範例使用的檔名,不代表 v2rayN 固定使用這個路徑。第一個命令會確認執行中程式的版本,第二個命令只測試設定,不會啟動完整的代理服務。
.\xray.exe version
.\xray.exe run -test -config ".\config.json"
$LASTEXITCODE
測試命令成功結束,只表示核心通過該階段的設定檢查,不能證明連接埠一定能繫結,也不能保證遠端一定連得上。如果目前的核心不支援該命令參數,請先查看程式的說明輸出,確認正確的啟動語法,不要改用來源不明的執行檔繼續嘗試。
錯誤:invalid character '}' looking for beginning of object key string
原因:物件最後一個項目後仍有多餘逗號等語法問題,解析器預期讀取鍵名時卻遇到右大括號。
解法:檢查錯誤位置前一個項目,刪除結尾多餘的逗號,並確認鍵名使用英文雙引號。
錯誤:unexpected EOF
原因:設定檔尚未讀取完就已結束,常見原因包括複製不完整、缺少右括號,或字串的引號未成對。
解法:在編輯器中檢查大括號、方括號與雙引號是否成對;優先還原完整備份,不要盲目在檔案末尾補上一堆括號。
錯誤:json: cannot unmarshal string into Go value of type uint16
原因:需要數值的欄位收到的是字串;完整錯誤訊息有時還會附上結構或欄位路徑。
解法:根據完整錯誤訊息找出欄位,並依目前核心的要求修正資料型別;不要一律替所有數字加上或移除引號。
結構正確也可能有語意錯誤。Xray 欄位區分大小寫:outboundTag 不等於 outboundtag;路由欄位中的出站標籤也必須對應到實際定義。部分未知欄位可能會被忽略,不一定導致啟動失敗,因此「沒有語法錯誤」不代表拼寫正確。
{
"type": "field",
"domain": ["full:example.com"],
"outboundTag": "proxy"
}
三、檢查本機連接埠占用:從監聽連接埠找出程序
設定測試通過後,如果核心仍在繫結監聽器時退出,就該檢查連接埠。先從執行設定的 inbounds 找出 listen、port 與協定;TUN 介面和一般本機代理監聽器並非同一種項目。以下假設發生衝突的是 TCP 10808,並非所有安裝環境的預設值。
Get-NetTCPConnection -State Listen -LocalPort 10808 -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, OwningProcess
# 將下方的 1234 換成上一個命令輸出的 OwningProcess
Get-Process -Id 1234 |
Select-Object Id, ProcessName, Path
如果程序路徑是空白,可在工作管理員中核對 PID;必要時使用具備適當權限的終端機查看。未確認程序身分前,不要結束程序。占用連接埠的可能是另一個 v2rayN 執行個體、未正常結束的 Xray 程序,也可能是完全不同的本機服務。
| 檢查結果 | 說明 | 處理方式 |
|---|---|---|
| 10808 已由另一個代理執行個體監聽 | 兩個執行個體使用相同的位址與連接埠 | 正常結束不需要的執行個體,再啟動目前的執行個體 |
| 同一份設定中有重複的入站項目 | 兩個監聽器使用了互相衝突的端點 | 刪除重複項目,或改用不同連接埠 |
| 沒有監聽紀錄,但仍出現存取權限錯誤 | 可能受到連接埠保留範圍或安全性原則限制 | 確認系統限制,不要反覆強制結束程序 |
監聽位址為 0.0.0.0 或 :: | 萬用位址的繫結可能與其他監聽器衝突 | 同時檢查特定位址、IPv4 與 IPv6 的監聽紀錄 |
錯誤:Only one usage of each socket address (protocol/network address/port) is normally permitted.
原因:Windows 拒絕重複或互相衝突的通訊端繫結;錯誤訊息通常也會包含監聽位址與連接埠。
解法:根據錯誤訊息中的實際連接埠查詢 PID,結束衝突的執行個體;若是入站項目重複,請修改設定來源後重新產生設定。
錯誤:An attempt was made to access a socket in a way forbidden by its access permissions.
原因:系統拒絕繫結要求,可能與保留連接埠、獨占繫結或安全性原則有關,不一定是一般程序占用。
解法:先查看連接埠保留範圍與安全性紀錄,再選擇允許使用的連接埠;不要把長期提升權限當成通用解法。
netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp
確實需要更換連接埠時,可在 v2rayN 的「設定」→「參數設定」中尋找目前版本的本機監聽連接埠選項;介面中的分類名稱可能不同,請以設定輸出為準。例如將測試連接埠從 10808 改成 10818 前,先確認 10818 未被占用且未受限制。重新啟動核心後,也要同步修改手動設定的瀏覽器代理、終端機代理環境變數及其他呼叫端。
判斷方式:更換連接埠後,必須驗證呼叫端
新連接埠已成功監聽,但應用程式仍連到舊連接埠,表示呼叫端設定尚未同步,並非新的核心啟動故障。先確認實際監聽端點,再檢查系統代理與終端機環境變數,避免在兩個問題之間反覆修改。
四、確認核心檔案:路徑、架構與相依資源
如果連設定測試都無法執行,排查重點應轉向程式檔案。先確認記錄中的完整路徑確實存在,再確認程式能否直接輸出版本資訊。v2rayN 介面所在的資料夾不一定就是核心資料夾;從其他目錄隨意執行同名程式,測到的可能是另一份 Xray。
- 路徑:在 PowerShell 中,含空格的完整路徑應搭配呼叫運算子
&使用;設定檔路徑也應加上引號。 - 架構:確認所選安裝套件與作業系統及處理器相容。程式無法載入時,請先排除架構或系統相容性問題。
- 檔案狀態:查看系統安全軟體的隔離與封鎖紀錄,確認實際遭到阻擋的是哪個檔案。不要直接停用整套安全防護。
- 資源:使用
geosite:或geoip:分類的規則需要相應的資源檔案;資源缺失與 JSON 語法錯誤應分開處理。
如果記錄中出現 failed to open file 或 The system cannot find the file specified.,請繼續查看後續指出的具體檔名。缺少的可能是執行檔、設定檔或規則資源,處理方式完全不同。使用相對路徑時,也要檢查啟動工作目錄與資源搜尋位置,不能只確認「檔案在某個資料夾裡」。
五、重新測試的順序:設定通過後,再驗證一次本機請求
排錯結束後,應完成可重現的驗證流程,而不是看到介面狀態變化就停止。維持節點、路由與代理模式不變,只驗證剛才修正的環節。以下請求範例僅適用於已確認 10808 提供 HTTP 代理或相容的混合入站;若目前入站只提供 SOCKS,必須使用相應的代理協定。
# HTTP 代理或支援 HTTP 的混合入站
curl.exe --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 https://example.com/
# 僅 SOCKS 入站:由代理端解析目標網域
curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 https://example.com/
- 設定階段:確認同一份執行設定通過核心測試,並儲存修正後的來源設定。
- 啟動階段:確認核心沒有立即退出,且啟動記錄不再出現原本的錯誤。
- 監聽階段:再次查詢目標連接埠,確認所屬程序是這次啟動的核心程序。
- 請求階段:向指定的代理端點送出一次請求,再比對記錄中的目標與出站紀錄。
範例中的 10 秒連線逾時與 20 秒總時限只是測試參數,不是效能標準。出現本機「連線遭拒」時,請回頭檢查監聽端點;已連上代理後才發生遠端逾時,則繼續檢查節點、DNS 與路由。一次請求成功也不能證明所有路由都符合預期,但能區分「核心無法啟動」與「特定連線失敗」。
六、常見問題:訂閱、設定測試與重新安裝
更新訂閱後突然無法啟動,要先刪除訂閱嗎?
先保留現有群組與錯誤紀錄。切換到同一群組中的另一個設定進行測試,比較問題是否只發生在單一節點;接著檢查新增的傳輸欄位是否符合所選核心。刪除整個群組會失去比對線索,無法取代錯誤定位。
JSON 檢查器顯示沒有問題,為什麼 Xray 還是退出?
通用檢查器主要檢查語法,無法理解所有核心欄位與執行相依項目。請使用實際的 Xray 執行設定測試,再檢查啟動時是否因監聽衝突或資源缺失而退出。不要將包含憑證的設定提交給線上檢查服務。
修改後的設定一重新啟動就還原,要怎麼儲存?
你修改的很可能是暫時產生的檔案。先找到對應的自訂設定、路由規則,或「設定」→「參數設定」中的來源項目;直接在來源處修正,然後重新啟動並確認新產生的設定已包含變更。
重新下載安裝套件能解決連接埠占用嗎?
無法直接解決。先查詢 10808 等實際連接埠的 PID;如果占用程序仍在,新安裝的核心一樣可能無法繫結。只有確認檔案缺失、無法執行或架構不相容時,才優先改選合適的安裝套件,並保留設定備份。