本文快速導覽

適合遇到「用戶端已啟動,但要求失敗」的使用者。先區分用戶端記錄、核心錯誤記錄與存取記錄,再依序檢查本機監聽、DNS、遠端連線、TLS 與協定驗證。錯誤訊息是排查線索,不是最終結論;找出最內層原因後再決定要修改哪個欄位,通常比反覆重新安裝有效。

一、先分辨記錄來源,再重現一次要求

v2rayN 是用戶端,V2Ray 或 Xray 則是實際處理連線的核心。訂閱下載失敗、介面設定儲存失敗屬於用戶端事件;監聽連接埠失敗、代理交握失敗通常來自核心。Android 上的 v2rayNG 使用 Xray 核心,v2flyNG 使用 V2Fly 核心。不同核心與版本的記錄用詞可能不同,不能只靠整行文字搜尋答案。

核心記錄又分為存取記錄與錯誤記錄。存取記錄可用來確認要求是否進入入站、存取哪個目標,以及符合哪個出站;錯誤記錄則用來查看啟動與連線階段的異常。出現 accepted 通常只代表要求已被入站接受,不代表已成功連上遠端,也不代表網頁內容已經傳回。

本機入站 規則比對 出站解析 遠端連線 安全交握 協定驗證

上述連線流程用來區分排查階段,並非每個連線都會依相同順序解析網域名稱。DNS 可能在路由判斷時解析,也可能交由遠端處理。第一步應先找出失敗要求停在哪個階段,不要同時修改 DNS、路由與節點參數。

  1. 儲存目前設定,記下系統時間、選用的節點及實際啟用的核心。
  2. 開啟用戶端提供的記錄檢視畫面,確認看到的是核心執行輸出,而不只是訂閱更新訊息。
  3. 暫時停止其他應用程式的網路要求,存取一個固定目標,只重現一次失敗。
  4. 保留失敗前後連續的記錄,依時間、目標位址與連線識別碼比對同一次要求。

二、如何選擇 loglevel:日常用 warning,排查時暫用 debug

log.loglevel 控制錯誤記錄的詳細程度,不是連線速度設定,也不等同於存取記錄的開關。日常可使用 warning 減少雜訊;重現問題時,則短暫切換為 info 或 debug。找到問題後請恢復原本級別,避免記錄持續增加或暴露更多連線資訊。

級別記錄內容適用情境
debug除錯細節及更高嚴重程度的訊息短時間重現複雜連線問題
info一般執行資訊、警告與錯誤查看啟動、連線及處理過程
warning警告與錯誤日常執行,減少一般資訊
error錯誤只保留明確的失敗訊息
none關閉錯誤記錄輸出不適合用於排查問題

以下是 V2Ray 風格設定中的頂層 log 物件片段,並非完整可執行的設定。使用圖形介面用戶端時,建議優先透過記錄設定調整;用戶端產生的設定檔可能會在下次啟動時遭到覆寫。輸出至檔案或主控台,還取決於記錄路徑設定與用戶端擷取輸出的方式。

{
  "log": {
    "loglevel": "debug"
  }
}

三、connection refused 與連接埠占用:先確認位址在哪一端

connection refused 表示連線遭到主動拒絕,常見原因是目標連接埠沒有服務在監聽,或防火牆主動拒絕連線。先查看錯誤訊息中的 IP 與連接埠:若指向 127.0.0.1,請檢查本機入口;若指向節點伺服器,則檢查遠端服務。混淆這兩種情況,可能會造成修改節點後仍無法連上本機代理。

錯誤:connect: connection refused

原因:該次 TCP 連線遭目標端主動拒絕,不能只憑這行訊息就判定帳號失效。

解決方法:確認同一行中的目標位址與連接埠;若是本機位址,檢查核心是否已啟動;若是遠端位址,檢查節點連接埠及服務的監聽狀態。

錯誤:bind: address already in use

