v2rayN 系統代理無效:瀏覽器與命令列終端機分開排查

瀏覽器未走代理時,檢查擴充功能與代理模式;終端機未走代理時,檢查環境變數與連接埠。並說明何時該改用 TUN 模式接管流量。

本文重點

先明確指定代理,確認本機連接埠與節點正常,再分別檢查瀏覽器的代理來源和終端機的環境變數,最後判斷是否需要 TUN。本文以 Windows 版 v2rayN 為操作範例,適合「瀏覽器能用、終端機不能用」或「開啟系統代理後仍直接連線」的情況;請先確認範例連接埠與本機設定一致。

先釐清系統代理、本機連接埠與路由分流

v2rayN 的「自動設定系統代理」主要是將代理位址寫入作業系統設定,不代表所有程式的流量都會被攔截。應用程式必須主動讀取這項設定,才會連線至本機代理。瀏覽器通常會讀取系統代理,命令列工具則各有設定方式,因此同一台電腦出現兩種結果並不矛盾。

請求進入本機代理後,核心會依路由規則選擇直連、代理或封鎖。開啟系統代理只代表應用程式有機會連上核心,不保證所有連線都會透過遠端節點。訂閱更新成功或節點延遲測試有結果,也不能取代實際網頁請求的驗證。

檢查層級負責項目主要依據
應用程式代理設定決定是否將請求交給本機代理瀏覽器設定、啟動參數、終端機參數
本機入站連接埠接收 HTTP 或 SOCKS 請求監聽位址、監聽連接埠、核心啟動記錄
路由與 DNS決定網域名稱如何解析,以及連線從哪裡送出存取記錄中的目標與出站標籤
遠端節點建立代理連線並轉送流量實際請求結果、交握錯誤、逾時記錄

排查時先關閉 TUN,只保留一個代理用戶端執行。這樣可避免 TUN 替錯誤的系統代理設定「補位」,也能減少兩種流量接管方式同時啟用造成的干擾。若裝置由公司或組織管理,請勿繞過組織設定的網路政策。

步驟一:確認連接埠,再測試明確指定代理

先開啟 v2rayN 的「設定」→「參數設定」,確認本機監聽連接埠與入站協定,並查看核心啟動記錄。不同版本可能使用獨立的 HTTP、SOCKS 連接埠,也可能採用混合連接埠;請勿將舊教學中的連接埠視為固定預設值。以下以一組獨立連接埠示範,不代表目前版本的預設設定。

10809
本文 HTTP 代理範例連接埠
10808
本文 SOCKS 代理範例連接埠
127.0.0.1
本機迴送位址,並非遠端節點
  1. 記下連接埠

    記下本機 HTTP 或混合連接埠,以及 SOCKS 連接埠。若只有一個混合連接埠,兩項測試都使用同一連接埠;請勿填入訂閱節點的遠端伺服器連接埠。

  2. 啟動核心

    在主畫面選取要測試的伺服器並設為目前使用的伺服器,確認記錄中沒有啟動失敗訊息。測試期間只使用一個節點與同一套路由規則。

  3. 確認監聽狀態

    在 PowerShell 執行下方的監聽查詢。若查不到結果,先檢查核心是否成功啟動;若連接埠由其他程序占用,先處理占用問題,再檢查瀏覽器。

  4. 指定代理

    使用 curl.exe 明確指定代理,查看 HTTP 回應與錯誤訊息。在 Windows PowerShell 中直接輸入 curl 可能會呼叫別名,因此此處使用完整的程式名稱。

# 將連接埠替換為本機實際監聽的連接埠
Get-NetTCPConnection -State Listen -LocalPort 10809 |
  Select-Object LocalAddress, LocalPort, OwningProcess

# HTTP 代理:HTTPS 請求會透過 CONNECT 通道傳輸
curl.exe --proxy http://127.0.0.1:10809 --noproxy "" --connect-timeout 10 --max-time 20 -I https://example.com/

# SOCKS5:由代理端解析目標網域名稱
curl.exe --proxy socks5h://127.0.0.1:10808 --noproxy "" --connect-timeout 10 --max-time 20 -I https://example.com/

--noproxy "" 用來在這次明確指定代理的測試中清空略過代理清單。範例網址僅用於檢查連線流程,不代表特定地區一定能連線;進一步診斷時,請改用實際連線失敗的目標。若收到目標網站的 HTTP 狀態碼,代表已取得 HTTP 回應;即使狀態碼是 403 或 405,也不同於「無法連上本機代理」,但仍須搭配記錄確認流量是否經由遠端節點送出。

