本文以 Windows 版 v2rayN 為例,適用於「已設定系統代理,但瀏覽器或終端機仍無法連線」的情況。先用明確指定代理的請求測試本機入口,再檢查瀏覽器擴充功能、自動設定指令碼及終端機環境變數。看完即可判斷問題出在應用程式使用代理、本機連接埠監聽、核心對外連線或路由規則,無須反覆更換節點。
一、先分清系統代理、路由與 TUN
v2rayN 的「系統代理」會將代理設定寫入作業系統,但不代表所有網路連線都會由它接管。應用程式必須主動讀取這些設定,才會將請求送至本機代理連接埠。瀏覽器通常支援系統代理;命令列工具是否讀取系統代理、環境變數或自己的設定檔,則取決於工具本身。
排查時先關閉 TUN 模式,避免虛擬網卡接管流量而掩蓋系統代理問題。如果已安裝其他隧道或企業網路軟體,先記下目前狀態,不要直接刪除其設定。本文中的連接埠僅為測試範例,請改用 v2rayN 目前顯示的監聽連接埠。
| 設定層級 | 實際作用 | 無法據此證明 |
|---|---|---|
| 系統代理 | 告知遵循系統設定的應用程式要使用哪個代理入口 | 所有終端機與背景程式都已使用代理 |
| 本機入站 | 在迴圈位址與指定連接埠接收 HTTP 或 SOCKS 請求 | 已成功連線至遠端伺服器 |
| 核心路由 | 為收到的請求選擇直接連線、代理或封鎖對外連線 | 每個收到的請求都經由遠端代理 |
| TUN 模式 | 透過虛擬網卡接管符合條件的網路流量 | 應用程式已正確讀取系統代理 |
二、確認本機連接埠,再測試明確指定代理
先在 v2rayN 的「設定」→「參數設定」確認本機監聽設定,再查看主畫面底部的連接埠資訊。不同版本可能提供獨立的 HTTP、SOCKS 連接埠或混合連接埠,名稱與版面也可能不同。混合連接埠可同時接收相應協定;僅支援 SOCKS 的連接埠不能直接當作 HTTP 代理使用。
這兩個數字並非所有版本的固定預設值,也不需要同時監聽。以下範例使用 PowerShell,假設已確認 127.0.0.1:10808 支援 HTTP 與 SOCKS。使用 curl.exe 而非 curl,可避免部分 Windows PowerShell 環境中同名別名造成的參數差異。
# 檢查 TCP 連接埠是否接受連線
Test-NetConnection 127.0.0.1 -Port 10808
# 查看監聽中的處理程序,確認是否屬於目前的核心
Get-NetTCPConnection -State Listen -LocalPort 10808 |
Select-Object LocalAddress, LocalPort, OwningProcess
# 明確指定 HTTP 代理;排除清單只包含本機位址
curl.exe --proxy http://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" --connect-timeout 10 --max-time 20 -I https://example.com
# 明確指定 SOCKS,並由代理解析目標網域
curl.exe --proxy socks5h://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" --connect-timeout 10 --max-time 20 -I https://example.com
TcpTestSucceeded : True 只表示 TCP 連接埠可以連線。HTTP 代理測試出現 200 Connection established,也只代表 CONNECT 通道已獲准建立;還要查看後續 TLS 流程及目標網站的回應。即使目標回傳 403 或 405,也應先確認回應來自目標網站、代理服務還是中間網路設備,不能只憑狀態碼判定系統代理失效。
結論:明確指定代理的請求成功後,再檢查應用程式設定
如果明確指定 HTTP 代理的請求能取得目標回應,但一般瀏覽器無法連線,優先確認瀏覽器是否使用了其他代理入口。此時先不要修改訂閱、傳輸協定或遠端連接埠。
三、瀏覽器無法使用代理:檢查擴充功能與個別代理設定
瀏覽器擴充功能可能覆寫系統代理。同一個瀏覽器視窗能連線、另一個無法連線時,先比較瀏覽器設定檔與擴充功能狀態,不要直接認定是節點問題。無痕視窗也不是可靠的「停用擴充功能」測試環境:允許在無痕視窗執行的擴充功能仍可能生效。
-
啟用系統代理
在 Windows 版 v2rayN 主畫面底部的「系統代理」選單中,選擇「自動設定系統代理」。這裡指的是用戶端寫入系統代理設定的操作,不應直接解讀為 PAC 指令碼模式。
-
確認系統代理入口
開啟 Windows「設定」→「網路和網際網路」→「Proxy」,檢查手動代理的位址與連接埠。迴圈位址應指向本機,連接埠則應與上一步測試成功的 HTTP 或混合入口一致。
-
停用代理擴充功能
在 Chrome「擴充功能」→「管理擴充功能」中,暫時停用控制代理的擴充功能。Edge 可在「擴充功能」→「管理擴充功能」中操作。接著關閉相關瀏覽器處理程序並重新開啟,再瀏覽相同的測試網址。
-
檢查個別代理設定
在 Firefox「設定」→「一般」→「網路設定」→「設定」中,選擇「使用系統代理設定」。如果選擇手動代理,請先確認其中的連接埠,不要假設它會隨 Windows 自動更新。
如果系統代理位址剛寫入就發生變更,可能是其他程式或組織原則正在管理設定。先關閉重複執行的代理程式再觀察;受管理的裝置則應聯絡管理員確認原則。若要讓本機瀏覽器連線至代理,無須將監聽位址改成 0.0.0.0,也不應優先採取關閉整套防火牆的做法。
四、PAC 模式:檢查指令碼位址與回傳結果
PAC 是自動代理設定指令碼。瀏覽器會呼叫指令碼中的 FindProxyForURL(url, host),並根據回傳值決定使用代理或直接連線。PAC 與 v2rayN 核心中的 routing.rules 屬於不同層級的規則:PAC 可能讓請求根本不會進入核心;核心路由則只能處理已到達本機入站的請求。
- 檢查是否啟用指令碼:在 Windows「設定」→「網路和網際網路」→「Proxy」→「使用設定指令碼」中查看位址。如果目前只打算使用手動系統代理,可先記下原位址,再暫時關閉指令碼進行測試。
- 檢查指令碼是否可連線:如果指令碼指向本機連接埠,請確認對應服務仍在執行。舊版用戶端退出後留下的指令碼位址可能已無法讀取。
- 檢查回傳值:
DIRECT表示直接連線,PROXY 127.0.0.1:10808表示使用該 HTTP 代理入口。若指令碼仍使用舊連接埠,即使目前核心運作正常也會失敗。 - 檢查後備規則:
PROXY 127.0.0.1:10808; DIRECT包含直接連線的後備選項。代理無法使用時,瀏覽器可能會嘗試直接連線,因此部分網站仍可開啟。
五、終端機無法使用代理:檢查環境變數與工具設定
瀏覽器可用、終端機卻無法連線,常見原因是兩者使用不同的設定來源。許多命令列工具不會自動讀取 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,::1"
# 不指定 --proxy,確認 curl.exe 是否讀取目前的環境變數
curl.exe --connect-timeout 10 --max-time 20 -I https://example.com
https_proxy 表示「供 HTTPS 目標使用的代理」,其值仍可使用 http://,並透過 HTTP CONNECT 建立通道;不要只因目標是 HTTPS 就將本機入口改成 https://。是否支援環境變數及支援哪些名稱,請以各工具的文件為準。curl 對 HTTP 代理變數的大小寫有特殊規則,跨平台指令碼建議優先使用小寫的 http_proxy。
| 檢查項目 | 常見問題 | 處理方式 |
|---|---|---|
NO_PROXY | 包含目標網域或 *,導致略過代理 | 測試工作階段只保留必要的本機位址,再重新測試 |
ALL_PROXY | 仍指向舊的 SOCKS 連接埠 | 確認協定與連接埠;避免多個變數指向互相衝突的入口 |
| 終端機處理程序 | 在修改系統變數前就已啟動 | 重新啟動終端機及其主控程式,或在目前工作階段直接指定 |
| 工具設定檔 | 工具本身的代理選項覆寫了預期設定 | 查看工具實際生效的設定,並使用明確參數進行比對測試 |
WSL、容器及遠端終端機各自使用不同的網路環境。其中的 127.0.0.1 不一定指向 Windows 上的監聽入口,因此不能直接將這些環境中的連線失敗視為 Windows 系統代理失效。先在 Windows 本機完成基準測試,再分別確認虛擬網路與主機位址。不要因此直接開放供所有網卡使用的代理連接埠。
上述指定只會影響目前的 PowerShell 工作階段,以及之後由它啟動的子處理程序。關閉該工作階段即可結束這次暫時設定;如果原本的工作階段已設定代理變數,請先記下原值,並在測試完成後還原。
六、依據錯誤訊息與記錄排查剩餘問題
明確指定代理仍失敗時,依序檢查「本機監聽→協定是否相符→遠端連線→目標回應」。以下列出可能出現的 curl 錯誤片段,實際文字會因版本及系統而異。錯誤碼可協助縮小範圍,但通常無法只靠一則錯誤訊息確定唯一原因。
curl: (7) Failed to connect to 127.0.0.1 port 10808
原因:未能建立本機 TCP 連線,常見原因包括核心未啟動、連接埠填錯或本機連線遭到封鎖。
解決方式:返回檢查連接埠監聽狀態並確認監聽中的處理程序,再查看 v2rayN 的核心啟動記錄;先不要修改遠端協定。
curl: (5) Could not resolve proxy
原因:無法解析代理位址中的主機名稱,也可能是代理變數的值格式錯誤。
解決方式:在本機測試時明確使用 http://127.0.0.1:10808,並檢查變數中是否含有引號、空格或無效的主機名稱。
curl: (28) Connection timed out
原因:連線或傳輸超過逾時限制;可能卡在代理入口、遠端伺服器或等待目標網站回應的階段。
解決方式:加上 -v 查看最後完成的階段,再比對同一時間的核心記錄,分辨是入口無法連線還是遠端逾時。
curl: (60) SSL certificate problem
原因:憑證驗證未通過,可能與系統時間、憑證信任鏈或網路中的 TLS 檢查有關。
解決方式:確認系統時間與憑證來源;不要長期略過憑證驗證,也不要直接將此錯誤判定為系統代理未生效。
沒有新增記錄不一定代表請求未進入核心:目前的記錄層級可能不會記下每次連線。可在 v2rayN「設定」→「參數設定」中查看記錄相關選項,暫時啟用更詳細的記錄並重新啟動核心,再執行一次並記下時間的測試。完成後請還原原本的記錄層級;分享記錄前,請移除訂閱網址、登入憑證及其他敏感資訊。
結論:每次只變更一項設定
使用相同的測試目標,依序記錄明確指定代理、瀏覽器系統代理及終端機環境變數三種測試結果。只有明確指定代理也失敗時,才繼續排查核心與遠端連線;否則應優先修正應用程式讀取代理的方式。
- 明確指定代理成功,瀏覽器失敗:檢查擴充功能、個別代理設定、PAC 及組織原則。
- 瀏覽器成功,終端機失敗:檢查環境變數、處理程序繼承及工具本身的設定。
- 連接埠可連線,代理請求失敗:檢查入站協定、對外連線記錄、伺服器設定及 DNS。
- 請求可連線,但出口不如預期:檢查 PAC 是否回傳直接連線,以及核心路由實際選擇的對外連線。