原因:核心無法繫結監聽位址,通常是該位址與連接埠已被其他程序占用。

解決方法:找出占用中的程序、關閉重複啟動的執行個體,或修改本機監聽連接埠,並同步更新應用程式的代理位址。

以下數字僅用於說明常見設定組合,不代表目前版本的固定預設值。有些設定會將 HTTP 與 SOCKS 合併至同一個混合入口;請以用戶端實際顯示的監聽項目為準。遠端使用 443 也不代表服務一定採用 TLS。

10808
本機 SOCKS 連接埠範例
10809
本機 HTTP 連接埠範例
443
遠端 TLS 連接埠範例

Windows 可使用以下命令查詢這兩個本機連接埠。輸出最末欄是 PID;請特別確認 TCP 項目是否處於 LISTENING 狀態。接著到工作管理員的「詳細資料」頁面確認程序名稱,不要只憑連接埠號碼就結束不熟悉的程序。

netstat -ano | findstr ":10808"
netstat -ano | findstr ":10809"

四、timeout 與 DNS 錯誤:從最內層原因判斷

i/o timeout 表示某次讀寫超過等待時間;context deadline exceeded 表示操作超過截止時間。這兩者都不能直接說明「節點已失效」。DNS 查詢、TCP 建立連線、TLS 交握或等待回應,都可能發生逾時。應沿著錯誤訊息找出最具體的子錯誤,確認逾時發生在哪個位址及階段。

錯誤:dial tcp ...: i/o timeout

原因:若前後文確認是在 TCP 撥號階段,表示未能在期限內建立連線,可能與路由、封包遺失、流量過濾或遠端無法連線有關。

解決方法:確認遠端位址與連接埠,分別在目前網路及另一個可用網路測試,避免只增加等待時間來掩蓋問題。

錯誤:no such host

原因:網域名稱解析沒有取得可用結果,可能是網域名稱拼錯、缺少 DNS 記錄或解析路徑異常。

解決方法:先確認錯誤中的網域是節點位址還是存取目標,再檢查相應的解析器與網域記錄。

錯誤:failed to find an available destination

原因:這是出站選擇或連線失敗的概括訊息,單憑這句無法判定是 DNS 故障。

解決方法:繼續查看後續巢狀錯誤原因;若出現解析錯誤就檢查 DNS,出現撥號逾時就檢查遠端連線狀態,出現連線遭拒則檢查監聽服務。

例如瀏覽器無法存取,但記錄只出現節點網域的解析錯誤,表示尚未建立與節點的連線,此時不應先修改目標網站的分流規則。反過來說,若節點已連線,只有特定目標網域無法存取,就應檢查該目標的解析與路由結果。

  1. 確認節點的 address 是網域名稱還是 IP,並確認連接埠與伺服器設定一致。
  2. 使用系統工具查詢網域,初步確認本機解析是否正常;Windows 可在 nslookup 後輸入實際的節點網域名稱。
  3. 系統查詢成功不代表核心的 DNS 解析一定正常。請繼續檢查 dns.servers、解析器是否可連線,以及相關路由。
  4. 每次只變更一個項目,並記錄修改前後的錯誤訊息,避免無法判斷是哪項設定生效。

五、TLS 交握失敗:檢查時間、憑證名稱與傳輸參數

TCP 連線成功只代表可以連上遠端連接埠。之後 TLS 仍可能因憑證、伺服器名稱或協定協商失敗而中斷。確認 streamSettings.security 與伺服器要求一致;使用一般 TLS 時,還要檢查 tlsSettings.serverName。伺服器位址與憑證名稱可以不同,但必須符合伺服器的部署方式。

錯誤:x509: certificate has expired or is not yet valid

原因:系統時間不正確,或伺服器憑證不在有效期限內。

解決方法:先校正系統日期、時間與時區;若時間正確,請由伺服器管理者檢查憑證續期及實際部署狀態。

錯誤:x509: certificate signed by unknown authority

