為什麼 Clash 開著,瀏覽器卻和終端表現不一樣?

多數圖形客戶端在 Windows 或 macOS 上會一併切換「系統代理」或寫入登錄檔、網路服務,讓 Chrome、Safari、Edge 等走同一組 HTTP 代理設定;但你另外開的終端機視窗、或各種 IDE 內建終端,未必會讀到同一套。Node.js 的 npm 代理、Python 的 pip 代理、Rust 的 cargo 代理,在底層多半仍是普通的 TLS/HTTP 連線;若沒有透過 HTTP_PROXY 等變數把流量指到本機的 Clash 入站,程式預設仍是直連,就會在跨境網路下顯得極慢或反覆逾時,外觀上就像「訂閱有節點,裝依賴卻失敗」。

與我們曾介紹過的 Docker 守護行程與 BuildKit 走本機 Clash 埠 相比,本機終端不需要改 Docker 的 daemon 設定,而是更單純地盯「Clash 實際聽的埠」與「變數裡寫的埠」兩行字是否相同;也與 WSL2 裡要改填宿主 IP 的情境不同,在同一台機器的桌面終端內,通常本機迴路 127.0.0.1localhost 就能連到本機的 Clash,前提是 Clash 的入站有在聽、且沒有防火牆擋住。

先從 Clash 圖形介面讀出:mixed-port 與分埠的差別

在 Mihomo(Clash Meta)系家族裡,常見欄位包括 port(HTTP 代理入站)、socks-port(SOCKS5)、以及一個同時合併兩者語意的 mixed-port。很多圖形介面顯示的「Clash 混合埠」即為此欄,預設常見是 7890 等數值,實務上讓一個 TCP 埠同時承載可當成 HTTP 代理與 SOCKS 的連線。若你手動在 YAML 裡關掉了 mixed-port 而只留分開的 portsocks-port,就必須在環境變數裡寫正確的協定前綴,例如 http://127.0.0.1: HTTP埠socks5://127.0.0.1:SOCKS埠,兩邊不能混用。把自己當成「連線的客戶端」想:你填的 URL 必須與 Clash 在那一埠提供的服務類型一致,否則會出現立即失敗、協定錯誤,或靜止到逾時。

若你使用 TUN 模式讓作業系統層的 IP 層都進核心,命令列程式仍可能不經 TUN 而自己發起 TCP 連線,尤其當目標是「你明確寫了 IP」或本機迴路時。此時把「要出國的依賴下載」綁在本機 Clash 的 HTTP 或 SOCKS 入站,仍然是最穩、最容易除錯的做法之一。

HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 與 no_proxy

多數工具鏈在類 Unix 與 Windows(透過 WSL 或 MinGW 系終端)上會讀取下列變數;建議同時設大寫與小寫HTTP_PROXYhttp_proxy),以相容舊型程式:

  • HTTP_PROXYhttp_proxy:給以 HTTP 代理語意連線的程式;在 Clash 混合埠 上常寫成 http://127.0.0.1:你的mixed-port
  • HTTPS_PROXYhttps_proxy:給 https:// 的連線。若你透過本機的 HTTP 代理入站,且該入站已支援 CONNECT 隧道,通常可與 http_proxy 指到同一個 http:// URL。
  • ALL_PROXYall_proxy:作為萬用後備。若你打算用 SOCKS5,可設 socks5h://127.0.0.1:埠socks5h 讓遠端解析 DNS,在部分翻牆情境下較直覺)。
  • NO_PROXYno_proxy:列出不走代理的網段或主機名。若漏了公司內部 Git 或 localhost 相關條目,可能出現內部服務被硬送去代理的怪現象。一般會包含 localhost,127.0.0.1 與內部網域。

下例為在單一 shell 工作階段內、假設 Clash 混合埠 為 7890 的示意;請在互動式輸入前自行替換實際埠號:

# example: point CLI tools to local Clash mixed port
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$https_proxy"
# optional fallback for tools that only read ALL_PROXY:
# export ALL_PROXY="socks5h://127.0.0.1:7890"
export no_proxy="localhost,127.0.0.1,::1"
export NO_PROXY="$no_proxy"

若你曾在舊專案裡硬寫過 export https_proxy=...~/.zshrc 中,卻在圖形介面改過 Clash 的監聽埠,就會變成「畫面顯示是 7892,變數還是 7890」的錯位;遇到新裝客戶端或還原預設值時,請一併搜尋 shell 啟動檔與 CI 腳本裡的舊值。

npm 代理、pip 代理與 cargo 代理:何時要疊一層專屬設定?

