系統代理無法使用排查:瀏覽器能走代理,終端機卻不行?依情境逐步檢查

瀏覽器與終端機使用代理的機制不同:前者讀取系統代理設定,後者須依靠環境變數或 TUN 模式。依情境檢查 v2rayN 系統代理開關、連接埠與環境變數設定。

「網頁可以開啟,但終端機指令仍然直連」通常不是節點失效,而是應用程式讀取代理設定的方式不同。v2rayN 啟動核心後,會在本機監聽 SOCKS、HTTP 或混合代理連接埠;系統代理開關只是將其中一個入口寫入作業系統設定,不會強制所有程序把流量交給該連接埠。

瀏覽器、桌面軟體、PowerShell、命令提示字元與 Linux shell 對系統代理的處理方式並不一致。排查時應將問題拆成三層:本機監聽連接埠是否存在、應用程式是否知道代理位址、代理請求是否被路由至正確的出站。只檢查節點延遲,無法涵蓋這三層。

本文速覽

本文適合遇到「瀏覽器正常、curl 或套件管理器無法連線」「系統代理已開啟但部分程式仍直連」的使用者。依序檢查連接埠監聽、系統代理、終端機環境變數、TUN 接管與路由日誌五個層次,即可判斷故障位於用戶端入口、應用程式設定或代理出站。

先釐清系統代理、本機連接埠與 TUN

v2rayN 的運作可分為「核心監聽」與「應用程式接入」兩個階段。選取節點並啟動服務後,Xray 或 v2fly 核心會先在本機建立入站連接埠;瀏覽器或終端機只有將請求送到該連接埠,後續的 VMess、VLESS 等協定連線才會發生。節點協定與本機代理協定不是同一概念:遠端使用 VLESS,不代表終端機也要理解 VLESS;終端機通常只連線至本機的 HTTP 或 SOCKS 入口。

應用程式發起請求 讀取代理設定 連線至本機連接埠 規則比對與分流 代理出站

系統代理主要影響會主動讀取作業系統代理設定的應用程式。常見瀏覽器通常會讀取這項設定,因此開啟 v2rayN 系統代理後網頁便能恢復;許多命令列工具則只讀取自己的設定檔,或讀取 HTTP_PROXYHTTPS_PROXYALL_PROXY 環境變數,因此終端機仍可能直接連線至目標位址。

10808
常見本機 SOCKS 連接埠
10809
舊設定常見的 HTTP 連接埠
127.0.0.1
預設本機監聽位址
5 秒
連接埠測試建議逾時

結論:先驗證本機入口,再調整遠端節點

如果終端機無法連線至 127.0.0.1 的代理連接埠,問題發生在本機監聽或連接埠填寫階段;此時反覆切換 VMess、VLESS 節點並不能解決應用程式接入失敗。

檢查 v2rayN 系統代理與監聽連接埠

先確認 v2rayN 主介面中的目前伺服器已設為作用中節點,底部執行狀態沒有持續報錯。接著開啟日誌,觀察核心是否完成啟動。僅匯入訂閱或選取清單列,不代表代理已啟用;訂閱負責提供節點設定,系統代理則負責將支援該設定的應用程式導向本機入口。

  1. 確認作用中節點

    在伺服器清單中選取一個節點,透過右鍵選單設為作用中伺服器。確認主介面底部顯示核心正在執行,而不是停留在啟動失敗或設定解析錯誤的狀態。

  2. 讀取本機連接埠

    開啟「設定」→「參數設定」→「基礎設定」,記錄本機監聽位址、SOCKS 連接埠、HTTP 連接埠或混合連接埠。後續指令必須使用此處顯示的實際數值。

  3. 設定代理模式

    開啟「系統代理」,選擇「自動設定系統代理」或目前版本對應的啟用項目。若先前殘留手動代理,請先選擇「清除系統代理」,再重新啟用。

  4. 檢查路由模式

    在「設定」→「路由設定」中確認目前規則集。測試階段可先排除目標網域被錯誤送往直連出站的情況,確認後再恢復所需的分流設定。

  5. 重新啟動目標應用程式

    完全結束瀏覽器或桌面應用程式後重新開啟。部分程式只會在啟動時讀取系統代理,執行期間切換 v2rayN 開關不會立即更新既有連線。

Windows 可使用 PowerShell 檢查連接埠是否正在監聽。請將範例中的連接埠改為 v2rayN 介面顯示的數值:

Test-NetConnection 127.0.0.1 -Port 10808
Test-NetConnection 127.0.0.1 -Port 10809

結果中的 TcpTestSucceededTrue,表示至少有程序接受該連接埠的連線;但這不能證明遠端節點一定可用。若結果為 False,應返回 v2rayN 檢查核心啟動狀態、連接埠衝突與安全軟體規則,而不是繼續設定終端機環境變數。

瀏覽器正常但終端機直連的處理方式

