先分清終端機代理與 Clash 流量入口
Claude Code 在終端機中連線失敗,不一定是訂閱或代理節點故障。瀏覽器能開啟網站,也不代表終端機使用了相同的代理設定:瀏覽器可能讀取作業系統代理,而命令列程式通常會依自己的設定或目前 Shell 中的環境變數連線。若終端機沒有代理設定,即使 Clash 已開啟系統代理,Claude Code 仍可能直接連線,或因所在網路無法存取服務而逾時。
排查時可把流程拆成幾段:Claude Code 發出 HTTPS 請求 → 終端機將請求交給本機代理連接埠,或由 TUN 接收流量 → Clash 核心套用規則並選擇出站 → 代理節點連線至服務端。問題可能出在任何一段。先確認請求是否進入核心,再檢查命中的規則與出站,比反覆更換訂閱或一次切換多項設定更容易定位。
Claude Code
→ 終端機代理環境變數,或 TUN 虛擬網卡
→ Clash / mihomo 核心
→ 規則與代理群組
→ 代理節點或 DIRECT
→ Claude Code 服務
- 瀏覽器正常、Claude Code 失敗:優先檢查終端機是否有代理環境變數,以及請求有沒有出現在 Clash 的連線記錄。
- 瀏覽器與終端機都失敗:先確認設定檔已啟用、代理群組有選到可用節點,並檢查目前網路是否能連上代理伺服器。
- 連線記錄有請求但仍逾時:查看目標網域、命中規則、最終出站及錯誤訊息;這通常表示請求已進入核心,但後續連線仍可能失敗。
- 連線記錄完全沒有相關請求:檢查環境變數、代理埠號與 TUN 狀態。若終端機沒有將請求送進 Clash,調整代理群組通常不會生效。
確認設定檔、節點與本機代理連接埠
開始設定 Claude Code 前,先確認 Clash 用戶端載入的是預期設定檔。前往「設定檔 / Profiles」確認設定檔已啟用,再到「代理 / Proxies」查看代理群組是否有可選節點。設定檔匯入成功,只代表用戶端取得了設定內容,不等於設定檔已啟用,也不代表群組內的節點目前可連線。
接著查看用戶端的混合連接埠或 HTTP 代理連接埠。下文以 127.0.0.1:7890 為範例;這不是所有用戶端的固定預設值,請以目前設定為準。使用供終端機連線的本機 HTTP 代理時,優先採用用戶端明確標示為 HTTP 或混合代理的埠,不要把只供 SOCKS 使用的埠當成 HTTP 代理埠。
| 檢查位置 | 應確認的內容 | 結果代表什麼 |
|---|---|---|
| 設定檔 | 目前設定檔已啟用,且代理群組與節點存在 | 確認核心載入了預期的規則與節點來源 |
| 代理群組 | 群組選到可用節點,而非 DIRECT 或失效成員 |
確認規則命中代理群組後的實際出站 |
| 監聽連接埠 | 記下 HTTP 或混合代理埠號及監聽位址 | 確認環境變數指向正確的本機入口 |
| 連線記錄 | 搜尋服務相關網域,查看規則、策略與錯誤 | 判斷請求是否進入核心,以及後續由哪個出站處理 |
| DNS 與日誌 | 查看解析失敗、連線逾時、TLS 或代理交握錯誤 | 協助區分名稱解析、線路與應用程式設定問題 |
在 macOS 或 Linux 的終端機中,可先使用以下命令測試本機代理埠是否能建立 TCP 連線。將 7890 換成用戶端顯示的實際值:
nc -vz 127.0.0.1 7890
接著用明確指定代理的 HTTPS 請求測試代理入口與遠端連線:
curl --proxy http://127.0.0.1:7890 \
--connect-timeout 10 --max-time 25 \
-sS -o /dev/null -w 'HTTP %{http_code}\n' \
https://api.anthropic.com/
此命令只用來觀察能否經過指定代理建立 HTTPS 請求,不是 Claude Code 的登入或帳號測試。服務端可能回傳錯誤狀態碼;只要命令有收到 HTTP 回應,就與 DNS 失敗、連線逾時或 TLS 交握失敗不同。若命令報告無法連線至 127.0.0.1,先檢查埠號、用戶端是否正在執行,以及該埠是否提供 HTTP 代理。
在終端機設定臨時代理
先使用目前 Shell 工作階段內的環境變數測試,不要一開始就寫入全域啟動檔。以下範例為常見的 HTTP 代理用法,請把埠號替換成 Clash 實際監聽的 HTTP 或混合埠。環境變數的名稱需使用大寫;HTTPS_PROXY 指出 HTTPS 請求應使用的代理位址,值的協定部分仍是本機 HTTP 代理。
macOS 與 Linux:zsh、bash
在目前終端機視窗執行:
export HTTP_PROXY="http://127.0.0.1:7890"
export HTTPS_PROXY="http://127.0.0.1:7890"
export ALL_PROXY="http://127.0.0.1:7890"
claude
如果已經開啟 Claude Code,設定環境變數不會追溯變更已啟動程序的環境。請先結束該程序,再從設定好變數的同一個終端機重新執行 claude。不同版本或執行環境對代理變數的支援可能不同;如果明確指定變數後仍無請求進入 Clash,請依照實際執行方式檢查 Claude Code 的代理支援與啟動環境。
測試完成後,可以在該 Shell 中移除變數,再比較不經明確代理設定時的結果:
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
claude
NO_PROXY 可用來列出應略過代理的本機或內部目標,但不宜在排查時隨意加入寬泛網域。若目標網域意外落入略過清單,請求就可能繞過本機代理。可用 env | grep -i proxy 檢查目前工作階段中的代理變數;分享輸出前,仍要確認其中沒有內部主機名稱或其他敏感資訊。
Windows PowerShell
在 PowerShell 中,環境變數使用 $env: 語法設定。請在同一個視窗中執行 Claude Code:
$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
$env:ALL_PROXY = "http://127.0.0.1:7890"
claude
確認環境變數是否設定成功,可輸入 $env:HTTPS_PROXY。測試後可在目前視窗清除設定:
Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:ALL_PROXY -ErrorAction SilentlyContinue
這些命令只影響目前 PowerShell 程序及其後續啟動的子程序,不會替其他終端機視窗設定代理。若使用 VS Code 整合終端機、IDE 內建工作階段、遠端 SSH 或容器,還要確認 Claude Code 是在哪個環境中啟動;本機桌面系統的代理設定不一定會自動傳入遠端主機或容器。
用規則分流,並從錯誤定位問題
讓終端機請求經過本機代理,只完成了「流量進入 Clash」這一步。核心仍會依目前模式、規則順序與代理群組選擇出站。規則模式下,請檢查服務相關網域是否命中預期的代理群組;若較早的規則已命中 DIRECT、其他群組或 REJECT,後面的規則就不會再處理同一請求。
可以先在 Clash 的連線頁搜尋連線記錄中出現的網域,並核對以下欄位:請求的程序或目標、命中的規則、代理策略、最終出站及連線錯誤。不同用戶端顯示欄位的方式可能不同;如果只看見群組名稱,需再展開代理群組,確認其成員目前選到哪個節點。測速成功只能表示特定測試目標在當下可達,不能保證 Claude Code 所需的所有網域、登入流程或 API 請求都能通過。
| 現象或訊息 | 先檢查 | 下一步 |
|---|---|---|
| 連線逾時 | 環境變數、代理埠、節點連線狀態及連線記錄 | 先用 curl 明確指定代理測試,再逐段查看逾時發生位置 |
| 名稱解析失敗 | 連線記錄中的 DNS 錯誤、DNS 設定及代理路徑 | 區分本機解析與核心處理方式,不要只依瀏覽器結果判斷 |
| TLS 或握手錯誤 | 系統時間、代理連線、TLS 錯誤文字及是否有中間代理 | 先排除錯誤埠號與網路攔截,不要關閉 TLS 驗證作為常規修復 |
| 登入或授權失敗 | 帳號狀態、登入流程、服務端提示與目前地區可用性 | 確認網路請求已成功送出後,再處理帳號或服務資格問題 |
| 瀏覽器可用但 CLI 不通 | 終端機環境變數、啟動 Claude Code 的程序及代理記錄 | 在同一終端機明確設定代理後重新啟動程式 |
DNS 問題尤其容易被誤判。使用 HTTP 代理時,應用程式與代理之間會先建立連線;目標網域由哪一端解析,會受代理協定、核心設定及應用程式連線方式影響。若 Clash 記錄顯示名稱解析錯誤,應檢查核心 DNS 設定與相關日誌;如果記錄顯示請求已使用代理節點並開始連線,則應再確認節點能否連接目標服務。不要因某次本機 nslookup 成功,就推定代理端解析也一定成功。
若目前使用規則模式,可暫時確認相關請求是否被預期規則接手;如需短暫切換模式比較,測試後要還原原設定,且以新的請求驗證,避免把已建立的連線當成切換後結果。也不要為了排錯直接刪除整份訂閱、覆寫核心設定或關閉所有安全檢查。一次只調整一項,記錄改動前後的連線記錄與錯誤訊息,較容易找出真正的故障點。
如果使用 TUN,終端機流量也可能由虛擬網卡接收,但 TUN 與 Shell 代理變數是不同的流量入口。初次排查時先選一種方式驗證:使用環境變數時確認其指向本機代理埠;使用 TUN 時確認核心日誌與連線頁有收到請求,並留意其他 VPN、路由與 DNS 設定是否互相影響。兩種方式同時啟用不一定會更穩定,反而可能令流量路徑難以判讀。