先拆解「代理已開啟」代表什麼

「系統代理已開啟」只代表作業系統設定了一組代理位址。這不表示代理核心正在執行,也不保證每個應用程式都會讀取這組設定。排查前,先將連線路徑拆成四段:應用程式發出請求、應用程式決定是否讀取系統代理、本機代理連接埠接收連線,以及 V2Ray 或 Xray 依路由規則處理流量。

其中任何一段中斷,表面上都可能顯示為「網頁無法開啟」或「終端機仍在直連」。例如,v2rayN 已設定系統代理,但核心尚未啟動,瀏覽器便會將請求送到無程式監聽的本機連接埠;又例如,瀏覽器可以正常連線,但命令列程式根本不讀取系統代理,因此終端機仍會直接連線至目標網站。

瀏覽器連線路徑

瀏覽器通常會讀取系統代理,也可能使用自己的代理選項、擴充功能設定與安全 DNS 設定。請先確認瀏覽器實際採用的是哪一層設定。

終端機連線路徑

curl、套件管理器與開發工具經常讀取環境變數或各自的設定檔。系統代理開關通常不會自動套用到這些程式。

確認 v2rayN 與本機監聽連接埠正常

開始調整瀏覽器或終端機之前,先確認本機代理確實能接收請求。以桌面版 v2rayN 為例,必須同時符合三個條件:已選擇可用伺服器、核心正在執行,以及本機 HTTP 或 SOCKS 連接埠正在監聽。僅匯入訂閱並不會自動完成這三件事。

檢查伺服器與核心狀態

  1. 更新訂閱後,在伺服器清單中選擇一組設定,確認它已設為目前使用的伺服器。
  2. 啟動核心,觀察主視窗的狀態列與記錄區域。若啟動後立即退出,應先處理連接埠占用、設定欄位或協定參數錯誤。
  3. 開啟本機代理設定,記下 HTTP、SOCKS 或混合監聽連接埠。不同版本與設定移轉結果可能不同,不要只憑舊教學猜測連接埠。
  4. 確認監聽位址是本機迴路位址。僅在目前電腦上使用時,常見位址為 127.0.0.1

以下指令假設 v2rayN 的本機 HTTP 代理連接埠是 10809。如果介面顯示其他連接埠,請將指令中的數字改成實際值。這項測試會繞過瀏覽器設定,直接讓 curl 將 HTTPS 請求交給本機 HTTP 代理:

curl -I --proxy http://127.0.0.1:10809 https://example.com

如果收到 HTTP 回應標頭,表示 curl 能連線至本機連接埠,代理鏈路至少已完成一次請求。如果顯示連線至 127.0.0.1 失敗,請優先檢查核心是否執行、連接埠是否填錯,以及是否被其他程序占用。如果本機連接埠連線成功,但接著出現握手失敗、逾時或伺服器拒絕,請查看 v2rayN 記錄與伺服器設定,不要反覆切換瀏覽器開關。

區分 HTTP 連接埠與 SOCKS 連接埠

HTTP 代理和 SOCKS 代理不是同一種入口。若將 SOCKS 連接埠填入系統的 HTTP 代理欄位,應用程式可能建立 TCP 連線,卻無法完成正確的代理協商。若 v2rayN 介面分別顯示兩個連接埠,請務必依類型使用。測試 SOCKS 代理時,可以讓 curl 使用 socks5h

curl -I --proxy socks5h://127.0.0.1:10808 https://example.com

socks5h 中的字母 h 表示由代理端解析目標網域名稱,有助於降低本機 DNS 與代理出口解析結果不一致所造成的干擾。這裡的 10808 同樣只是範例,實際值請以客戶端目前的設定為準。

瀏覽器無法使用代理:沿設定來源逐層檢查

多數桌面瀏覽器預設會跟隨作業系統代理,但瀏覽器本身的設定、擴充功能規則、企業政策或尚未結束的舊程序都可能改變這項行為。排查時不要一開始就清除所有設定,先確認瀏覽器究竟從哪裡取得代理資訊。

第一步:核對系統代理位址

開啟作業系統的代理設定,核對位址與連接埠是否與 v2rayN 目前顯示的一致。位址通常應指向本機,而不是訂閱伺服器位址。系統代理填寫的是本機入口,遠端伺服器資訊則由客戶端設定與核心負責處理。

v2rayN 的系統代理操作通常包含設定、清除或維持不變等狀態。選擇「維持不變」只代表不修改作業系統目前的值,不表示現有值一定正確。若曾調整連接埠、切換設定目錄,或同時執行其他代理工具,系統中可能仍保留舊連接埠。