npm、yarn、pnpm:多數情況下只要父行程繼承了 HTTP_PROXY 即可,但老版本 npm 仍可能偏好自己的 proxyhttps-proxy 欄位。可用 npm config get proxy 查是否仍有殘值;與團隊一致時,建議兩邊寫成同一個本機 http:// 位址。若你使用專用 registry,也要確認該主機沒有誤寫在 no_proxy 之外,或沒有 SSL 實驗性問題。

pip 代理:通常會遵守環境變數;臨時安裝亦可用 pip install -i 指定鏡像。若只設了系統變數仍逾時,可檢查是否用了 sudo 而丟棄了環境(必要時參考發行版文件裡的 secure_pathsudo -E 風險),以及企業內的憑證攔截。

cargo 代理:Rust 的 cargo 在拉 crates.io 與 git 依賴時,普遍會讀 HTTP(S)_PROXY。若你使用 sparse registry 或自架索引,可另在專案或全域 ~/.cargo/config.toml 內寫 [http][https]proxy,與變數擇一貫策略即可。若 cargo 行為與 git 子模組不同步,可再查 git config 層級的 http.proxy 是否衝突。

Shell 與 IDE 內建終端:兩條常見的「沒有代理」原因

第一,圖形程式啟動的內建終端不會重跑你的登入 shell 檔。你在 ~/.zshrc~/.bashrc 寫的 export,在「從 Dock 或開始選單啟動的 VS Code、Cursor、JetBrains」中,有時不會執行到與你在外部 Terminal 相同的檔;若專案依賴代理,可改在專用設定檔、IDE 的「終端整合環境變數」、或透過 direnv 等依目錄載入。本站另有一文討論 Clash 與 AI 開發者工具的分流觀念,可一併對照「圖形工具用規則、終端用本機埠」的雙層心態。

第二,同一台機器、多份設定檔。例如曾為某專案在 .env 內寫了空的 HTTPS_PROXY=,被某些整合終端讀到後,會蓋掉你在 shell 裡的 export。除錯時可先用 env | grep -i proxy 在「外部終端」與「內部終端」各跑一次,比較差異,往往一眼就能看出是誰沒繼承到。

幾行指令確認:真的連上 Clash 的埠了嗎?

在設定完變數後,可先用 curl -I 測一個可達的 https 網站;若關掉代理變數後變得明顯變慢或失敗、開啟後恢復,即表示至少有流量經本機入站。接著在 Clash 的連線或日誌畫面觀察是否有對應條目,網路介面有時會顯示程式的進程名稱,方便確認是不是該次 npmpip 連線。若 curl 能通、套件管理卻不能,就回到上一節查工具專屬的 proxy 或 git 設定。若 curl 也不通,先核對圖形介面裡的埠號、防火牆是否攔截本機埠,以及 bind-address 是否只聽了非本機位址(需依你的核心版本手冊與圖形介面同步檢查)。

WSL2 與本機案:別在錯的網路命名空間填 127.0.0.1

若你的指令列實際跑在 WSL2 裡,127.0.0.1:7890 往往指向的是 Linux 子系統自己,而不是 Windows 上的 Clash。此時請改依WSL2 專文取得宿主可見的 IP 再寫變數;本頁的「本機 127.0.0.1」前提,僅適用於與 Clash 同一個作業系統用戶空間的終端(例如純 Windows 的 PowerShell、或 macOS 的 Terminal.app)。

合規提醒:請在所在地法律與您所屬網路使用政策允許的範圍內使用代理與加密通道。本文僅提供技術連線與設定觀念,不構成任何規避法規的指引。

核心與文件

不同版本的圖形介面欄位名稱、預設埠與是否預設啟用 Clash 混合埠 可能不同。需要核對原始選項定義時,可至 Mihomo 核心專案查閱;若需要安裝圖形用戶端,建議從本站的 下載頁面取得整包,避免與手動編寫的 YAML 版本錯位。

小結

終端走代理的本質,是把 npm 代理、pip 代理、cargo 代理 實際會用到的外連,統一導到「與圖形介面同一個、且仍在監聽的」Clash 本機入站埠HTTP_PROXYHTTPS_PROXY 的埠號要與 mixed-port 或你手動分開的 HTTP 埠一致,ALL_PROXY 則在需要 SOCKS 或補遺工具時再補,並用 no_proxy 顧好內網與本機。釐清一般 Shell 與 IDE 內建終端是否讀到同一份變數後,多數依賴逾時問題可以收斂到「一個錯的埠、一個沒匯入的啟動檔」兩大類。相較於額外找不相干的加速器,在桌面端讓 Clash 穩定提供本機轉送,再把指令列變數對齊,體感與除錯成本往往更好。

→ 立即免費下載 Clash,讓本機入站與專案依賴下載用同一條可預期路徑