排查日誌時,先確認實際執行的核心,再區分存取紀錄與診斷資訊。本文適合遇到 v2rayN 網頁無法開啟、v2rayNG 連線逾時或 v2flyNG 解析失敗的使用者:從可重現的請求開始,依序檢查本機入站、路由出站、DNS、TCP 與 TLS,避免看到一則 error 就反覆更換整份訂閱。
1. access 與 error 日誌各記錄哪些資訊
v2rayN 是用戶端介面,V2Ray 與 Xray 則是處理連線的核心;日誌格式取決於實際啟動的核心及其版本。v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心。開始排查前,先從啟動輸出記下核心名稱與版本,不要只記用戶端名稱。
| 紀錄類型 | 主要內容 | 無法據此證明的事項 |
|---|---|---|
| access | 連線來源、目標位址,以及部分格式中的入站與出站標籤。 | 出現 accepted 不代表目標網頁已成功回傳。 |
| error | 核心啟動、建立連線、解析與傳輸過程中的診斷資訊。 | 檔名包含 error,不代表裡面的每一行都是錯誤等級。 |
| 用戶端執行輸出 | 可能包含核心標準輸出、用戶端事件與訂閱請求資訊。 | 訂閱更新失敗不一定代表代理出站連線失敗。 |
例如存取日誌出現 accepted tcp:example.com:443,通常表示本機入站已接收這項請求。後續仍可能發生節點連線逾時、TLS 驗證失敗或遠端關閉連線。若日誌包含 [入站標籤 -> 出站標籤],可用來確認路由分流;標籤名稱則取決於目前的設定。
2. loglevel 怎麼選:日常用 warning,重現問題時暫用 debug
V2Ray 與 Xray 常見的日誌等級有 debug、info、warning、error、none。從 debug 到 error,輸出內容會逐步減少;none 則用來關閉這類診斷輸出。存取日誌有獨立的輸出設定,不能只根據 loglevel 判斷是否啟用了 access 日誌。
- debug:包含更詳細的處理過程,適合短時間重現問題;但不同核心或版本輸出的欄位不一定相同。
- info:適合觀察連線與路由行為,日誌量通常比 debug 少。
- warning:適合作為日常排查的起點,保留警告及更嚴重的資訊。
- error:只顯示錯誤,但可能缺少判斷問題成因所需的前後資訊。
- none:排查問題時不建議使用,否則容易把「沒有紀錄」誤認為「沒有請求」。
在 v2rayN 的「設定」→「參數設定」中,尋找目前版本提供的日誌等級選項,儲存後重新啟動核心。不同介面的分類名稱可能不同,請以目前使用的介面為準。使用 v2rayNG 或 v2flyNG 時,也先在設定中尋找日誌相關選項,再開啟日誌檢視畫面;不要把訂閱清單當成核心執行日誌。
以下是核心設定中的 log 欄位範例,並非可直接啟動的完整設定檔,僅用來說明欄位關係。用戶端管理的設定應優先透過介面修改;手動變更產生的檔案,可能在下次啟動時被覆寫。
{
"log": {
"access": "C:/Temp/v2ray-logs/access.log",
"error": "C:/Temp/v2ray-logs/error.log",
"loglevel": "debug"
}
}
範例使用 Windows 絕對路徑。請先建立 C:\Temp\v2ray-logs,並確認啟動核心的帳戶具有寫入權限。啟用檔案輸出後,部分內容可能不再顯示於原本的主控台視窗,請一併檢查指定檔案。完成一次問題重現後,請恢復為 warning,避免日誌持續增加。
3. 連線逾時或遭拒:先確認失敗的位址
以下各項列出的是常見日誌中的錯誤片段,並非固定格式的完整日誌範本。模組前綴、套件路徑與包裝層數會隨核心版本而異。閱讀時先找出最內層的原因,再確認它對應的是節點伺服器、DNS 伺服器,還是目標網站。
錯誤:dial tcp …: i/o timeout
原因:無法在期限內與日誌指定的位址建立 TCP 連線。
解法:先確認失敗位址是否為節點端點,再檢查節點連接埠、目前網路及伺服器端入站設定;若位址屬於目標網站,則應檢查遠端出口至目標的連線狀況。
錯誤:connect: connection refused
原因:連線遭到明確拒絕,常見原因是目標連接埠沒有服務監聽,或網路設備主動拒絕連線。
解法:確認錯誤訊息中的 IP 與連接埠;若為 127.0.0.1:10808,先確認本機核心已啟動,且監聽連接埠設定一致,不要先更換遠端節點。
錯誤:context deadline exceeded
原因:某項操作超過時限,僅憑這行訊息無法判斷問題發生於 DNS、連線撥號或交握階段。
解法:保留前後相關日誌,找出同一連線的模組名稱與更內層錯誤,再判斷問題發生階段。
Windows 可能會以包含 connectex 的系統錯誤訊息顯示連線遭拒,而非上述英文文字;排查原則相同。逾時表示等待未完成,遭拒則表示收到否定回應;兩者都不能直接推斷 VMess 或 VLESS 設定一定有問題。
判斷重點:錯誤位址比「逾時」兩字更有用
先將錯誤位址分類為本機監聽、節點端點或目標服務,再只檢查該段連線。節點使用其他連接埠時,請以訂閱設定為準,不要一律改成 443。
4. TLS 交握失敗:分別檢查憑證、網域與系統時間
TLS 交握發生在底層連線建立之後,但交握失敗的原因不只有憑證。若以為 TCP 連得上就代表節點完全可用,便可能忽略 SNI、傳輸路徑與伺服器端參數不一致等問題。使用 VLESS 的節點也不一定採用相同的安全層;請先確認設定實際使用 TLS、REALITY 或其他組合。
錯誤:x509: certificate has expired or is not yet valid
原因:憑證有效期限與目前系統時間不符,可能是本機時間錯誤,也可能是伺服器憑證已過期。
解法:先校正系統日期、時區並確認時間同步正常;若時間無誤,請服務提供者檢查憑證是否續期及憑證鏈是否完整。
錯誤:x509: certificate signed by unknown authority
原因:目前環境無法建立可信任的憑證鏈,可能與缺少中繼憑證、本機信任存放區或網路中的憑證遭替換有關。
解法:檢查伺服器憑證鏈與本機信任環境,不要將停用憑證驗證當成一般修復方式。
錯誤:tls: handshake failure
原因:TLS 協商遭到拒絕,僅憑這段訊息無法判斷具體參數。
解法:依照服務提供者的設定,核對伺服器名稱、TLS 設定與傳輸方式,再比對同一時間的伺服器端日誌。
- 伺服器位址與 serverName:位址用來建立連線,伺服器名稱則用於 TLS 等環節;兩者可能不同,但不能任意互換。
- WebSocket 等傳輸方式:確認 Host 與路徑。HTTP 404、403 等回應可能來自反向代理或錯誤路徑,不能直接歸類為憑證錯誤。
- REALITY 設定:依照實際設定核對公鑰、shortId 與伺服器名稱,不要套用一般憑證續期的處理方式。
- EOF:表示讀取時已到達資料流結尾,本身不代表驗證失敗;需依發生於交握前、交握中或正常傳輸結束時判斷。
5. DNS 解析失敗:分清節點網域與目標網域
只說「DNS 有問題」仍不夠明確。用戶端可能需要先解析節點伺服器網域;建立代理連線後,目標網站網域則可能由本機或遠端解析。路由中的 domainStrategy 也可能為了比對 IP 規則而觸發解析,這與出站的網域解析策略不同。
| 日誌片段 | 訊息所能判斷的範圍 | 下一步 |
|---|---|---|
lookup …: no such host | 這次解析未取得可用的名稱結果,可能是網域不存在或收到否定回應。 | 確認錯誤網域的拼寫,判斷它是節點還是網站,再檢查實際使用的解析器。 |
failed to lookup ip | 上層訊息指出 IP 查詢失敗,具體原因通常會出現在後續或更內層的資訊中。 | 繼續尋找逾時、空結果或解析器連線錯誤,不要只停留在這句概括訊息。 |
read udp …: i/o timeout | 若錯誤位址是 DNS 伺服器,可能是 DNS 回應未及時傳回。 | 檢查至解析器的網路路徑、UDP 是否可連通及相關路由設定。 |
在 Windows 上可使用以下命令查看系統解析結果。這裡的 example.com 僅用於示範命令;實際排查時請換成日誌中的網域。系統命令執行成功,只代表系統解析器可用,無法證明核心內建 DNS、加密 DNS 或透過代理查詢的路徑也正常。
Resolve-DnsName example.com
6. 以單次請求串起日誌:本機監聽 → 路由 → 遠端
重現問題前,先暫時關閉會產生大量背景連線的應用程式,並固定使用一個節點和一種代理接入方式。以下以 Windows 及 HTTP 或混合入站 127.0.0.1:10808 為例;若目前連接埠只接受 SOCKS,請使用相應的 SOCKS 測試命令,不要將協定不符誤判為節點故障。
- 檢查監聽:在 PowerShell 中查詢本機連接埠。若沒有監聽,先處理核心啟動或連接埠設定,暫時不必檢查遠端憑證。
- 暫時啟用詳細日誌:記下開始時間,只發出一次測試請求,再查看該時段的 access 與 error 輸出。
- 檢查入站:若沒有存取紀錄,先確認 access 已啟用且查看位置正確,再確認應用程式是否確實使用代理。
- 檢查路由:若輸出包含出站標籤,確認請求是否進入預期的代理出站;直連、封鎖與代理出站須分開判斷。
- 追查最內層錯誤:依 DNS、TCP、TLS、協定驗證與目標服務的順序逐一定位。每次只修改一項相關設定,再重送相同請求。
Get-NetTCPConnection -LocalPort 10808 -State Listen
curl.exe --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
這條 curl 命令會明確指定代理,不依賴瀏覽器或系統代理開關;10 秒是連線階段的逾時上限,20 秒是整個命令的執行時間上限,兩者都是本次測試參數,不是核心效能指標。HTTP 代理輸出顯示通道建立成功,也不代表後續 TLS 與網頁回應正常,請繼續檢查完整結果。
curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
第二條命令僅適用於實際支援 SOCKS 的入站。socks5h 會將目標網域交由 SOCKS 代理解析;一般的 socks5 通常由 curl 在本機解析目標網域。比較兩種方式時,請留意解析位置已經改變,不要把結果差異全歸因於節點速度。
判斷重點:明確指定代理可連線、瀏覽器卻不行,先檢查流量入口
使用相同節點與目標時,若明確指定代理的請求成功,但瀏覽器沒有對應的 access 紀錄,請優先檢查系統代理、瀏覽器擴充功能與略過清單;此時反覆修改 VMess 或 VLESS 參數,通常無助於解決問題。
7. 日誌排查常見問題與回報資訊
為什麼日誌一直出現 warning,但網頁仍能開啟?
先依時間與目標確認 warning 屬於哪項請求。背景應用程式、已取消的連線或無法連線的附屬資源都可能產生紀錄。單一警告不代表所有流量都失敗;請使用固定目標重現問題,並確認對應請求是否真的失敗。
開啟 debug 後,日誌視窗仍是空白,怎麼辦?
先確認儲存設定後已重新啟動核心,再檢查是否設定檔案輸出。若日誌寫入檔案,請確認絕對路徑與目錄權限;同時確認目前查看的是核心輸出,而非訂閱更新紀錄。
看到 accepted,是否代表節點已連上?
不是。這通常只表示入站已接受請求。請繼續沿著同一連線查看出站撥號與交握資訊,並以 curl 的最終回應確認目標是否可連線,不要只截取 accepted 那一行就下結論。
訂閱更新逾時,也要當成節點連線逾時處理嗎?
先區分訂閱網址請求與代理資料連線。檢查訂閱更新是否經由代理、目前代理是否可用,以及訂閱服務本身是否能連線。回報問題時請遮蔽訂閱網址中的權杖,不要公開完整訂閱連結。
若需要進一步求助,提供足以串起同一次失敗的最少資訊,比整個畫面的截圖更有幫助。日誌可能包含存取網域、伺服器位址與本機路徑;分享前請檢查內容,在保留錯誤類型與關聯資訊的同時,移除帳號識別資訊、UUID、密碼、私鑰及訂閱權杖。
- 環境:作業系統、用戶端版本,以及實際核心名稱與版本;版本資訊可從本機介面或啟動輸出確認。
- 接入方式:系統代理、明確指定的 HTTP/SOCKS 代理或 TUN;請註明實際本機監聽連接埠。
- 重現條件:目標類型、發生時間、是否所有節點都會失敗,以及更換網路後能否重現。
- 日誌片段:保留同一請求前後的上下文、錯誤鏈與出站標籤;敏感位址請以一致的文字標記取代。
- 已嘗試的操作:逐項記錄變更過的設定及結果,排查完成後恢復日常日誌等級。