適合已在 v2rayN 選好節點,卻發現瀏覽器與終端機連線狀況不同的 Windows 使用者。先用明確指定代理的指令檢查本機入口,再確認瀏覽器實際讀取的設定,最後檢查終端機環境變數。每次只變更一項,就能釐清問題出在應用程式、監聽連接埠或代理出口,不必反覆重新安裝用戶端。
系統代理不會接管所有流量
v2rayN 的系統代理功能,主要是將本機代理位址寫入系統設定。應用程式是否讀取這項設定,取決於應用程式本身。瀏覽器可能採用系統設定,也可能使用擴充功能或個別設定;命令列工具則常讀取環境變數或自己的設定檔。因此,「瀏覽器能用,終端機不行」並不矛盾。
也要分清兩層路由:應用程式先決定是否將請求送至本機代理;核心收到請求後,再依路由規則選擇直連或代理出口。請求進入 v2rayN,不代表一定會經過遠端節點;即使已啟用系統代理,也不代表每個處理程序都會將請求送進代理。
- 系統代理:為採用系統設定的應用程式提供代理入口,不代表接管所有網路連線。
- PAC:依據指令碼,回傳代理位址或
DIRECT。使用直連可能是規則判斷的結果,不一定是代理開關失效。 - 終端機代理:常見設定來源包括
http_proxy、https_proxy、ALL_PROXY或工具參數。 - TUN:屬於另一種流量接管方式。本文先關閉 TUN 進行隔離測試,避免與系統代理混淆。
先確認本機連接埠,再測試代理出口
以下以 SOCKS 連接埠 10808 和 HTTP 連接埠 10809 為例,這些並非所有版本通用的固定值。有些設定只提供一個混合連接埠,可同時接收 HTTP 與 SOCKS 連線。請先在 v2rayN「設定」→「參數設定」中查看本機監聽相關選項,並參考啟動記錄確認;介面欄位會隨版本變動,請以實際顯示為準。
在 PowerShell 中執行以下指令。先確認連接埠是否正在監聽,再用 curl.exe 明確指定代理。這裡刻意寫出程式名稱,避免某些 PowerShell 環境將 curl 解讀為其他指令的別名。目標網址僅供連線測試,也可以換成目前正在排查的 HTTPS 網站。
# 查看範例連接埠的監聽狀態
Get-NetTCPConnection -State Listen -LocalPort 10808,10809 -ErrorAction SilentlyContinue |
Select-Object LocalAddress,LocalPort,OwningProcess
# HTTP 代理:略過代理繞過清單,最長等待 20 秒
curl.exe --noproxy "" --proxy http://127.0.0.1:10809 --connect-timeout 10 --max-time 20 -I https://example.com/
# SOCKS 代理:由代理端解析目標網域
curl.exe --noproxy "" --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
使用 HTTP 代理連線至 HTTPS 目標時,通常會先看到 200 Connection established,這只代表 CONNECT 通道已建立。接著還要確認 TLS 交握是否完成,以及目標網站是否有回應。如果網站不接受 HEAD 請求,可以移除 -I,改用 -o NUL -D - 查看 GET 回應標頭。
結論:明確指定代理測試成功後,再檢查應用程式設定
如果指定 --proxy 後能收到目標網站的回應,但瀏覽器仍無法開啟,請優先檢查瀏覽器使用哪個代理設定來源。如果連本機連接埠都無法連線,應先確認核心正在監聽;繼續切換瀏覽器設定並無幫助。
瀏覽器排查:檢查系統設定、擴充功能與 PAC
先用一般瀏覽器視窗測試,不要直接把無痕視窗當成「已停用所有擴充功能」的保證:部分擴充功能仍可獲准在無痕視窗執行。較妥當的方式是暫時關閉代理相關擴充功能,或建立新的瀏覽器設定檔,並完整結束舊的瀏覽器程序後再重新開啟。
-
設定系統代理
在 v2rayN 系統匣選單中選擇「系統代理」→「自動設定系統代理」。確認核心正在執行。此處的「自動設定」是用戶端寫入系統設定的操作,不應直接解讀為使用 PAC。
-
確認系統代理入口
在 Windows 11 開啟「設定」→「網路和網際網路」→「Proxy」,檢查「使用 Proxy 伺服器」中的位址與連接埠。若已啟用「使用設定指令碼」,也請記下指令碼位址,確認是否為目前需要的設定。
-
排除擴充功能覆寫設定
在 Chrome 網址列輸入
chrome://extensions/,在 Edge 輸入edge://extensions/,暫時停用代理切換擴充功能。接著前往瀏覽器「設定」→「系統」或「系統與效能」,開啟電腦的 Proxy 設定,確認實際使用的入口。 -
檢查瀏覽器個別設定
在 Firefox 開啟「設定」→「一般」→「網路設定」→「設定」,測試時選擇「使用系統 Proxy 設定」。若選用「手動 Proxy 設定」或「自動 Proxy 設定 URL」,瀏覽器就不一定會採用 v2rayN 寫入的設定。
-
使用相同網址重新測試
暫時停用不再需要的 PAC 指令碼,確認手動代理指向實際的 HTTP 或混合連接埠,再造訪命令列測試使用的相同目標。測試完成後,請還原原有指令碼、擴充功能與略過規則;不要永久刪除不清楚用途的設定。
如果只有部分網域未經代理,請優先檢查 PAC 是否回傳 DIRECT、系統代理的例外清單,以及核心路由是否符合直連規則。PAC 在請求進入核心之前決定路徑;核心路由則在請求進入之後生效。查看相同時間的連線記錄,有助於判斷問題發生在哪一層。
- 瀏覽器無法開啟,但明確指定代理的指令成功:先檢查擴充功能、個別代理設定與系統政策。
- 瀏覽器可以開啟,但連線記錄顯示直連:檢查核心路由,不要繼續變更瀏覽器連接埠。
- 停用指令碼後恢復正常:檢查 PAC 的網域比對、指令碼位址是否可連線,以及瀏覽器快取。
終端機排查:檢查環境變數與工具個別設定
終端機本身不會決定所有指令的網路連線方式。curl.exe、套件管理工具與執行環境可能各自採用不同的代理設定。先列出目前 PowerShell 程序中的代理環境變數,特別留意 NO_PROXY:即使代理位址正確,符合略過清單的目標仍可能直接連線。
# 查看目前終端機程序中的代理變數
Get-ChildItem Env: |
Where-Object { $_.Name -match '^(HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|NO_PROXY)$' }
# 查看 Windows 的 WinHTTP 代理,並另行記錄這套設定
netsh winhttp show proxy
netsh winhttp show proxy 顯示的內容,並非瀏覽器系統代理頁面的簡單副本。WinHTTP 與使用者層級代理屬於不同的設定系統,不能因為這裡顯示「直接存取」,就斷定 v2rayN 沒有寫入系統代理;也不建議只為了修好一個指令,就貿然修改整台電腦的設定。
以下測試只會修改目前的 PowerShell 工作階段,並在結束時還原原值。請將連接埠換成實際的 HTTP 或混合連接埠。以 http://127.0.0.1:10809 作為 HTTPS 目標的代理位址是正常的:這裡的通訊協定描述用戶端如何連線到本機代理,並非目標網站使用的通訊協定。
$names = @('http_proxy', 'https_proxy', 'ALL_PROXY', 'NO_PROXY')
$saved = @{}
foreach ($name in $names) {
$saved[$name] = [Environment]::GetEnvironmentVariable($name, 'Process')
}
try {
$env:http_proxy = 'http://127.0.0.1:10809'
$env:https_proxy = 'http://127.0.0.1:10809'
Remove-Item Env:ALL_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:NO_PROXY -ErrorAction SilentlyContinue
curl.exe --connect-timeout 10 --max-time 20 -I https://example.com/
}
finally {
foreach ($name in $names) {
if ($null -eq $saved[$name]) {
Remove-Item "Env:$name" -ErrorAction SilentlyContinue
}
else {
Set-Item "Env:$name" $saved[$name]
}
}
}
這段指令執行成功,只能證明目前的 curl.exe 能讀取這些變數。若改用其他工具仍然失敗,請檢查該工具的代理選項、設定檔與執行帳戶。已開啟的終端機通常不會自動套用之後變更的使用者環境變數;確認需要永久保存後,再修改使用者變數並重新啟動終端機。不要一開始就使用全域設定,以免影響範圍過大。
依錯誤訊息判斷原因,不要把所有失敗都歸咎於節點
需要更多資訊時,可在測試指令中加入 -v,觀察連線目標是本機代理還是目標位址。分享輸出內容前,請遮蔽代理驗證資訊、訂閱網址與其他敏感參數。以下列出幾種常見的 curl 錯誤及不同的處理方向。
curl: (7) Failed to connect to 127.0.0.1 port 10809
原因與解法:本機連接埠沒有監聽、位址填錯或連線遭到封鎖。先確認實際使用的連接埠與核心啟動記錄;若連接埠正在監聽,再透過監聽程序的 PID 確認它確實屬於目前的用戶端。
curl: (5) Could not resolve proxy
原因與解法:curl 無法解析代理伺服器的主機名稱。檢查指令、環境變數或工具設定中的代理位址是否拼錯;測試本機代理時,請明確使用 127.0.0.1,不要把目標網址填入代理主機欄位。
curl: (28) Connection timed out
原因與解法:連線或傳輸超過等待時間。查看詳細輸出,確認逾時發生於連線到本機連接埠、建立通道,還是存取目標網站的階段,再搭配核心記錄檢查出口狀況;不能只憑這一行就判定節點失效。
curl: (60) SSL peer certificate or SSH remote key was not OK
原因與解法:TLS 憑證驗證失敗。請檢查系統時間、憑證信任鏈,以及網路是否有 HTTPS 檢查機制;不要將停用憑證驗證當成長期解決方案。
如果本機監聽正常,但 HTTP 與 SOCKS 的明確代理測試都在出口階段失敗,再檢查所選節點、系統時間與遠端設定。使用 VLESS 或 VMess 節點時,也要確認傳輸方式、TLS 與伺服器參數;這些問題無法靠切換系統代理開關解決。更新訂閱後,也請確認目前選取的設定仍然有效,而不只是清單已更新。
常見問題與還原檢查
瀏覽器可以上網,為什麼 PowerShell 仍然逾時?
先用 curl.exe --proxy 指定實際連接埠進行測試。成功後,再檢查目前工作階段的環境變數與個別工具設定。瀏覽器能讀取系統代理,不代表所有終端機程式也會讀取。
只啟用系統代理,為什麼部分網站顯示本機出口?
檢查 PAC、代理例外清單與核心路由。對相同網域發出一次請求,同時查看記錄中的出口選擇;如果符合直連規則,應調整對應規則,而不是隨意將 HTTP 連接埠改成 SOCKS 連接埠。
結束 v2rayN 後瀏覽器也無法上網,該如何復原?
先在系統匣選擇「系統代理」→「清除系統代理」,還原設定後再結束用戶端。若程式已關閉,請前往 Windows「設定」→「網路和網際網路」→「Proxy」,關閉殘留的手動代理;原本由公司設定的指令碼與代理,請勿擅自刪除。
改用 socks5h 就能開啟,是 DNS 出問題嗎?
socks5h 會由代理端解析目標網域,socks5 通常則由本機解析。兩者結果不同,可能表示解析路徑有差異;仍須核對 DNS 回傳的位址與路由記錄,不能只憑這點就認定某個 DNS 服務故障。
最後還原原本的 TUN、PAC、擴充功能與環境變數,每恢復一項就重新測試一次。保留一條可用的明確代理指令作為基準:下次遇到問題時,先確認本機入口與出口,再檢查應用程式是否將流量送進代理。這樣能縮小排查範圍,也能避免把瀏覽器設定問題誤判為節點問題。