v2rayN 系統代理無法使用:分別排查瀏覽器與命令列終端

瀏覽器無法使用代理與終端命令未走代理是兩種不同問題。本文說明如何分別檢查系統代理、瀏覽器擴充功能衝突及終端環境變數。

本文重點

先確認 v2rayN 的本機連接埠能否接收要求,再分別檢查瀏覽器的系統代理設定與終端的代理參數。本文適合已啟用系統代理,但部分應用程式仍直接連線的 Windows 使用者。依序檢查,可釐清問題是連接埠未監聽、瀏覽器覆寫設定、命令列未讀取代理,還是要求進入用戶端後被路由規則設為直連。

先釐清系統代理、應用程式入口與路由

先保留目前的節點與路由設定,不要同時變更訂閱、DNS 和核心。在 v2rayN 主視窗底部開啟「系統代理」,選擇「自動設定系統代理」。部分版本也能在系統匣圖示的右鍵選單找到相同選項。這裡的「自動設定」是由用戶端代為寫入系統代理設定,不代表所有程式都會經過代理,也不應直接視為 PAC 指令碼模式。

應用程式讀取代理本機連接埠接收比對路由規則建立對外連線回應傳回應用程式

系統代理會告訴支援此設定的應用程式「將要求送至哪個本機位址」。要求進入核心後,路由分流才會決定使用代理連線或直接連線。瀏覽器通常會讀取 Windows 目前使用者的代理設定;命令列程式是否讀取,則視工具而定,不能用瀏覽器的結果代替終端測試。

確認本機連接埠,再進行明確指定代理的測試

開啟 「設定」→「參數設定」,找出本機監聽連接埠相關選項。不同版本可能顯示「本機混合監聽連接埠」,或分別列出 HTTP、SOCKS 連接埠。以下以支援 HTTP 代理的本機連接埠 10808 為例;請依實際設定修改命令,不要將範例連接埠當成固定預設值。

10808
範例本機代理連接埠
127.0.0.1
本機迴路位址
443
HTTPS 目標常用連接埠

在 PowerShell 中執行以下命令。第一條檢查 TCP 連線,第二條列出監聽程序的識別碼,第三條讓 curl 明確連線至本機 HTTP 代理。使用 curl.exe,避免 Windows PowerShell 5.1 中 curl 別名造成參數差異。

Test-NetConnection -ComputerName 127.0.0.1 -Port 10808
Get-NetTCPConnection -LocalPort 10808 -State Listen |
  Select-Object LocalAddress, LocalPort, OwningProcess
curl.exe -q -v --connect-timeout 10 --max-time 30 --noproxy "localhost,127.0.0.1" --proxy http://127.0.0.1:10808 https://example.com/ -o NUL

將 -q 放在第一個參數位置,可略過 curl 預設設定檔;--noproxy 則將本次略過代理的清單限於本機位址,避免既有的 NO_PROXY 讓測試網域意外直接連線。example.com 僅供連線測試,之後請以相同命令測試實際連線失敗且有權存取的目標。

  1. 若 TcpTestSucceeded 顯示 False,請先確認連接埠設定一致、核心已啟動,以及啟動記錄中沒有錯誤。
  2. 若連接埠正在監聽,請依 OwningProcess 確認程序,必要時執行 Get-Process -Id,並在後面填入查到的識別碼。連接埠可連線,不代表監聽程序一定是目前 v2rayN 使用的核心。
  3. 若 curl 顯示已連線至 127.0.0.1,表示應用程式已連到本機代理。透過 HTTP 代理連線至 HTTPS 網站時,通常也會看到 CONNECT 通道交涉資訊。
  4. 若收到目標網站的 HTTP 回應,至少表示這次要求已取得回應;是否經由遠端代理連線,仍須檢查路由記錄。

結論:明確指定代理可用後,再檢查系統設定

如果同一目標使用 --proxy 可以連線,但瀏覽器失敗,請先保留節點與核心設定。接下來只調整瀏覽器讀取代理的方式,比重新匯入訂閱更容易找出原因。

瀏覽器代理無效:檢查 Windows 設定與擴充功能覆寫