終端機本身只是執行指令的環境,真正決定是否讀取代理的是具體程式。curl、套件管理器、指令碼執行環境與遠端下載工具可能採用不同的變數。最穩妥的驗證方式,是先對單一指令明確指定代理;確認有效後,再決定是否寫入目前工作階段、使用者環境或工具自身的設定檔。

先用 curl 明確指定代理

若本機入口是 HTTP 或混合代理,可執行以下指令。--connect-timeout 5 會將連線階段的等待時間限制為 5 秒,方便區分連接埠拒絕與遠端回應緩慢:

curl --proxy http://127.0.0.1:10809 --connect-timeout 5 https://example.com/

若介面確認 10808 是 SOCKS5 入口,請使用 socks5h。結尾的 h 表示網域解析也交由代理端處理,可避免本機 DNS 結果與代理鏈路不一致:

curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 https://example.com/

為目前終端機工作階段設定變數

在 PowerShell 中,環境變數只對目前視窗及從該視窗啟動的子程序生效。關閉視窗後設定便會消失,適合排查與暫時性工作:

$env:HTTP_PROXY="http://127.0.0.1:10809"
$env:HTTPS_PROXY="http://127.0.0.1:10809"
$env:ALL_PROXY="socks5h://127.0.0.1:10808"

curl --connect-timeout 5 https://example.com/

在 macOS 或 Linux 的 shell 中,可使用同名變數。部分工具只識別小寫形式,因此排查時可以同時設定大小寫版本:

export HTTP_PROXY="http://127.0.0.1:10809"
export HTTPS_PROXY="http://127.0.0.1:10809"
export ALL_PROXY="socks5h://127.0.0.1:10808"

export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export all_proxy="$ALL_PROXY"

結論:明確代理成功,表示節點鏈路基本可用

同一個指令不帶 --proxy 時失敗,加上代理參數後成功,故障點通常是終端機沒有讀取代理設定。此時應處理環境變數或工具設定,而不是重新匯入訂閱。

環境變數仍未生效時逐項核對

變數名稱正確,不代表每個工具都會採用它。某些程式優先讀取自身設定,某些程式只支援 HTTP 代理,還有些程式在啟動後便會快取變數。排查時應在同一個終端機視窗查看變數值並立即發起請求,避免將「新視窗未繼承」與「代理伺服器無法使用」混為一談。

錯誤:curl: (7) Failed to connect to 127.0.0.1 port 10809

原因與解法:指定的連接埠沒有程序監聽,或 v2rayN 已更換本機連接埠。返回「設定」→「參數設定」→「基礎設定」讀取實際連接埠,重新啟動核心後再次測試。

錯誤:curl: (5) Could not resolve proxy: 127.0.0.1:10809

原因與解法:代理變數格式可能包含多餘引號、空格或錯誤的協定前綴。請將值完整寫成 http://127.0.0.1:10809,不要只填寫主機與連接埠。

錯誤:connection reset by peer

原因與解法:本機連接埠已接受連線,但遠端鏈路、傳輸層或路由出站中斷。切換至已確認可用的節點,並在 v2rayN 日誌中核對目標網域對應的出站與錯誤時間。

錯誤:proxy CONNECT aborted

原因與解法:工具以 HTTP 代理方式連線至不相容的 SOCKS 入口。改用用戶端顯示的 HTTP 或混合連接埠,或將指令的代理協定改為 socks5h://

檢查目前工作階段讀取到的值

# PowerShell
Get-ChildItem Env:HTTP_PROXY
Get-ChildItem Env:HTTPS_PROXY
Get-ChildItem Env:ALL_PROXY

# macOS 或 Linux shell
env | grep -i proxy

如果只有某一個指令無法使用,而 curl --proxy 已成功,應查看該工具的代理設定優先順序。不要同時在系統代理、環境變數與工具設定中填入三個不同的連接埠,否則很難從日誌判斷請求實際進入哪個入口。

需要接管更多程式時再考慮 TUN 模式

TUN 模式透過虛擬網路介面攔截更多 IP 流量,不依賴每個應用程式主動讀取系統代理。因此,當目標程式明確忽略系統代理、無法設定環境變數,或需要統一接管多個命令列程序時,TUN 比逐一設定更直接。但它改變的是流量入口,不會自動修復節點參數、憑證網域、DNS 或路由規則。

程式建立連線 TUN 接收流量 DNS 解析 路由規則比對 選擇出站
  1. 先確認一般 HTTP 或 SOCKS 入口能透過明確代理完成請求。
  2. 在 v2rayN 的 TUN 相關設定中啟用虛擬網卡模式,並依系統提示授予建立網路介面所需的權限。
  3. 檢查路由規則是否將區域網路、回環位址與必要的本機服務保留為直連。
  4. 重新測試終端機請求,同時查看日誌中的入站類型、目標位址與出站標籤。
  5. 出現整體無法上網時,請先關閉 TUN,確認系統預設路由恢復,再檢查 DNS 與虛擬介面狀態。