瀏覽器未走代理:檢查系統設定與擴充功能覆寫

若明確指定代理的測試成功,但瀏覽器仍不如預期,先確認瀏覽器使用系統代理,再檢查瀏覽器的代理擴充功能。Edge 和 Chrome 通常會採用 Windows 代理設定,但擴充功能、啟動參數與組織政策都可能改變行為。無痕視窗也不一定能排除擴充功能,因為部分擴充功能可在無痕模式中執行。

  1. 設定系統代理

    在 v2rayN 系統匣圖示上按右鍵,選擇「系統代理」→「自動設定系統代理」。請勿選取「清除系統代理」,也不要將「不變更系統代理」誤認為會自動啟用代理。

  2. 確認系統代理位址

    在 Windows 11 開啟「設定」→「網路和網際網路」→「Proxy」,檢查「使用 Proxy 伺服器」中的位址與連接埠,確認對應 v2rayN 的 HTTP 或混合入站。記下原有的自動設定指令碼,避免兩套設定互相干擾。

  3. 暫停代理擴充功能

    前往瀏覽器的擴充功能管理頁面,暫時停用代理切換擴充功能。檢查啟動捷徑是否附帶代理參數,關閉所有瀏覽器視窗後重新開啟,再前往相同的測試網址。

  4. 檢查瀏覽器獨立設定

    在 Firefox 中前往「設定」→「一般」→「網路設定」→「設定」,選取「使用系統代理設定」。若選擇手動設定,則須分別確認 HTTP、SOCKS 與不使用代理的位址清單。

若只有特定網站直接連線,請檢查代理例外清單與 v2rayN 路由。例如瀏覽器將區域網路位址排除在代理之外,或規則將某個網域導向直連出站,都不代表系統代理開關失效。可暫時切換至全域代理路由模式進行比對,測試後再還原原有規則;請勿直接刪除整套路由設定。

終端機未走代理:優先明確指定參數,再檢查環境變數

命令列工具不一定會讀取 Windows 系統代理。終端機本身也不是統一的網路用戶端:在同一個 PowerShell 中,curl.exe、指令碼執行環境和套件管理工具可能採用不同的代理來源。先測試實際使用的程式,再決定是否設定環境變數;不要因為瀏覽器能用,就認定終端機也已透過代理連線。

對 curl 而言,https_proxy 表示「連線至 HTTPS 目標時要使用哪個代理」,其值仍可設定為 http://127.0.0.1:10809。這裡的 http:// 描述本機代理協定,不代表目標網頁改用未加密連線。若誤寫成 https://127.0.0.1:10809,程式可能會對一般 HTTP 代理連接埠發起 TLS 交握,導致連線失敗。

# 先記下原本的值;以下設定只會影響目前的 PowerShell 與之後啟動的子程序
$oldHttpsProxy = $env:https_proxy
$oldNoProxy = $env:no_proxy

$env:https_proxy = "http://127.0.0.1:10809"
$env:no_proxy = "localhost,127.0.0.1"

# 不加 --proxy,確認該程式是否會讀取環境變數
curl.exe --connect-timeout 10 --max-time 20 -I https://example.com/

# 測試完成後還原原本的值
if ($null -eq $oldHttpsProxy) {
  Remove-Item Env:https_proxy -ErrorAction SilentlyContinue
} else {
  $env:https_proxy = $oldHttpsProxy
}
if ($null -eq $oldNoProxy) {
  Remove-Item Env:no_proxy -ErrorAction SilentlyContinue
} else {
  $env:no_proxy = $oldNoProxy
}

請依序執行設定、測試與還原,不要一次執行整個程式碼區塊後才檢查變數。若還要代理 HTTP 目標,請依該工具文件檢查 http_proxy;curl 對此變數的大小寫有特定規則,跨平台指令碼建議使用小寫。ALL_PROXY 可作為 curl 的通用備援代理,但並非所有程式都支援,也不是所有工具都接受 SOCKS 位址。

設定方式生效範圍排查時留意
--proxy目前這次 curl 請求適合建立可重複的診斷基準
$env:https_proxy目前的 PowerShell 與之後啟動的子程序其他已執行中的終端機不會同步取得新值
NO_PROXY支援該變數的工具目標網域或萬用字元規則可能使連線略過代理
工具本身的設定個別程式或專案可能覆蓋環境變數,須逐一檢查

