「網頁可以開啟,但終端機指令仍然直連」通常不是節點失效,而是應用程式讀取代理設定的方式不同。v2rayN 啟動核心後,會在本機監聽 SOCKS、HTTP 或混合代理連接埠;系統代理開關只是將其中一個入口寫入作業系統設定,不會強制所有程序把流量交給該連接埠。
瀏覽器、桌面軟體、PowerShell、命令提示字元與 Linux shell 對系統代理的處理方式並不一致。排查時應將問題拆成三層:本機監聽連接埠是否存在、應用程式是否知道代理位址、代理請求是否被路由至正確的出站。只檢查節點延遲,無法涵蓋這三層。
本文適合遇到「瀏覽器正常、curl 或套件管理器無法連線」「系統代理已開啟但部分程式仍直連」的使用者。依序檢查連接埠監聽、系統代理、終端機環境變數、TUN 接管與路由日誌五個層次,即可判斷故障位於用戶端入口、應用程式設定或代理出站。
先釐清系統代理、本機連接埠與 TUN
v2rayN 的運作可分為「核心監聽」與「應用程式接入」兩個階段。選取節點並啟動服務後,Xray 或 v2fly 核心會先在本機建立入站連接埠;瀏覽器或終端機只有將請求送到該連接埠,後續的 VMess、VLESS 等協定連線才會發生。節點協定與本機代理協定不是同一概念:遠端使用 VLESS,不代表終端機也要理解 VLESS;終端機通常只連線至本機的 HTTP 或 SOCKS 入口。
系統代理主要影響會主動讀取作業系統代理設定的應用程式。常見瀏覽器通常會讀取這項設定,因此開啟 v2rayN 系統代理後網頁便能恢復;許多命令列工具則只讀取自己的設定檔,或讀取 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 環境變數,因此終端機仍可能直接連線至目標位址。
結論:先驗證本機入口,再調整遠端節點
如果終端機無法連線至 127.0.0.1 的代理連接埠,問題發生在本機監聽或連接埠填寫階段;此時反覆切換 VMess、VLESS 節點並不能解決應用程式接入失敗。
檢查 v2rayN 系統代理與監聽連接埠
先確認 v2rayN 主介面中的目前伺服器已設為作用中節點,底部執行狀態沒有持續報錯。接著開啟日誌,觀察核心是否完成啟動。僅匯入訂閱或選取清單列,不代表代理已啟用;訂閱負責提供節點設定,系統代理則負責將支援該設定的應用程式導向本機入口。
-
確認作用中節點
在伺服器清單中選取一個節點,透過右鍵選單設為作用中伺服器。確認主介面底部顯示核心正在執行,而不是停留在啟動失敗或設定解析錯誤的狀態。
-
讀取本機連接埠
開啟「設定」→「參數設定」→「基礎設定」,記錄本機監聽位址、SOCKS 連接埠、HTTP 連接埠或混合連接埠。後續指令必須使用此處顯示的實際數值。
-
設定代理模式
開啟「系統代理」,選擇「自動設定系統代理」或目前版本對應的啟用項目。若先前殘留手動代理,請先選擇「清除系統代理」,再重新啟用。
-
檢查路由模式
在「設定」→「路由設定」中確認目前規則集。測試階段可先排除目標網域被錯誤送往直連出站的情況,確認後再恢復所需的分流設定。
-
重新啟動目標應用程式
完全結束瀏覽器或桌面應用程式後重新開啟。部分程式只會在啟動時讀取系統代理,執行期間切換 v2rayN 開關不會立即更新既有連線。
Windows 可使用 PowerShell 檢查連接埠是否正在監聽。請將範例中的連接埠改為 v2rayN 介面顯示的數值:
Test-NetConnection 127.0.0.1 -Port 10808
Test-NetConnection 127.0.0.1 -Port 10809
結果中的 TcpTestSucceeded 為 True,表示至少有程序接受該連接埠的連線;但這不能證明遠端節點一定可用。若結果為 False,應返回 v2rayN 檢查核心啟動狀態、連接埠衝突與安全軟體規則,而不是繼續設定終端機環境變數。
- 連接埠被其他程式佔用時,日誌通常會出現監聽失敗或位址已在使用中的訊息。
- 監聽位址為
127.0.0.1時,只允許本機應用程式連線,區域網路中的其他裝置無法直接使用。 - 修改連接埠後需要重新啟動核心,舊終端機視窗中的環境變數也要同步更新。
- 系統代理中記錄的連接埠必須與目前的 HTTP 或混合入口一致,不能將只支援 SOCKS 的入口當作 HTTP 代理填寫。
瀏覽器正常但終端機直連的處理方式
終端機本身只是執行指令的環境,真正決定是否讀取代理的是具體程式。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
- 變數值中不應包含全形引號、結尾註解或換行。
NO_PROXY或no_proxy中若包含目標網域,該請求便會繞過代理。- 從桌面捷徑啟動的終端機,不一定會繼承另一個終端機剛設定的變數。
- 已在執行中的開發工具通常不會自動讀取之後修改的系統環境,必須完全結束後重新啟動。
- HTTP 代理位址可以承載前往 HTTPS 目標的 CONNECT 請求,變數值不必因為目標是 HTTPS 就改成不存在的 TLS 監聽連接埠。
如果只有某一個指令無法使用,而 curl --proxy 已成功,應查看該工具的代理設定優先順序。不要同時在系統代理、環境變數與工具設定中填入三個不同的連接埠,否則很難從日誌判斷請求實際進入哪個入口。
需要接管更多程式時再考慮 TUN 模式
TUN 模式透過虛擬網路介面攔截更多 IP 流量,不依賴每個應用程式主動讀取系統代理。因此,當目標程式明確忽略系統代理、無法設定環境變數,或需要統一接管多個命令列程序時,TUN 比逐一設定更直接。但它改變的是流量入口,不會自動修復節點參數、憑證網域、DNS 或路由規則。
- 先確認一般 HTTP 或 SOCKS 入口能透過明確代理完成請求。
- 在 v2rayN 的 TUN 相關設定中啟用虛擬網卡模式,並依系統提示授予建立網路介面所需的權限。
- 檢查路由規則是否將區域網路、回環位址與必要的本機服務保留為直連。
- 重新測試終端機請求,同時查看日誌中的入站類型、目標位址與出站標籤。
- 出現整體無法上網時,請先關閉 TUN,確認系統預設路由恢復,再檢查 DNS 與虛擬介面狀態。
TUN 適合處理不讀取系統代理的程式,但瀏覽器與終端機表現不一致時,不必一開始就啟用。明確代理指令能更快劃定範圍:本機連接埠是否暢通、協定前綴是否正確、節點能否建立出站。只有這些基礎項目正常,TUN 排查才有清楚的起點。
依現象定位路由、DNS 與訂閱問題
當瀏覽器與終端機都已進入 v2rayN,但存取結果仍不同,應繼續檢查網域解析與路由比對。瀏覽器可能使用自身快取,終端機可能呼叫系統 DNS;兩者取得的目標位址不同後,也可能命中不同的 geoip、網域或私有位址規則。
現象:網域失敗,但直接存取目標 IP 有回應
原因與解法:優先檢查 DNS。使用 socks5h 讓代理端處理網域解析,並在 v2rayN 日誌中確認網域是否解析為預期位址。
現象:部分網域正常,部分網域始終直連
原因與解法:目前路由規則可能依網域、IP 區域或私有網段選擇直連出站。開啟「設定」→「路由設定」,核對規則順序與目標出站。
現象:更新訂閱後連接埠突然變更
原因與解法:訂閱通常只更新伺服器項目,不應直接決定本機監聽連接埠。檢查是否同時匯入了用戶端設定或還原舊設定,接著統一修改環境變數中的連接埠。
訂閱連結提供的是節點集合,更新訂閱後仍需選定作用中伺服器。若節點清單更新成功,但核心日誌顯示設定無法啟動,即使系統代理維持開啟,也只會將瀏覽器請求送到無法正常工作的本機入口。此時應先解決啟動日誌中的第一個設定錯誤。
| 測試結果 | 優先檢查位置 | 下一步 |
|---|---|---|
| 本機連接埠測試失敗 | 核心狀態、連接埠衝突 | 重新啟動核心並讀取日誌 |
| 明確代理成功,一般指令失敗 | 環境變數、工具設定 | 統一代理位址與協定 |
| HTTP 成功,SOCKS 失敗 | 入口類型、連接埠填寫 | 依介面確認 SOCKS 連接埠 |
| 網域失敗,IP 有回應 | DNS 與網域路由 | 使用 socks5h 並查看日誌 |
| 所有入口連線成功,但請求中斷 | 節點、傳輸層、遠端出站 | 切換已驗證節點進行對照 |
完成排查後的驗證與恢復
修復後不要只用單一網頁判斷結果。至少完成本機連接埠、明確代理、一般終端機請求與瀏覽器四項驗證,並確認結束 v2rayN 後系統代理能夠清除。如此可避免目前視窗看似恢復,但系統中仍殘留舊連接埠。
-
重新測試監聽連接埠
使用
Test-NetConnection或同等工具確認目前連接埠可連線,並核對測試連接埠與參數設定中的數值完全一致。 -
執行明確代理請求
分別使用 HTTP 或
socks5h入口執行一次curl --proxy,確認本機入口與代理鏈路都能完成請求。 -
執行一般請求
移除指令中的明確代理參數,透過目前工作階段的環境變數再次發出請求。成功後才能表示終端機代理設定已生效。
-
核對分流日誌
查看同一時段的存取日誌,確認目標網域命中預期規則,並被送往代理或直連出站。
-
測試結束後的恢復狀態
在 v2rayN 中先清除系統代理,再結束用戶端。確認瀏覽器與系統網路沒有繼續指向已關閉的
127.0.0.1連接埠。
整個排查順序可以濃縮成一句話:先看本機連接埠是否監聽,再用明確代理驗證鏈路,接著設定終端機環境變數,最後才考慮 TUN、DNS 與複雜路由。瀏覽器能走代理只能證明瀏覽器成功讀取某個入口,不能代表所有程序都已被接管。
常見問題
開啟系統代理後,為什麼 PowerShell 仍然直連?
PowerShell 中執行的具體指令不一定會讀取 Windows 系統代理。先用 curl --proxy 驗證,再在目前工作階段設定 HTTP_PROXY、HTTPS_PROXY 或 ALL_PROXY。
10808 和 10809 應該選哪一個?
不要只依常見連接埠猜測。開啟 v2rayN「設定」→「參數設定」→「基礎設定」,依實際入口類型選擇。HTTP 工具連線至 HTTP 或混合入口,SOCKS 工具連線至 SOCKS 入口。
環境變數應該永久保存嗎?
建議先只對目前工作階段設定。確認連接埠長期固定且工具確實需要後,再儲存至使用者環境或 shell 設定中;修改 v2rayN 連接埠時也要同步更新。
啟用 TUN 模式後還需要系統代理嗎?
取決於實際接管範圍。TUN 可以攔截更多不讀取系統代理的流量,但測試時應避免同時保留指向錯誤連接埠的環境變數。先單獨驗證一種入口,再依應用程式需求組合使用。