Claude Code 連線不穩,問題可能出在終端機沒有走代理
Claude Code可以在命令列中理解專案內容、協助修改程式碼,也能在終端機裡持續傳送與接收模型回應。當登入一直等待、指令停在載入畫面,或串流輸出到一半中斷時,表面上看起來像是 Claude Code 當機,但原因也可能是目前網路到 Anthropic 服務的路徑不穩,或終端機程序根本沒有使用你在圖形介面設定的代理。
這是命令列工具常見的落差:Clash Verge 已經啟動,不代表每個終端機程式都會自動經過 Clash。瀏覽器可能遵循系統代理設定,但 Shell、IDE 內嵌終端機、遠端 SSH 工作階段或自動化腳本,未必會繼承相同設定。另一種情況是環境變數仍指向舊的本機連接埠,或 NO_PROXY 設定過寬,把原本需要代理的請求排除在外。
本文以 Clash Verge 為例,從確認本機 HTTP 代理連接埠開始,逐步設定終端機環境變數,再用連線測試與 Clash Verge 的連線紀錄確認流量是否走對路。Claude Code 與相關服務的登入及請求網域可能隨版本和功能改變,因此排錯時應觀察實際連線紀錄,不要只依賴一份固定網域清單。請以你所在地的法律、公司政策及 Anthropic 服務條款為準,妥善保護登入憑證和 API 金鑰。
在 Clash Verge 與終端機設定 HTTP 代理
先確認 Clash Verge 已載入可用的設定檔、核心正在執行,而且至少有一個可用策略或節點。接著在設定或連接埠資訊頁面查看 HTTP 代理連接埠;不同版本、設定檔和使用者偏好可能使用不同埠號,不要直接照抄網路文章中的預設值。若介面顯示的是混合連接埠(mixed-port),通常可用於 HTTP 與 SOCKS 流量;本文以下使用 7897 作為示例,請換成你在 Clash Verge 實際看到的數字。
在 macOS 或 Linux 終端機中,先為目前這個 Shell 工作階段設定代理:
export HTTP_PROXY="http://127.0.0.1:7897"
export HTTPS_PROXY="http://127.0.0.1:7897"
export ALL_PROXY="http://127.0.0.1:7897"
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export all_proxy="$ALL_PROXY"
HTTPS_PROXY 的值仍常以 http:// 開頭,因為終端機程式會先透過本機 HTTP 代理建立連線,再以 CONNECT 方式傳輸 HTTPS 流量;除非代理本身明確提供 HTTPS 監聽位址,否則不要自行把協定改成 https://。同時設定大寫和小寫名稱,是為了提高不同程式讀取環境變數時的相容性。若你只想在單次命令中測試,也可以將變數放在命令前面,測試結束後就不會影響該終端機中的其他工作。
在 Windows PowerShell 中,使用目前工作階段的環境變數:
$env:HTTP_PROXY = "http://127.0.0.1:7897"
$env:HTTPS_PROXY = "http://127.0.0.1:7897"
$env:ALL_PROXY = "http://127.0.0.1:7897"
$env:http_proxy = $env:HTTP_PROXY
$env:https_proxy = $env:HTTPS_PROXY
設定完成後,請從同一個終端機啟動 Claude Code。若你從 VS Code、其他 IDE 或遠端連線工具開啟終端機,也要在那個實際執行 Claude Code 的終端機裡檢查變數;在一般系統終端機設定成功,不能證明 IDE 的程序環境也已更新。修改 Shell 設定檔後,重新開啟終端機或載入相應設定檔,再啟動新的 Claude Code 工作階段,避免舊程序繼續使用先前的環境。
~/.zshrc、~/.bashrc 或 PowerShell 設定檔。若電腦會在不同網路環境間切換,臨時設定較容易清除,也能避免把已關閉的本機代理埠永久留在 Shell 設定中。
測試連線並用連線紀錄定位問題
不要只以「網頁開得起來」判斷 Claude Code 的代理已經設定完成。建議依序檢查本機代理是否可連、終端機是否讀到變數、請求是否出現在 Clash Verge 連線紀錄,以及策略是否符合預期。每次只改一個項目,並記下錯誤訊息與測試時間,會比同時切換全域模式、TUN 和多個節點更容易找出根因。
- 核對代理埠號:回到 Clash Verge 確認核心正在執行,重新查看 HTTP 或混合連接埠,並與
HTTP_PROXY、HTTPS_PROXY中的位址逐字比對。若埠號不符,終端機可能回報連線被拒絕,或在等待本機服務時逾時。 - 檢查目前終端機的變數:macOS/Linux 可使用
env | grep -i proxy;PowerShell 可使用Get-ChildItem Env:*proxy*。確認變數指向127.0.0.1和正確埠號,並留意其他啟動腳本是否又把它覆蓋。 - 用 curl 做基本連線測試:例如執行
curl -I -x http://127.0.0.1:7897 https://api.anthropic.com。若收到 HTTP 回應,即使狀態碼是 401 或 404,也通常表示 DNS、TCP、TLS 及代理轉送至少已走到服務端;這不是登入成功或 API 權限正常的證明。若請求逾時或無法連上本機埠,先檢查 Clash Verge 狀態、連接埠與節點。 - 比對 Clash Verge 連線紀錄:測試時打開連線列表,觀察是否出現 Anthropic 相關目的地、使用的策略群組及流量方向。若請求顯示為
DIRECT,檢查目前規則與策略選擇;若完全沒有相關請求,優先確認 Claude Code 是否繼承環境變數,或該程序是否透過其他網路路徑連線。 - 分開檢查登入與模型請求:瀏覽器授權流程可能涉及登入或 OAuth 網域,與模型 API 請求不一定是同一個目的地。若 API 測試有回應但登入仍卡住,觀察瀏覽器和終端機在登入期間分別連到哪些主機,再確認相關連線沒有被直連規則、DNS 問題或公司安全軟體攔截。
如果只有某一個策略群組出現逾時,可以短時間換成另一個可用策略做對照,並確認問題是否跟著節點改變。挑選節點時,除了短時間延遲,也要留意長連線是否容易中斷、串流輸出是否持續,以及同一網路環境下的穩定程度。單次延遲測試的數字不一定能代表長時間互動的表現,尤其 Claude Code 會在一個工作階段中多次請求服務。
NO_PROXY 也值得檢查。它通常用來指定不經代理的主機,例如本機服務或內部網域;若其中包含範圍過大的網域項目,可能意外排除 Anthropic 服務。排錯時先檢視其內容,不要在不清楚影響的情況下直接永久清空。完成代理測試後,若要避免本機開發服務被送往遠端代理,可只保留必要的本機例外,並再次確認 Claude Code 的服務網域沒有被排除。
當代理變數與連線紀錄都正確,卻仍看到間歇性 TLS 錯誤或長時間逾時,可以再排查公司 VPN、端點防護、DNS 設定、系統時間及其他代理程式是否同時介入。TUN 模式可作為進一步驗證系統流量路徑的工具,但它改變的範圍較大,也可能與公司 VPN 或其他網路控制軟體衝突。建議先確認明確的終端機代理設定,再於有需要時短暫測試 TUN;測試後恢復原本模式,避免把暫時的排錯設定當成日常必要設定。
常見問題
Clash Verge 已開啟系統代理,為什麼 Claude Code 還是連不上?
系統代理主要影響會讀取作業系統代理設定的應用程式,命令列工具不一定會自動採用。請在啟動 Claude Code 的同一個終端機設定 HTTP_PROXY 和 HTTPS_PROXY,再確認變數所使用的埠號與 Clash Verge 顯示一致。若你從 IDE、容器或 SSH 工作階段啟動程式,也要檢查該環境是否繼承了相同設定。
環境變數應該填 HTTP 還是 SOCKS 代理?
先使用 Clash Verge 提供的 HTTP 或混合代理連接埠,並以 http://127.0.0.1:埠號 設定常見的 HTTP 代理環境變數。只有在你確認 Claude Code 使用的元件支援 SOCKS,而且 Clash Verge 的對應 SOCKS 連接埠已啟用時,才改用 SOCKS 格式;不要因為看到另一個埠號就直接替換,否則可能造成代理協定與監聽服務不相符。
curl 有回應,是否代表 Claude Code 登入一定正常?
不一定。curl 測試主要用來確認命令列到指定服務的基本連線,不會驗證 Claude Code 的帳戶授權、使用權限、憑證狀態或其他登入網域。若基本 API 請求能取得回應但登入失敗,請在登入流程中觀察連線紀錄,並分別檢查瀏覽器授權與終端機後續請求,不要在診斷訊息或截圖中公開驗證碼、權杖或 API 金鑰。
可以把代理變數永久寫進 Shell 設定檔嗎?
可以,但建議先用目前工作階段測試穩定,再決定是否寫入。若電腦經常在家用網路、公司網路和外部環境之間切換,永久設定可能在 Clash Verge 未啟動時造成命令列程式連不上本機代理。可以採用只在需要時啟用的做法,並了解如何取消變數;若已寫入設定檔,確認埠號變更時也要同步更新。
有些代理工具主要著重瀏覽器或系統層的開關,命令列程式卻仍要另外確認環境變數;也有進階方案能接管更多流量,但會增加路由範圍與排錯成本。Clash Verge 的優勢在於可查看本機代理埠、切換策略,並透過連線紀錄核對 Claude Code 的請求是否命中預期路徑。若你希望在一個介面中管理代理,再用清楚的終端機變數逐步驗證,可以先依裝置選擇合適的 Clash 用戶端。