第二步:完整重新啟動瀏覽器程序

關閉可見視窗後,瀏覽器的背景程序可能仍在執行。代理設定變更後,請先從工作管理區域結束瀏覽器,再重新開啟。若瀏覽器提供「使用系統代理設定」選項,請確認沒有切換成手動代理或直連模式。

隱私視窗適合排除快取與部分擴充功能的影響,但不能取代程序重新啟動。瀏覽器的代理擴充功能也可能將特定網域設為直連,或使用另一組連接埠。測試時可暫時停用負責改寫代理規則的擴充功能,保留清楚的系統代理連線路徑。

第三步:分別測試 HTTP 與 HTTPS

有些系統設定允許分別填寫 HTTP 與 HTTPS 代理。如果只填寫其中一項,存取另一類位址時可能仍會直連或直接失敗。現代網頁通常會跳轉至 HTTPS,因此「首頁能開啟,登入頁卻打不開」也可能是兩個協定欄位不一致所致。

對於本機 HTTP 代理,HTTPS 網站通常會透過 HTTP CONNECT 通道轉送。這裡不需要將本機代理位址寫成遠端網站的 HTTPS 位址。關鍵在於瀏覽器使用正確的代理類型,並連線至正在監聽的連接埠。

第四步:檢查繞過清單

系統代理通常允許設定「不使用代理的位址」。本機位址、區域網路網域與公司內部網域經常會出現在繞過清單中。如果目標網域被手動加入,或被寬泛的萬用字元規則涵蓋,瀏覽器就會直接連線。測試時請查看完整清單,不要只看第一行。

本機網站使用 localhost127.0.0.1 直連通常是合理行為。若正在除錯本機開發服務,不應將「本機位址未經代理」視為故障。真正需要確認的是外部目標是否意外被加入繞過規則。

終端機代理無效:明確設定代理環境變數

終端機只是命令解譯環境,真正決定是否使用代理的是具體程式。curl、語言套件管理器、建置工具與下載器可能讀取不同變數,也可能有獨立設定。最常見的通用入口是 HTTP_PROXYHTTPS_PROXYALL_PROXY

PowerShell 目前工作階段

以下設定只會影響目前的 PowerShell 工作階段及其啟動的子程序。關閉視窗後通常會失效,適合用於排查與暫時下載:

$env:HTTP_PROXY = "http://127.0.0.1:10809"
$env:HTTPS_PROXY = "http://127.0.0.1:10809"
curl.exe -I https://example.com

即使目標位址是 HTTPS,HTTPS_PROXY 的值也可以是 http://127.0.0.1:10809。這裡描述的是應用程式連線至本機代理所使用的協定,而不是目標網頁的協定。若要移除目前工作階段的變數,可執行:

Remove-Item Env:HTTP_PROXY
Remove-Item Env:HTTPS_PROXY
Remove-Item Env:ALL_PROXY -ErrorAction SilentlyContinue

Windows 命令提示字元目前工作階段

set HTTP_PROXY=http://127.0.0.1:10809
set HTTPS_PROXY=http://127.0.0.1:10809
curl -I https://example.com

清除變數時,將等號後方留白:

set HTTP_PROXY=
set HTTPS_PROXY=
set ALL_PROXY=

macOS 與 Linux 目前 Shell

export HTTP_PROXY="http://127.0.0.1:10809"
export HTTPS_PROXY="http://127.0.0.1:10809"
curl -I https://example.com

許多命令列工具使用小寫變數名稱。為相容於不同程式,可以在目前工作階段同時設定小寫形式:

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

測試結束後清除變數:

unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
unset http_proxy https_proxy all_proxy

使用 SOCKS 入口

如果工具支援 SOCKS,可以透過 ALL_PROXY 指定入口。範例仍假設 SOCKS 連接埠為 10808

export ALL_PROXY="socks5h://127.0.0.1:10808"
curl -I https://example.com

不是每個程式都支援 socks5h,也不是每個程式都會讀取 ALL_PROXY。如果某個工具忽略環境變數,應查看它自己的代理設定項目。不要因為 curl 成功,就推斷所有套件管理器都會自動採用相同設定。

設定 NO_PROXY 繞過本機位址

開發環境通常需要讓本機服務、容器入口與區域網路介面保持直連。可以透過 NO_PROXY 宣告要繞過代理的範圍:

export NO_PROXY="localhost,127.0.0.1,::1"
export no_proxy="$NO_PROXY"