TUN 適合處理不讀取系統代理的程式,但瀏覽器與終端機表現不一致時,不必一開始就啟用。明確代理指令能更快劃定範圍:本機連接埠是否暢通、協定前綴是否正確、節點能否建立出站。只有這些基礎項目正常,TUN 排查才有清楚的起點。

依現象定位路由、DNS 與訂閱問題

當瀏覽器與終端機都已進入 v2rayN,但存取結果仍不同,應繼續檢查網域解析與路由比對。瀏覽器可能使用自身快取,終端機可能呼叫系統 DNS;兩者取得的目標位址不同後,也可能命中不同的 geoip、網域或私有位址規則。

現象:網域失敗,但直接存取目標 IP 有回應

原因與解法:優先檢查 DNS。使用 socks5h 讓代理端處理網域解析,並在 v2rayN 日誌中確認網域是否解析為預期位址。

現象:部分網域正常,部分網域始終直連

原因與解法:目前路由規則可能依網域、IP 區域或私有網段選擇直連出站。開啟「設定」→「路由設定」,核對規則順序與目標出站。

現象:更新訂閱後連接埠突然變更

原因與解法:訂閱通常只更新伺服器項目,不應直接決定本機監聽連接埠。檢查是否同時匯入了用戶端設定或還原舊設定,接著統一修改環境變數中的連接埠。

訂閱連結提供的是節點集合,更新訂閱後仍需選定作用中伺服器。若節點清單更新成功,但核心日誌顯示設定無法啟動,即使系統代理維持開啟,也只會將瀏覽器請求送到無法正常工作的本機入口。此時應先解決啟動日誌中的第一個設定錯誤。

測試結果 優先檢查位置 下一步
本機連接埠測試失敗 核心狀態、連接埠衝突 重新啟動核心並讀取日誌
明確代理成功,一般指令失敗 環境變數、工具設定 統一代理位址與協定
HTTP 成功,SOCKS 失敗 入口類型、連接埠填寫 依介面確認 SOCKS 連接埠
網域失敗,IP 有回應 DNS 與網域路由 使用 socks5h 並查看日誌
所有入口連線成功,但請求中斷 節點、傳輸層、遠端出站 切換已驗證節點進行對照

完成排查後的驗證與恢復

修復後不要只用單一網頁判斷結果。至少完成本機連接埠、明確代理、一般終端機請求與瀏覽器四項驗證,並確認結束 v2rayN 後系統代理能夠清除。如此可避免目前視窗看似恢復,但系統中仍殘留舊連接埠。

  1. 重新測試監聽連接埠

    使用 Test-NetConnection 或同等工具確認目前連接埠可連線,並核對測試連接埠與參數設定中的數值完全一致。

  2. 執行明確代理請求

    分別使用 HTTP 或 socks5h 入口執行一次 curl --proxy,確認本機入口與代理鏈路都能完成請求。

  3. 執行一般請求

    移除指令中的明確代理參數,透過目前工作階段的環境變數再次發出請求。成功後才能表示終端機代理設定已生效。

  4. 核對分流日誌

    查看同一時段的存取日誌,確認目標網域命中預期規則,並被送往代理或直連出站。

  5. 測試結束後的恢復狀態

    在 v2rayN 中先清除系統代理,再結束用戶端。確認瀏覽器與系統網路沒有繼續指向已關閉的 127.0.0.1 連接埠。

整個排查順序可以濃縮成一句話:先看本機連接埠是否監聽,再用明確代理驗證鏈路,接著設定終端機環境變數,最後才考慮 TUN、DNS 與複雜路由。瀏覽器能走代理只能證明瀏覽器成功讀取某個入口,不能代表所有程序都已被接管。

常見問題

開啟系統代理後,為什麼 PowerShell 仍然直連?

PowerShell 中執行的具體指令不一定會讀取 Windows 系統代理。先用 curl --proxy 驗證,再在目前工作階段設定 HTTP_PROXYHTTPS_PROXYALL_PROXY

10808 和 10809 應該選哪一個?

不要只依常見連接埠猜測。開啟 v2rayN「設定」→「參數設定」→「基礎設定」,依實際入口類型選擇。HTTP 工具連線至 HTTP 或混合入口,SOCKS 工具連線至 SOCKS 入口。

環境變數應該永久保存嗎?

建議先只對目前工作階段設定。確認連接埠長期固定且工具確實需要後,再儲存至使用者環境或 shell 設定中;修改 v2rayN 連接埠時也要同步更新。

啟用 TUN 模式後還需要系統代理嗎?

取決於實際接管範圍。TUN 可以攔截更多不讀取系統代理的流量,但測試時應避免同時保留指向錯誤連接埠的環境變數。先單獨驗證一種入口,再依應用程式需求組合使用。

下載 v2rayN