先使用明確指定代理的 curl 請求,確認本機入口與對外連線,再分別檢查瀏覽器是否讀取系統設定,以及終端機是否繼承代理變數。本文主要以 Windows 上的 v2rayN 為例,並補充 macOS 與 Linux 的終端機指令;適用於「瀏覽器可用但終端機連不上」、「啟用系統代理後仍直接連線」以及「關閉用戶端後網頁打不開」等情況。
一、先區分系統代理、本機監聽與代理對外連線
看到 v2rayN 顯示「自動設定系統代理」,只代表用戶端選擇了寫入系統代理設定的模式,無法證明所有應用程式都會使用這項設定,也無法證明節點已連線。v2rayN 是管理設定的桌面用戶端,實際連線則由正在執行的 V2Ray 或 Xray 等核心處理。分開檢查應用程式是否連到本機連接埠,以及核心是否成功對外連線,才能避免一再更新訂閱,卻沒查到問題所在。
系統代理不是接管整台電腦流量的開關。瀏覽器可能會讀取系統代理,也可能被擴充功能或瀏覽器本身的設定覆蓋;命令列程式通常有自己的參數與環境變數。即使請求已進入核心,路由規則仍可能將其指定為直連。因此,「本機日誌出現連線」與「目標透過代理連線」是兩回事。
- 瀏覽器與終端機都連不上:先確認監聽連接埠,再以相同目標測試節點與對外連線。
- 明確指定代理的請求成功,瀏覽器卻失敗:優先檢查系統設定、擴充功能覆蓋與瀏覽器政策。
- 瀏覽器可用,終端機卻連不上:優先檢查程式參數、代理變數與排除清單。
- 關閉用戶端後無法連線:先確認系統設定是否仍指向已停止監聽的本機連接埠。
二、確認 10808 正在監聽,再進行明確指定代理測試
以下以 127.0.0.1:10808 作為本機混合監聽入口的範例,並非所有安裝環境都使用這個固定值。在 v2rayN 的「設定」→「參數設定」中尋找「本機混合監聽連接埠」;部分版本會將它放在「Core:基礎設定」分頁。如果介面分別列出 HTTP 與 SOCKS 連接埠,以下 HTTP 測試必須填入實際的 HTTP 連接埠,不能直接照用混合連接埠範例。
在 Windows PowerShell 中執行以下兩個指令。第一個查看監聽程序,第二個略過系統代理的自動偵測,直接要求 curl 連線至本機 HTTP 代理。這裡使用 curl.exe,避免舊版 Windows PowerShell 將 curl 解讀為其他指令的別名。將 -q 放在第一個參數位置,可略過 curl 預設設定檔。
Get-NetTCPConnection -State Listen -LocalPort 10808 |
Select-Object LocalAddress, LocalPort, OwningProcess
curl.exe -q --proxy http://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" --connect-timeout 10 --max-time 30 --head https://example.com/
本文以 example.com 作為一般 HTTPS 連線測試目標,並非你的實際網站。重新測試時,請改用發生問題的完整網址,並始終使用相同目標。若目標不支援 HEAD 請求,可移除 --head,並在 Windows 加上 --output NUL 捨棄回應本文。不要只根據某個網站能否在目前網路中直接連線,就判定代理是否正常。
curl: (7) Failed to connect to 127.0.0.1 port 10808
原因與解法:curl 無法連上指定的本機入口;請確認核心是否已啟動、連接埠是否一致,以及監聽位址是否包含 IPv4 迴路位址,再使用實際連接埠重試。
curl: (28) Operation timed out
原因與解法:請求超過逾時限制,僅憑這項提示無法判斷問題出在本機還是遠端;可暫時加上 --verbose 查看連線階段,並比對核心日誌中的逾時目標。
curl: (60) SSL peer certificate or SSH remote key was not OK
原因與解法:憑證信任驗證失敗;請檢查系統時間、目標憑證與網路中的 HTTPS 檢查政策,不要以停用憑證驗證取代問題修復。
結論:明確指定代理成功後,再檢查自動設定
收到目標網站的最終 HTTP 回應,表示這次請求已透過指定入口完成連線;只看到 200 Connection established 還不夠,這只代表 HTTP CONNECT 通道已獲准建立。若收到 403 或 429,應繼續檢查網站的存取政策,而非立即判定連接埠失效。
三、瀏覽器無法連線:依序排除擴充功能、系統設定與 PAC
明確指定代理的測試正常,但瀏覽器仍顯示 ERR_PROXY_CONNECTION_FAILED 時,先確認瀏覽器實際使用的入口。不要把無痕視窗當成可靠的「無擴充功能環境」:部分擴充功能可以在無痕模式中執行,代理設定也可能來自組織政策。排查時請明確停用代理擴充功能,再完全關閉並重新開啟瀏覽器。
-
停用代理擴充功能
在 Chrome 中開啟「擴充功能」→「管理擴充功能」,在 Edge 中開啟「擴充功能」→「管理擴充功能」,停用會修改代理設定的擴充功能。若仍需保留該擴充功能,請記下目前模式與連接埠,稍後再單獨測試並恢復。
-
重新設定系統代理入口
在 v2rayN 系統匣圖示上按右鍵,先在「系統代理」中選擇「清除系統代理」,再選擇「自動設定系統代理」。保持用戶端執行,接著檢查系統實際寫入的值,不要只看系統匣選單中的勾選狀態。
-
確認位址與連接埠
在 Windows 11 中開啟「設定」→「網路和網際網路」→「Proxy」,檢查「手動設定 Proxy」中的「使用 Proxy 伺服器」。自動設定系統代理所使用的一般本機入口,應與用戶端實際監聽的位址及連接埠相符,例如
127.0.0.1與10808。 -
檢查指令碼衝突
在同一頁檢查「使用設定指令碼」。若有舊的 PAC 位址,先記下來源;在個人裝置且不受組織政策管理的情況下,可暫時關閉指令碼,只保留一種代理選擇方式。公司或學校管理的裝置,請先確認管理規範,避免覆蓋組織設定。
-
檢查瀏覽器個別設定
在 Firefox 中開啟「設定」→「一般」→「網路設定」→「設定」,選擇「使用系統 Proxy 設定」後重新測試。若選擇手動設定,必須確認 HTTP Proxy、連接埠及 HTTPS 請求的代理選項,不能假設這些設定會隨系統代理自動更新。
「自動設定系統代理」與「使用設定指令碼」並非同一回事。前者通常由用戶端填入本機代理入口;後者則讓瀏覽器讀取 PAC 指令碼,由指令碼決定每個目標要走代理或直接連線。若 PAC 規則漏掉某個網域,可能只有該網域無法連線;此時應檢查指令碼的回傳結果與快取,而不是同時修改訂閱網址與本機連接埠。
- 設定儲存後立即還原:檢查其他代理工具、開機工作或組織政策是否持續改寫設定。
- 只有一個瀏覽器異常:建立暫時的瀏覽器設定檔進行比對,重點檢查該瀏覽器的擴充功能與個別設定。
- 只有一個網站異常:檢查路由規則、網站狀態與完整網域;其他網站可以開啟,不代表所有分流路徑都正常。
四、終端機無法連線:檢查環境變數與程式自己的參數
瀏覽器可以開啟網頁,但 PowerShell 或其他終端機逾時,並不矛盾。終端機只是啟動程式的外殼,程式是否讀取系統代理取決於各自的實作方式。環境變數通常只會在程序啟動時繼承;在一個終端機視窗中設定變數,不會自動修改另一個已開啟的視窗,也不會寫回瀏覽器的系統代理設定。
先在 PowerShell 中列出目前的代理變數,再為目前工作階段設定 HTTP 代理。這裡的 HTTPS_PROXY 表示存取 HTTPS 目標時使用哪個代理,不代表本機代理位址必須使用 https://。對常見的本機 HTTP CONNECT 入口,仍應使用 http://127.0.0.1:10808。
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,::1"
curl.exe -q --connect-timeout 10 --max-time 30 --head https://example.com/
Windows 的環境變數名稱不區分大小寫;macOS 與 Linux 則要留意大小寫差異。基於安全考量,curl 不會將大寫的 HTTP_PROXY 視為 HTTP 代理變數,因此跨平台範例一律使用小寫。其他命令列工具的支援方式可能不同,不能直接將 curl 的行為套用到所有程式。
# macOS / Linux:僅影響目前 shell 及之後啟動的子程序
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,::1'
curl -q --connect-timeout 10 --max-time 30 --head https://example.com/
| 設定來源 | 常見症狀 | 檢查方式 |
|---|---|---|
| 命令列參數 | 只有特定指令使用錯誤的連接埠 | 檢查啟動指令碼中的 --proxy 或工具專用的代理參數。 |
| 代理環境變數 | 新舊終端機的行為不同 | 在發生問題的視窗中讀取變數,確認是否繼承了舊值。 |
| 排除清單 | 部分網域一律直接連線 | 檢查 no_proxy;在 curl 中,星號 * 代表所有目標都略過代理。 |
| 工具設定檔 | curl 正常,其他工具失敗 | 檢查該工具自己的設定與優先順序,不要假設它支援相同的變數。 |
| 獨立執行環境 | 主機正常,容器或子系統失敗 | 確認環境內迴路位址的意義、可連線的主機位址與防火牆規則。 |
若指令是在容器、虛擬機器或不同網路模式的 WSL 中執行,127.0.0.1 可能指向該環境本身,而非桌面主機。先確認能否連上主機入口,再決定是否需要調整監聽位址;不要為了省事就讓所有網路介面都能存取代理。若確實需要跨環境連線,請限制來源位址並確認防火牆規則。
五、區分 HTTP、SOCKS 與 DNS 問題
本機混合入口通常可同時接受 HTTP 與 SOCKS 請求,但舊設定可能使用兩個獨立連接埠。對純 SOCKS 連接埠送出 HTTP CONNECT,可能會收到交握失敗或空白回應;這類錯誤與 VMess、VLESS 節點協定並非同一層面的問題。請先確認本機入站協定,再檢查遠端節點設定。
# 在實際支援 SOCKS 的連接埠上測試,並由代理解析目標網域
curl -q --proxy socks5h://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" --connect-timeout 10 --max-time 30 --head https://example.com/
在 Windows 中執行上述指令時,請將 curl 改為 curl.exe。對 curl 而言,socks5:// 通常會由本機解析目標網域,socks5h:// 則會交由 SOCKS 代理解析。兩者結果不同,表示解析位置可能有差異,但不能直接據此判定應該修改哪台 DNS 伺服器。
curl: (5) Could not resolve proxy
原因與解法:無法解析代理伺服器位址;請先檢查代理 URL 是否拼寫正確,以及變數中是否留有舊主機名稱。本機測試可使用 127.0.0.1,減少對代理位址解析的依賴。
curl: (6) Could not resolve host
原因與解法:目前請求路徑中的目標主機名稱無法解析;請確認目標拼寫、排除清單,以及是否由本機解析,再比對 SOCKS 的解析方式與核心日誌,繼續找出問題。
- 透過 HTTP 代理存取 HTTPS:curl 通常會將目標主機名稱交給代理建立 CONNECT 通道,本機的 DNS 解析快取未必是問題所在。
- 核心日誌顯示節點網域解析失敗:請檢查節點位址與核心使用的 DNS 路徑;清除瀏覽器快取無法解決節點解析問題。
- 相同目標被路由為直連:檢查目前的路由模式與規則順序;連線進入代理連接埠,不代表最後一定會選用代理出站。
六、還原設定並保留可重現的排查結果
找出問題後,請還原暫時變更的設定,避免測試設定成為下次故障的原因。若只在 PowerShell 中暫時設定了變數,可在目前視窗中移除;若先前透過系統設定永久寫入變數,還必須回到對應位置清除,並重新啟動受影響的應用程式。以下指令只會清除目前 PowerShell 工作階段中的四個代理變數,不會變更使用者層級或系統層級的永久設定。
Remove-Item Env:http_proxy, Env:https_proxy, Env:all_proxy, Env:no_proxy -ErrorAction SilentlyContinue
在 macOS 或 Linux 的目前 shell 中,可執行 unset http_proxy https_proxy all_proxy no_proxy;若曾設定大寫變數,也要檢查並移除對應的大寫項目。若變數來自 shell 啟動檔,只在目前視窗執行 unset,無法避免下次重新載入。
- 退出 v2rayN 前,視需要在「系統代理」中選擇「清除系統代理」,再確認瀏覽器是否恢復預期的直接連線。
- 依需求恢復要使用的擴充功能或 TUN,每次只恢復一項;每恢復一項,就使用相同目標重新測試。
- 記下測試時間、實際監聽連接埠、完整錯誤碼、瀏覽器結果與明確指定代理的 curl 結果,不要用「完全沒網路」概括所有狀況。
- 需要協助排查時,只截取相關日誌片段;請遮蔽訂閱網址、節點憑證,以及包含權杖的請求連結。
結論:使用相同目標,確認故障範圍
明確指定代理失敗,就檢查監聽與對外連線;明確指定代理成功但瀏覽器失敗,就檢查代理選擇;瀏覽器成功但終端機失敗,就檢查變數與工具設定。保留這三組比對結果,比反覆重新安裝用戶端更容易縮小問題範圍。