原因:用戶端無法將憑證鏈驗證至受信任的根憑證,可能是伺服器缺少憑證鏈,或本機信任環境異常。

解決方法:檢查完整憑證鏈與系統憑證環境,不要將略過驗證當成日常解決方法。

錯誤:remote error: tls: handshake failure

原因:遠端拒絕 TLS 交握;這行訊息並未指出單一確切原因。

解決方法:對照伺服器設定,檢查 SNI、TLS 設定與連接埠;必要時比對伺服器同一時間的記錄。

TLS 成功後仍可能發生傳輸或驗證錯誤。WebSocket 的 path、要求中的 Host,以及 gRPC 的 serviceName 都必須與伺服器設定相符。websocket: bad handshake 常見原因包括路徑、Host、反向代理轉送或傳輸類型不符,不能一概視為憑證問題。

六、從記錄定位設定欄位:依故障階段修改

應依故障階段選擇要檢查的欄位。啟動時就出現監聽失敗,先檢查入站;遠端連線失敗,先檢查出站位址;要求走錯路徑,再檢查路由標籤。下表以常見的 V2Ray 風格 JSON 為例,實際結構請以所用核心及用戶端產生的設定為準。

觀察到的現象優先檢查欄位確認重點
啟動時繫結失敗inbounds[].listen、inbounds[].port位址是否為本機位址、連接埠是否遭占用
應用程式無法連上本機入口inbounds[].protocol應用程式使用的 HTTP 或 SOCKS 是否相符
遠端拒絕連線或撥號逾時outbounds[].settings 中的位址與連接埠節點資訊、遠端監聽、網路路徑
網域名稱解析失敗dns.servers 與相關解析策略網域記錄、解析器連線狀態、解析流量路徑
憑證名稱或 TLS 交握異常streamSettings、tlsSettings.serverName安全類型、SNI、憑證與系統時間
要求進入錯誤的出站routing.rules[].outboundTag、outbounds[].tag規則順序與標籤是否正確對應

VMess、VLESS、Trojan、Shadowsocks 的驗證欄位各不相同。只有進入協定驗證階段後,才需要檢查 UUID、密碼或加密方式;不要把所有錯誤都歸咎於「密碼錯誤」。反覆出現 EOF 也只代表讀取時連線已結束,需依它發生在交握前或資料傳輸後來判斷。

七、記錄排查常見問題

記錄是空白的,代表要求根本沒有進入代理嗎?

先確認核心正在執行、錯誤記錄級別不是 none,且目前檢視畫面確實顯示核心輸出。沒有異常時,錯誤記錄也可能不會新增內容。若要確認要求是否進入入口,可暫時查看存取記錄,並核對應用程式代理位址與實際監聽連接埠。

瀏覽器可以開啟網頁,終端機卻一直顯示連線失敗?

終端機不一定會讀取系統代理設定。請檢查目前終端機的代理環境變數是否指向正在監聽的位址,並確認協定。例如只有在 10809 確實是 HTTP 入口時,才能使用 http://127.0.0.1:10809。若記錄中沒有相應要求,應先檢查應用程式到本機入口之間的連線路徑。

v2rayNG 螢幕關閉後斷線,記錄中也沒有 TLS 錯誤,該怎麼辦?

先確認 Android VPN 連線是否仍在、用戶端程序是否遭停止,再檢查該應用程式的電池用量與背景執行權限。若核心已被系統結束,記錄可能會直接中斷;這與遠端憑證故障不同。調整背景限制後,鎖定螢幕進行測試並記下停止時間。

將 debug 記錄傳給他人前,應刪除哪些資訊?

移除訂閱網址、UUID、密碼、存取權杖,以及不想公開的伺服器位址、存取網域與個人路徑。保留核心類型、錯誤關鍵字、連接埠用途及前後文順序;位址可統一替換為「節點位址」或「目標位址」,不要只留下截掉內容的最後一行截圖。