在 Windows 11 開啟 「設定」→「網路和網際網路」→「Proxy」→「手動設定 Proxy」。Windows 10 的對應路徑通常是 「設定」→「網路和網際網路」→「Proxy」。確認 Proxy 伺服器位址與連接埠和 v2rayN 設定一致,並檢查例外清單是否包含正在測試的網域。

  1. 重新寫入一次設定。在 v2rayN 選擇「清除系統代理」,再選擇「自動設定系統代理」。返回 Windows 設定,確認位址與連接埠確實已更新,而不只是用戶端選單的狀態有所變化。
  2. 暫時停用代理管理擴充功能。在瀏覽器的「擴充功能」頁面停用會接管代理設定的擴充功能,然後完全關閉並重新開啟瀏覽器。無痕視窗不一定能排除問題,因為部分擴充功能可獲准在無痕模式中執行。
  3. 檢查瀏覽器使用的代理來源。Edge、Chrome 通常會沿用系統設定,但啟動參數和組織原則可能覆寫設定。Firefox 可在 「設定」→「一般」→「網路設定」→「設定」 中選擇「使用系統 Proxy 設定」。
  4. 排除舊程序與既有連線。儲存頁面後關閉所有視窗,確認背景程序已結束,再重新連線至目標頁面。只重新整理現有分頁,可能會繼續沿用先前建立的連線。
  5. 留意設定是否自行變更。若連接埠剛寫入就被改回,請檢查其他網路工具、開機啟動項目及組織原則。受管理的裝置應請管理員確認原則,不要反覆覆寫設定。

如果瀏覽器能開啟一般網頁,只有特定網站異常,請再檢查該網站的路由、DNS 與憑證錯誤。頁面顯示 403 或 429 時,代表網站已傳回 HTTP 回應,可能與存取政策或要求頻率有關,不能直接判定為「系統代理未啟用」。

終端代理無效:先明確指定代理,再設定程序環境變數

先使用前述的 curl.exe --proxy 測試。確認可用後,再決定是否要為終端設定環境變數。Windows 系統代理不是終端程式共用的開關:有些工具會讀取 HTTP_PROXY 和 HTTPS_PROXY,有些使用自己的設定,另有一些需要明確指定參數。

PowerShell:只變更目前視窗及其後續子程序

先查看並記錄目前的變數,再進行暫時設定。以下位址中的 http:// 表示「應用程式連線至本機代理所使用的通訊協定」;即使目標網站使用 HTTPS,本機 HTTP 代理位址通常仍採用這種格式,並透過 CONNECT 建立通道。

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 -q -v --connect-timeout 10 --max-time 30 https://example.com/ -o NUL

第二次測試刻意不加入 --proxy,用來確認工具是否會讀取環境變數。curl 對 HTTP 代理變數的大小寫有特定約定;Windows 環境變數名稱不區分大小寫,若將這些命令改用於區分大小寫的系統,請重新查閱工具文件。測試 HTTPS 時,請特別確認 HTTPS_PROXY。

命令提示字元:使用 set,不要使用 PowerShell 語法

set "HTTP_PROXY=http://127.0.0.1:10808"
set "HTTPS_PROXY=http://127.0.0.1:10808"
set "NO_PROXY=localhost,127.0.0.1"
curl.exe -q -v --connect-timeout 10 --max-time 30 https://example.com/ -o NUL

若要測試 PowerShell 的網頁要求,可使用 Invoke-WebRequest -Uri 'https://example.com/' -Proxy 'http://127.0.0.1:10808' 明確指定代理。不同 PowerShell 與執行階段版本讀取預設代理和環境變數的方式可能不同;一個工具的命令成功,不代表其他命令也一定可用。

依實際錯誤定位:連線遭拒、通道失敗與憑證錯誤

先確認錯誤來自瀏覽器、curl 還是核心記錄,再判斷失敗發生在哪個階段。以下列出常見錯誤片段;實際文字會因版本和目標網站而異。不要只憑「逾時」就認定訂閱失效,也別將所有錯誤都歸咎於 DNS。

ERR_PROXY_CONNECTION_FAILED