若環境變數沒有作用,請回到程式本身的代理選項。PowerShell 的 Invoke-WebRequest 可使用 -Proxy http://127.0.0.1:10809 明確測試;不能只因 curl 成功,就認定它也會讀取相同的變數。WSL 和容器有各自獨立的網路環境,其中的 127.0.0.1 不一定指向 Windows 主機,請依網路模式確認主機位址與監聽範圍。

從實際錯誤判斷連接埠、TLS 或遠端逾時

保留失敗請求的完整錯誤訊息與發生時間,再比對 v2rayN 記錄。下方連接埠是本文的範例值,實際錯誤訊息會顯示你的連接埠與等待時間。請勿只截取「連線失敗」幾個字,也不要公開完整記錄,以免洩露訂閱連結或驗證資訊。

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

原因:本機無法連上代理監聽連接埠,常見原因是核心未執行或連接埠填錯。解法:先檢查監聽記錄與所屬程序,再確認 HTTP 或混合入站設定;此時更換遠端節點通常無法解決本機連線問題。

curl: (35) schannel: failed to receive handshake, SSL/TLS connection failed

原因:TLS 交握失敗,可能與代理協定設定錯誤、目標服務或本機安全軟體有關,不能只憑這項訊息判定節點失效。解法:先確認代理 URL 是否誤設為 HTTPS,再檢查系統時間並改用另一個目標比對;請勿關閉憑證驗證來掩蓋問題。

curl: (28) Operation timed out after 20000 milliseconds with 0 bytes received

原因:請求在設定的時限內未收到資料,可能卡在遠端連線、DNS 或目標回應階段。解法:加上 -v 重試,確認代理連線與 CONNECT 是否已完成,再搭配核心記錄檢查目標網域與出站狀況。

使用 socks5h:// 測試成功,但需要在本機解析網域名稱的方式失敗,表示應優先檢查名稱解析路徑;這並不能直接證明某個公共 DNS 一定有問題。也請確認路由規則是否依賴網域解析,以及 DNS 請求是否送往預期的出站。

何時改用 TUN,何時繼續修復系統代理

若多個應用程式沒有代理設定、各自的環境變數難以管理,或確實需要接管更多 IP 流量,可以考慮使用 TUN。TUN 透過虛擬網路介面與路由接管流量,涵蓋範圍通常比系統代理廣;但能否正確接管,仍取決於核心、權限、路由、DNS 與應用程式行為,並非解決所有網路問題的萬用開關。

啟用前記下目前的系統代理與路由狀態,依 v2rayN 提示授予必要權限,再開啟介面中的 TUN 開關。測試期間先清除系統代理並還原終端機的暫存變數,避免應用程式同時經過明確指定的代理與 TUN,讓排查結果難以判讀。接著確認虛擬介面、預設路由與 DNS 是否已建立,再測試區域網路服務能否正常存取。

常見問題與最後檢查

瀏覽器能開啟網頁,為什麼終端機仍然逾時?

先執行本文的 curl.exe --proxy 測試。明確指定參數後成功、一般指令卻失敗時,優先檢查該工具是否會讀取環境變數,以及 NO_PROXY 是否包含目標位址。請勿先重新安裝用戶端。

結束 v2rayN 後網頁也無法開啟,該如何復原?

開啟 Windows「設定」→「網路和網際網路」→「Proxy」,確認設定是否仍指向已停止的本機連接埠。個人裝置可關閉這項手動代理;若原本使用公司代理或自動設定指令碼,請還原原有設定。

HTTP 和 SOCKS 應該填哪個連接埠?

依本機入站協定填寫,不要憑名稱猜測。瀏覽器的 HTTP 代理欄位填入 HTTP 或相容的混合連接埠;SOCKS 設定則填入 SOCKS 或相容的混合連接埠。遠端節點的 443 並非本機代理連接埠。

系統代理已開啟,但出口 IP 沒變,是不是沒有生效?

不一定。先確認出口查詢網站的網域是否符合直連規則,再比對核心的存取記錄;若尚未啟用存取記錄,請依目前核心支援的設定暫時開啟,診斷完成後再還原。只查看一個查詢網站的結果,無法推斷所有應用程式的連線路徑。

最後只需確認一條清楚的證據鏈:本機連接埠確實在監聽、明確指定代理後能收到回應、瀏覽器使用正確的代理來源、終端機程式讀取自己的代理參數,且路由記錄顯示預期的出站結果。依此順序逐層檢查,比反覆開關系統代理或接連更換節點更容易找出原因。若要重新整理訂閱、節點與啟動順序,可從站內的快速入門教學重新建立基準。

下載v2rayN