適用於 v2rayN 已設定系統代理,但瀏覽器無法開啟目標網站、終端機仍直接連線的情況。先用明確指定代理的請求確認本機入口與節點可用,再分別檢查瀏覽器設定、終端機環境變數及路由記錄。本文以 127.0.0.1:10808 作為本機 HTTP 或混合入口範例;執行前請改成用戶端實際監聽的位址與連接埠。
一、區分系統代理、應用程式代理與路由
v2rayN 的「自動設定系統代理」主要是修改作業系統提供給應用程式讀取的代理設定,不代表所有網路連線都會經過代理。瀏覽器通常會讀取這項設定;命令列工具、背景服務及部分使用獨立網路模組的程式則可能完全忽略。因此,「瀏覽器正常、終端機失敗」通常是應用程式代理入口不同,不應直接判定節點失效。
在這條連線路徑中,系統代理只影響第一個環節;Xray 或 V2Ray 核心收到請求後,才會依路由規則選擇直連、代理或攔截。即使瀏覽器已連上本機連接埠,符合直連規則的網站仍會透過本機網路連出。「對外 IP 沒變」不能單獨用來證明系統代理失效。
| 設定位置 | 影響範圍 | 優先檢查項目 |
|---|---|---|
| 作業系統代理 | 會讀取系統設定的應用程式 | 位址、連接埠、略過清單、PAC |
| 瀏覽器獨立代理 | 該瀏覽器或目前的設定檔 | 擴充功能、手動代理、組織政策 |
| 終端機環境變數 | 支援這些變數的目前程序及其子程序 | 變數名稱、協定、程序繼承 |
| 核心路由 | 已送入核心的請求 | 符合的規則及最終連線方式 |
TUN 是另一種接管網路流量的方式,不等同於系統代理。為減少變數,本文以未啟用 TUN 的情況進行排查;若目前網路仰賴 TUN,請先記錄原有設定,再於可接受連線中斷時進行隔離測試。請勿同時變更 TUN、DNS 與路由,否則難以判斷是哪項設定造成影響。
二、先確認本機連接埠與明確指定代理的請求
在 v2rayN 開啟「設定」→「參數設定」,確認本機監聽相關設定,並查看核心啟動記錄中的監聽資訊。不同版本的分組選項名稱可能不同,請以實際介面和記錄為準。以下數值僅供排查示範,並非所有版本通用的預設值;若連接埠只提供 SOCKS 服務,就不能當作 HTTP 代理使用。
在 Windows PowerShell 中,先查看監聽狀態,再執行明確指定代理的請求。請使用 curl.exe,避免部分 PowerShell 環境中的 curl 別名將命令交給其他工具。macOS、Linux 可將下方第二條命令中的 curl.exe 改為 curl。
Get-NetTCPConnection -State Listen -LocalPort 10808
curl.exe --noproxy "" --proxy http://127.0.0.1:10808 --connect-timeout 5 --max-time 15 -v https://example.com/ -o NUL
--noproxy "" 會在本次測試中清空略過清單,避免既有的 NO_PROXY 造成干擾。macOS、Linux 的輸出丟棄路徑請改為 /dev/null。範例網域僅用來確認連線,也請換成實際無法連線的目標網站重新測試;單一網站測試成功,不代表所有路由及目的連接埠都正常。
- 連線至
127.0.0.1:10808時遭到拒絕:先確認核心是否啟動、連接埠是否填錯,以及監聽位址是否相符。 - 出現
200 Connection established:HTTP CONNECT 通道已建立,但仍須確認 TLS 交握及最終回應。 - 目標網站回傳 HTTP 200、301 或 403:表示已收到應用程式層的回應;403 代表目標網站拒絕存取,不等於本機代理沒有運作。
- 本機入口可連線,但後續逾時:請搭配核心記錄檢查對外連線、DNS 與目標連線,不要再反覆切換瀏覽器代理設定。
判斷方式:明確指定代理成功後,再檢查應用程式
若明確指定代理後能連上同一個目標,但瀏覽器或終端機的預設請求失敗,請優先修正該應用程式的代理入口設定;暫時保留已確認可用的節點與連接埠。
三、瀏覽器沒有走代理時的檢查順序
先讓 v2rayN 保持執行,並選取可用節點,再從系統匣選單「系統代理」→「自動設定系統代理」寫入設定。接著確認作業系統實際儲存的值,不要只看系統匣圖示狀態。其他代理程式、瀏覽器擴充功能或組織政策,都可能在設定寫入後再次覆寫內容。
-
確認系統設定
Windows 11:開啟「設定」→「網路和網際網路」→「Proxy」,查看「使用 Proxy 伺服器」中的位址與連接埠。macOS:開啟「系統設定」→「網路」→目前使用的連線→「詳細資訊」→「Proxy」。Linux 桌面環境的設定位置各異;若使用 GNOME,可檢查「設定」→「網路」→「網路 Proxy」。
-
檢查瀏覽器代理入口
Chrome:開啟「設定」→「系統」→「開啟電腦的 Proxy 設定」。Firefox:開啟「設定」→「一般」→「網路設定」→「設定」,確認是否選取「使用系統 Proxy 設定」;若選擇「不使用 Proxy」或手動設定,就不會如預期沿用系統設定。
-
暫停代理擴充功能
在 Chrome 開啟「擴充功能」→「管理擴充功能」,暫時停用會控制代理的擴充功能,再以全新的瀏覽器設定檔測試。無痕視窗仍可能沿用政策或執行獲准使用的擴充功能,因此不能視為完全隔離的環境。
-
確認略過規則
檢查系統代理例外清單、瀏覽器手動代理中的「不使用 Proxy」清單,以及是否啟用自動設定指令碼。PAC 可依目標選擇直連;未確認規則內容前,請勿假設 PAC 模式會讓所有網站都經過代理。
-
重新啟動後再測試
關閉所有瀏覽器視窗並結束背景程序,再重新啟動。使用與命令列測試相同的完整網址發送請求,同時查看 v2rayN 記錄。Chrome 可在網址列輸入
chrome://policy,確認是否有組織套用的代理政策;受管理的裝置請洽管理員處理。
若瀏覽器請求完全沒有出現在核心記錄中,請先檢查瀏覽器代理入口;不過,只有在已啟用存取記錄且記錄層級適當時,「沒有記錄」才具參考價值。若記錄明確顯示目標採直連,問題出在路由選擇,而非系統代理開關。若請求已送往代理出口但仍失敗,再檢查節點連線及目標網站狀態。
四、分別用環境變數與單次參數測試終端機
終端機工具沒有統一的「使用系統代理」規範。支援代理環境變數的工具,可在目前終端機工作階段設定變數;支援命令列代理參數的工具,則適合用單次明確指定的參數來定位問題。變數只會傳給之後啟動的子程序,已在執行中的編輯器終端機與背景工作不會自動更新。
Windows PowerShell:先設定目前工作階段
$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 --connect-timeout 5 --max-time 15 -v https://example.com/ -o NUL
Get-ChildItem Env: | Where-Object Name -Match 'proxy'
HTTPS_PROXY 中的 http:// 描述的是「終端機到本機代理」使用的協定,不是目標網址的協定。連線至 HTTPS 網站時,HTTP 代理通常會透過 CONNECT 建立通道,因此不應只因目標是 HTTPS,就把變數值改成 https://127.0.0.1:10808。只有在本機入口確實提供 TLS 代理服務時,後者才可能適用。
macOS、Linux:留意變數名稱的大小寫
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 --connect-timeout 5 --max-time 15 -v https://example.com/ -o /dev/null
env | grep -i proxy
在區分大小寫的環境中,curl 對 HTTP 代理特別只讀取小寫的 http_proxy;HTTPS 代理變數則支援對應的大小寫形式。其他工具的規則可能不同,請依工具文件設定。若同名變數的大小寫版本同時存在且值不一致,請先排除衝突,不要再加入更多變數。
NO_PROXY或no_proxy中列出的目標網域會略過代理;部分工具會將*解讀為全部略過。ALL_PROXY可作為部分工具的備用代理設定,但各工具的支援情況不同,也可能被專用變數或命令列參數覆蓋。- 若已確認 SOCKS 入口可用,可用
curl --proxy socks5h://127.0.0.1:10808 https://example.com/進行單次測試;socks5h會讓代理端解析目標網域。 - WSL、容器及遠端終端機中的
127.0.0.1指向各自的環境,不一定是執行 v2rayN 的主機。請勿為了方便連線,就將本機代理開放給整個區域網路。
若明確指定 --proxy 時能成功,但設定變數後卻失敗,請確認工具是否支援該變數、是否有專屬代理設定,以及請求是否符合略過清單。Windows 的 WinHTTP 設定與桌面系統代理是不同的入口;不要為了修復單一終端機工具,就貿然修改全域 WinHTTP 設定。
五、依實際錯誤訊息判斷故障位置
錯誤訊息比「網頁無法開啟」更能幫助定位。以下列出常見的輸出內容,實際文字會因 curl 版本、作業系統及瀏覽器語言而異。記下錯誤發生於本機連線、CONNECT、TLS 或目標回應階段,再決定要修改哪項設定。
curl: (7) Failed to connect to 127.0.0.1 port 10808
原因與解法:本機代理入口未接受連線。確認 v2rayN 核心正在執行,並檢查實際監聽連接埠與程序;若連接埠遭其他程式占用,請先排除衝突,再同步修改應用程式的代理入口。
ERR_PROXY_CONNECTION_FAILED
原因與解法:瀏覽器無法連上設定的代理。確認系統設定與擴充功能儲存的位址,排除舊連接埠、錯誤的代理主機及核心已結束等情況;先使用相同入口執行明確指定代理的 curl 測試。
curl: (5) Could not resolve proxy
原因與解法:代理位址中的主機名稱無法解析,或代理 URL 格式有誤。檢查環境變數是否包含多餘字元,並先使用已確認可用的 http://127.0.0.1:10808,排除代理主機名稱解析問題。
curl: (60) SSL certificate problem: unable to get local issuer certificate
原因與解法:目前 curl 使用的信任存放區無法建立憑證鏈,也可能與組織網路的 TLS 檢查有關。請確認系統時間、憑證來源及 curl 的憑證存放區設定;不要長期關閉憑證驗證來代替修復問題。
curl: (28) Connection timed out
原因與解法:在指定時間內未能完成連線或取得回應,僅憑這則訊息無法判斷故障位置。使用 -v 查看最後成功的階段,再搭配核心記錄區分本機入口、節點對外連線與目標網站逾時。
若瀏覽器運作正常,只有終端機出現憑證錯誤,請勿直接更換節點。瀏覽器與命令列程式可能使用不同的憑證信任存放區。同樣地,若終端機連線成功、瀏覽器卻顯示代理連線失敗,請先比對兩者使用的本機連接埠,而非據此判定整種協定都無法使用。
六、還原設定並保留必要的排查記錄
找出原因後,只保留必要設定。若工作流程確實需要代理環境變數,再將設定寫入對應 shell 的啟動檔,並確認是否影響本機開發服務。臨時測試結束後,可使用下列命令移除本文設定的變數;若測試前已有變數值,請還原原值,不要直接刪除。
清除目前工作階段的變數
# Windows PowerShell
Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:NO_PROXY -ErrorAction SilentlyContinue
# macOS、Linux shell
unset http_proxy https_proxy no_proxy
這不會清除其他位置儲存的設定,例如工具專屬設定、其他大小寫形式的變數、shell 啟動檔或已啟動的子程序。瀏覽器測試時暫時停用的擴充功能,請逐一恢復並重新測試;若恢復某項後故障再度出現,就能找出具體的設定覆寫來源。
- 記錄環境:作業系統、v2rayN 版本、核心類型、是否啟用 TUN,以及本機入口的協定與連接埠。
- 固定請求:使用相同的目標網址,分別記錄明確指定代理、設定環境變數及瀏覽器存取的結果。
- 確認對外連線:保留相應時間的路由比對與錯誤記錄,確認實際採用直連還是代理。
- 保護資訊:分享記錄前,請移除訂閱網址、權杖、節點憑證及不必要的內部網域名稱。
判斷方式:比較同一請求的結果,決定修改範圍
明確指定代理後成功,就檢查應用程式入口;請求進入核心但走錯對外路徑,就檢查路由;已選取代理出口但連線失敗,再檢查節點與網路。每次只調整一個環節,並用同一網址重新測試。