不同工具對網域後綴、萬用字元與網段寫法的支援並不完全一致。請先從明確的主機名稱與迴路位址開始,不要直接使用過於寬泛的後綴。如果某個外部網域始終直連,也要檢查它是否被誤放入 NO_PROXY

代理已接收請求,還要檢查路由與 DNS

當瀏覽器或 curl 已連線至本機連接埠,問題就會從「應用程式是否使用代理」轉為「核心如何處理請求」。V2Ray 與 Xray 都能依據網域、IP、連接埠、協定等條件執行路由分流。請求進入核心後,仍可能依規則送往直連出口、代理出口或阻斷出口。

觀察記錄中的入站與出站

開啟 v2rayN 記錄,再發出一次目標明確的請求。如果記錄完全沒有新增連線,應用程式很可能沒有將流量交給本機代理,請回頭繼續檢查瀏覽器設定或環境變數。如果記錄出現目標網域與連線紀錄,表示入站正常,接著應查看相符的出站與錯誤訊息。

訂閱提供的是伺服器設定集合,客戶端路由規則則決定哪些請求使用目前的伺服器。兩者並非同一層。切換伺服器只能改變代理出口,無法修正將目標網域明確設為直連的本機規則。

暫時簡化路由規則

自訂規則較多時,請先保存現有設定,再使用容易理解的測試規則進行驗證。不要同時修改節點、DNS、系統代理與路由四個部分,否則即使成功,也很難判斷是哪一步生效。確認基礎代理鏈路後,再逐條恢復網域分組、IP 規則與應用程式分流。

VMess 與 VLESS 是客戶端連線至伺服器時使用的協定設定;系統代理與環境變數只是應用程式連線至本機入站的方式。瀏覽器不需要理解 VMess 或 VLESS,只需要將 HTTP 或 SOCKS 請求交給本機監聽連接埠。將這兩層分開,就能避免在協定欄位中尋找瀏覽器代理開關。

辨識 DNS 路徑差異

瀏覽器可能啟用自己的安全 DNS,作業系統也有本機解析快取;使用 SOCKS 時,網域還可能由本機或代理端解析。這些路徑不一致,會讓同一網域在瀏覽器與終端機中得到不同結果。

如果直接存取 IP 有回應,但使用網域名稱失敗,請優先檢查 DNS。使用 curl 測試 SOCKS 時,可以選擇 socks5h,讓代理端處理網域解析。瀏覽器則應檢查 DNS 設定是否覆蓋系統行為。修改後重新啟動瀏覽器,並以新的請求觀察記錄,不要只重新整理已快取的頁面。

依固定順序縮小問題範圍

代理故障最忌同時修改多個選項。以下順序從本機連接埠開始,每一步只驗證一件事。在哪一步失敗,就留在該層處理。

  1. 確認核心正在執行。選擇伺服器並啟動 v2rayN,確認程序沒有立即退出。
  2. 記錄實際連接埠。從客戶端介面讀取 HTTP 與 SOCKS 監聽連接埠,不要沿用舊截圖中的數字。
  3. 明確測試本機代理。使用 curl 的 --proxy 參數連線至本機連接埠,排除系統代理與環境變數的影響。
  4. 檢查瀏覽器設定來源。確認瀏覽器跟隨系統設定,停用會改寫代理的擴充功能,並完整重新啟動程序。
  5. 檢查終端機變數。讀取並設定 HTTP_PROXYHTTPS_PROXYALL_PROXY,同時查看 NO_PROXY
  6. 觀察核心記錄。確認請求是否進入本機入站,以及最後符合哪個路由出口。
  7. 最後處理 DNS。只有在網域解析異常時,才比較本機解析與代理端解析。

三種常見現象的快速判斷

瀏覽器成功,curl 失敗
瀏覽器很可能讀取了系統代理,而 curl 沒有讀取或尚未設定環境變數。請先使用 --proxy 進行明確測試。
curl 明確代理成功,瀏覽器失敗
本機連接埠與核心基本正常。請優先檢查系統代理連接埠、瀏覽器獨立設定、擴充功能規則與背景程序。
本機連接埠可連線,但請求仍逾時
應用程式已找到代理入口。接著檢查伺服器設定、路由分流、DNS,以及記錄中的遠端連線錯誤。

完成排查後,記得清除暫時環境變數,或為日常開發保留一份清楚的啟用與停用指令。代理連接埠可能隨設定調整而變更,永久寫入舊連接埠會將下一次故障藏在 Shell 啟動檔中。將連接埠、代理類型與修改位置記錄在同一處,比記住某個固定數字更可靠。