原因:瀏覽器無法與設定的代理建立有效連線,常見原因是代理連接埠已停止監聽,或被擴充功能改寫。

解法:確認瀏覽器實際使用的代理位址,再以 Test-NetConnection 檢查相同連接埠,並確認監聽程序。

curl: (7) Failed to connect

原因:TCP 連線建立失敗;若錯誤指向 127.0.0.1 和本機連接埠,表示問題發生在連上代理之前。

解法:檢查核心啟動記錄、監聽位址與連接埠占用情況,先不要修改遠端節點的傳輸參數。

ERR_TUNNEL_CONNECTION_FAILED

原因:瀏覽器透過代理建立通道失敗,可能是連接埠通訊協定不符,或代理無法連線至目標網站。

解法:確認填入的是 HTTP 或混合監聽連接埠,再參考 curl 的詳細輸出與同一時間的核心記錄繼續排查。

curl: (60) SSL peer certificate or SSH remote key was not OK

原因:憑證或信任鏈驗證未通過,不能據此判定要求完全沒有經過代理。

解法:檢查系統時間、目標憑證及受管理網路的憑證政策;不要將停用憑證驗證當成長期解決方式。

如果本機連接埠可連線,但要求在建立通道後停滯,請檢查目標網域、節點連線狀態與 TLS 記錄。透過 HTTP 代理連線至 HTTPS 網站時,通常會將目標主機名稱交由代理處理;若改用 SOCKS 測試,socks5:// 與 socks5h:// 的網域解析位置不同,後者會由代理端解析。比較結果時請確認使用的是哪一種,不能將兩次結果視為完全相同的測試。

要求已進入 v2rayN:檢查路由,別重複疊加入口

開啟主視窗的記錄區,將記錄層級調至能顯示連線資訊,只重新整理一次目標頁面,再依時間查找目標網域、目標連接埠及出口資訊。記錄通常由所選核心輸出,不同核心與版本的欄位名稱可能不同;沒有看到記錄,也可能是記錄層級不足,不能因此認定應用程式一定沒有進入用戶端。

結論:每次只變更一個入口或一條規則

先關閉 TUN,以系統代理進行單一變因測試,再分別比較瀏覽器、明確指定代理的命令與讀取環境變數的命令。確認某個應用程式不支援代理後,再評估使用 TUN;不要同時啟用多種入口,僅憑頁面能開啟就認定已找出問題。

TUN 是另一種流量接入方式,可能涉及虛擬網卡、權限與路由表。它可協助接入不讀取代理設定的應用程式,但無法修正錯誤的節點參數,也不保證涵蓋所有網路流量。若需要設定,請先閱讀 TUN 模式說明,並保留可還原的目前設定。

完成複測後,清除暫存變數並保留排查記錄

先還原測試前的路由、記錄層級與瀏覽器擴充功能狀態。如果暫存變數原本不存在,可在 PowerShell 執行以下清除命令;若先前已有值,請還原記錄下來的原值,不要直接刪除。關閉目前終端通常會結束本次程序層級的變數設定,但已啟動的子程序可能仍保留自己的環境變數副本。

Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:NO_PROXY -ErrorAction SilentlyContinue
  1. 記錄環境資訊:Windows 版本、v2rayN 版本、目前使用的核心及版本、本機監聽連接埠。
  2. 記錄三項測試結果:瀏覽器連線、curl 明確指定代理連線,以及 curl 讀取環境變數連線是否成功。
  3. 記錄失敗階段:本機連接埠連線、CONNECT 通道、TLS 驗證、HTTP 回應,或核心連線至遠端節點。
  4. 整理記錄後再尋求協助:保留時間與錯誤前後文,遮蔽訂閱網址、身分憑證、分享連結及不宜公開的目標資訊。

正常關閉用戶端時,請讓 v2rayN 完成系統代理清理。若用戶端異常結束,瀏覽器又提示代理連線失敗,請回到 Windows 代理設定,確認是否仍指向已停止的本機連接埠。安裝與基本設定可參考 連線驗證步驟;系統代理與路由的概念則可參閱 代理模式說明。

下載v2rayN查看平台與安裝套件