適合已在 v2rayN 開啟系統代理,瀏覽器或命令列工具仍無法連線的桌面使用者。先確認本機代理入口正常,再依序檢查瀏覽器擴充功能、系統代理設定來源、終端機環境變數與略過清單。比對明確指定代理與直接連線的結果,就能判斷問題出在應用程式設定、本機監聽,還是遠端連線,避免一再更換節點,卻沒有改變請求路徑。
系統代理不代表所有應用程式都會使用代理
v2rayN 的「系統代理」主要是將本機代理位址寫入作業系統的代理設定。應用程式是否讀取這項設定,取決於應用程式本身。瀏覽器通常會讀取系統代理,但擴充功能、啟動參數或組織政策也可能覆蓋設定;curl 等命令列工具通常使用自己的參數與環境變數。不能只看系統匣選單已勾選,就認定終端機的請求已經送進用戶端。
還要分清「請求進入用戶端」與「請求透過遠端代理連線」。請求即使抵達本機入口,也可能因路由規則而直接連線。系統代理負責選擇入口,路由分流則決定後續的出站方式,兩者屬於不同設定層。VMess、VLESS 等節點協定不是瀏覽器應填入的代理類型;瀏覽器應連線至用戶端提供的 HTTP 或 SOCKS 本機入口。
- 只有瀏覽器無法連線:先檢查擴充功能、瀏覽器專用代理設定與系統代理位址。
- 只有終端機無法連線:先確認命令是否支援代理,再檢查參數、環境變數與略過清單。
- 瀏覽器與終端機都無法連線:先測試本機連接埠是否正在監聽,再檢查核心記錄與節點連線。
- 只有部分網域無法連線:確認代理入口正常後,再檢查網域分流、DNS 解析與目標網站回應。
先確認 v2rayN 本機監聽連接埠
以下範例使用 127.0.0.1:10808 作為已啟用 HTTP 代理功能的本機入口。這是排查時使用的範例位址,並非所有版本與設定都固定使用此值。先在 v2rayN 的「設定」→「參數設定」中查看本機監聽連接埠與入口類型;不同版本的名稱可能是「本機混合監聽連接埠」等,請以目前介面顯示為準。若 HTTP 與 SOCKS 分別監聽,請使用 HTTP 對應的連接埠。
在 Windows PowerShell 中,先確認連接埠正在監聽,再執行明確指定代理的請求。此處使用 curl.exe,避免部分 Windows PowerShell 環境將 curl 解讀為其他命令。測試前請保持 v2rayN 執行,並確認目前節點與核心都已啟動。
Get-NetTCPConnection -State Listen -LocalPort 10808
curl.exe -I --connect-timeout 10 --max-time 20 --proxy http://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" https://example.com/
這個命令將略過清單限定為本機位址,因此存取範例網域時仍會使用指定的代理。若收到目標網站的 HTTP 回應,表示這次請求至少已建立代理通道並連上目標;若記錄也顯示符合直連規則,就不能據此判定請求經過遠端節點。單獨看到 200 Connection established 只代表 HTTP CONNECT 通道已獲接受,還要繼續確認目標網站的回應。
分三步排除瀏覽器擴充功能衝突
明確指定代理的測試成功,但瀏覽器仍無法連線時,優先確認「是哪個設定在控制瀏覽器代理」。同一個瀏覽器若安裝多個代理擴充功能,可能同時啟用固定代理與自動設定指令碼。擴充功能圖示顯示的模式,也不一定等同於作業系統儲存的代理模式。
-
停用代理擴充功能
在 Chrome 開啟「選單」→「擴充功能」→「管理擴充功能」;在 Edge 開啟「選單」→「擴充功能」→「管理擴充功能」。暫時停用所有會變更代理設定的擴充功能,記下原本的狀態,再完全結束並重新啟動瀏覽器。只關閉目前分頁並不足夠。
-
確認系統代理入口
在 Windows 11 開啟「設定」→「網路和網際網路」→「Proxy」,確認「使用 Proxy 伺服器」中的位址與連接埠是否符合 v2rayN 目前的監聽入口。若已啟用「使用設定指令碼」,先記下指令碼位址,再確認它是否為目前所需的設定。
-
單獨恢復測試
重新開啟相同的測試網址。若停用擴充功能後恢復正常,只重新啟用一個代理擴充功能,並明確選擇「使用系統 Proxy」或正確的固定代理設定。每次只變更一項,再用相同網址測試,避免同時更動快取、節點與規則。
Firefox 還需檢查「設定」→「一般」→「網路設定」→「設定」,確認選取「使用系統 Proxy 設定」,而非舊的手動代理或自動代理設定網址。若瀏覽器顯示代理設定由組織管理,請先聯絡裝置管理員;重新安裝 v2rayN 通常無法解除瀏覽器政策。
- 無痕視窗並非完全隔離:擴充功能可能獲准在無痕模式中執行,系統代理與裝置政策也仍然有效。
- 新增分頁不等於啟動新程序:程序可能仍沿用啟動時的代理參數;必要時請在工作管理員確認瀏覽器已完全結束。
- 請勿先變更憑證:一般 HTTP CONNECT 代理不需要在瀏覽器安裝根憑證。遇到憑證錯誤時,先確認系統時間、目標網域與網路環境。
為終端機個別設定環境變數
終端機只是執行程式的環境,不會替每個程式自動連上系統代理。curl 通常會讀取代理環境變數,其他命令則可能使用自己的設定檔或命令列選項。先用上一節的 --proxy 參數明確指定代理來確認連線,再設定變數,就能區分「代理服務無法使用」與「程式未讀取設定」。
Windows PowerShell:只修改目前工作階段
Get-ChildItem Env: | Where-Object Name -Match '^(http_proxy|https_proxy|all_proxy|no_proxy)$'
$env:http_proxy = "http://127.0.0.1:10808"
$env:https_proxy = "http://127.0.0.1:10808"
$env:no_proxy = "localhost,127.0.0.1"
curl.exe -I --connect-timeout 10 --max-time 20 https://example.com/
https_proxy 對應 HTTPS 目標請求,但變數值仍可設為 http://127.0.0.1:10808:這裡描述的是本機代理服務所使用的協定,curl 會透過 HTTP CONNECT 建立通道,並非改用明文存取 HTTPS 網站。不要只因變數名稱含有 HTTPS,就直接將入口改成 https://。
macOS 與 Linux:留意環境變數大小寫
env | grep -iE '^(http_proxy|https_proxy|all_proxy|no_proxy)='
export http_proxy="http://127.0.0.1:10808"
export https_proxy="http://127.0.0.1:10808"
export no_proxy="localhost,127.0.0.1"
curl -I --connect-timeout 10 --max-time 20 https://example.com/
在區分大小寫的環境中,curl 的 HTTP 代理變數應使用小寫 http_proxy;只設定大寫 HTTP_PROXY 可能不會生效。其他工具的支援方式不盡相同,請參閱各工具的說明文件。本文先使用工作階段層級的設定,確認有效後再考慮寫入 shell 啟動檔,避免每次開啟終端機都自動使用錯誤的連接埠。
一併檢查略過清單並比對直連結果
no_proxy 或 NO_PROXY 用來指定哪些目標不經過代理。若清單包含測試網域,或設為 *,即使代理變數正確,程式仍可能直接連線。另一種常見情況是舊的 all_proxy 指向已關閉的 SOCKS 連接埠;不同程式採用的優先順序可能不同,因此要一併檢查相關變數,而非只查看 https_proxy。
| 比對結果 | 優先檢查項目 | 下一步 |
|---|---|---|
| 明確指定代理成功,預設請求失敗 | 應用程式代理設定來源 | 檢查環境變數、獨立設定與略過清單 |
| 明確指定代理失敗,直接連線成功 | 本機入口或代理出站 | 檢查監聽連接埠、入口協定與核心記錄 |
| 終端機成功,瀏覽器失敗 | 瀏覽器覆蓋設定 | 停用代理擴充功能,確認系統代理與瀏覽器政策 |
| 兩種請求都失敗 | 網路或目標連線 | 先確認基本網路連線,再檢查 DNS 解析、交握與目標網站 |
在 Windows 中,可用以下兩個命令連線至同一個目標。第一個明確使用本機代理;第二個使用 --noproxy "*" 明確直接連線。macOS 與 Linux 只要將命令名稱改為 curl 即可。範例網域僅用於比對連線狀況;直連與代理都成功並不異常,也無法據此判斷出口地區。
curl.exe -I --connect-timeout 10 --max-time 20 --proxy http://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" https://example.com/
curl.exe -I --connect-timeout 10 --max-time 20 --noproxy "*" https://example.com/
結論:先固定請求路徑
明確指定代理成功、預設請求失敗時,先修正應用程式讀取代理設定的方式,不要先更換節點。只有確認請求進入同一個本機入口後仍失敗,才進一步檢查路由與遠端連線。
依 curl 錯誤訊息判斷失敗階段
瀏覽器顯示的「無法存取」通常過於籠統。curl 的錯誤代碼更適合用來區分入口連線、代理協定與 TLS 階段。以下列出常見錯誤訊息片段;完整輸出中的耗時、位址與後續說明會因作業系統及 curl 版本而異。
錯誤:curl: (7) Failed to connect
原因與處理方式:無法連線至指定位址;若輸出指向 127.0.0.1,先確認 v2rayN 核心正在執行、連接埠正確且已有監聽,無須先排查遠端 TLS。
錯誤:curl: (5) Could not resolve proxy
原因與處理方式:無法解析代理主機名稱;請檢查代理變數中的位址拼寫、協定前綴與引號。使用本機入口時,應填入實際的回送位址與連接埠。
錯誤:curl: (6) Could not resolve host
原因與處理方式:無法解析目標主機名稱;先確認請求是否意外直接連線,以及是否使用由本機解析的 SOCKS 模式,再根據記錄檢查解析路徑。不要將此錯誤直接視為節點逾時。
錯誤:curl: (28) Connection timed out
原因與處理方式:連線未能在時限內完成;請根據錯誤訊息中的位址與核心記錄,區分本機入口連線和後續遠端連線,再確認節點位址、連接埠與網路可達性。
錯誤:curl: (60) SSL certificate problem
原因與處理方式:憑證驗證失敗;請檢查系統時間、憑證信任鏈,以及是否遭到網路攔截。請勿關閉憑證驗證,將問題當成已解決。
需要更多細節時,可在原命令後加上 -v,查看實際連線位址、代理變數提示與交握階段。對外分享記錄前,請移除訂閱網址、驗證資訊、代理憑證與敏感請求標頭;不必公開完整設定,也不要將完整的終端機環境變數清單貼到公開討論區。
還原設定並確認排查結果
測試完成後,只保留一種明確的代理控制方式。日常瀏覽器若使用系統代理,就讓擴充功能沿用系統設定;終端機需要代理時,則在對應的工作階段設定變數。不要同時保留系統代理、擴充功能固定代理、自動設定指令碼與多組舊環境變數作為「備用」,否則下次故障時很難還原請求路徑。
- 清理 Windows 工作階段:依測試前的紀錄還原原值;若原本沒有設定變數,可用下方命令移除本次新增的項目。
- 清理其他 shell 工作階段:同樣先還原舊值;只有原本未設定時,才使用
unset移除變數。 - 用戶端收尾:不再使用系統代理時,請在 v2rayN 系統匣選單的「系統代理」中選取「清除系統代理」,再結束用戶端;選單文字可能因版本而異。
- 記錄結果:記下實際使用的連接埠、入口類型、瀏覽器代理設定來源,以及明確指定代理與直接連線的測試結果,下次依相同條件重測。
# PowerShell:僅移除本次新增且原先不存在的變數
Remove-Item Env:http_proxy, Env:https_proxy, Env:no_proxy -ErrorAction SilentlyContinue
# Bash / Zsh:僅移除本次新增且原先不存在的變數
unset http_proxy https_proxy no_proxy
若明確指定代理後已能連線,但部分網域的出站方式仍不如預期,請接著閱讀路由分流說明;若本機入口與節點連線都無法建立,可依連線故障疑難排解繼續檢查。先分層確認入口與應用程式設定,再調整 DNS、路由或節點參數,才能判斷是哪項變更真正解決問題。