對開發者來說,網路問題往往不是「整台電腦都不能上網」,而是集中出現在幾個非常具體的工作流程:GitHub 拉取停在某個百分比、git push 長時間沒有回應、SSH 連線逾時、Homebrew 更新速度極慢,或是瀏覽器可以開啟網站,但終端機裡的工具卻完全無法連線。這些情況通常與終端機是否使用代理、Git 與 SSH 是否共用代理設定、公司內網是否需要直連有關。

本文以 Clash、Clash Verge、Clash Verge Rev 與 Mihomo 為例,整理開發者最常用的代理設定方式。你會看到如何確認 Clash 的本機代理埠、設定 Shell 環境變數、為 Git 配置 HTTP 代理、讓 SSH 透過 SOCKS5 連線,以及如何避免代理設定影響公司 GitLab、區域網路與內部套件伺服器。

先理解開發者工具的代理路徑

在開始修改設定前,先確認不同工具的網路請求並不一定走同一條路徑。瀏覽器通常會讀取作業系統或 Clash 的系統代理;終端機程式則可能完全忽略系統代理,只讀取環境變數;Git 會讀取自己的全域設定,也可能繼承環境變數;OpenSSH 則有獨立的設定檔,不會自動使用 Git 的 HTTP 代理。

  • 瀏覽器與一般桌面應用程式:通常透過 Clash 的系統代理或 TUN 模式接管流量。
  • Shell 與命令列工具:常見做法是設定 HTTP_PROXY、HTTPS_PROXY 與 ALL_PROXY。
  • Git over HTTPS:可以使用 Git 的 http.proxy,也可以繼承 Shell 的代理變數。
  • Git over SSH:需要在 SSH 設定檔中透過 SOCKS5、HTTP CONNECT 或其他跳板方式建立連線。
  • Homebrew:部分下載會使用 curl、git 或 Ruby 相關元件,實際是否走代理取決於環境變數與工具版本。

Clash 常見的本機埠包括 HTTP 代理 7890、SOCKS5 7891,但不同客戶端與自訂設定可能使用其他埠號。不要直接套用範例中的數字,應先在 Clash 的設定頁、一般設定或外部控制器中確認目前的 mixed-port、port 或 socks-port。

先做基本測試:假設你的 Clash HTTP 埠是 7890,可以執行 curl -I -x http://127.0.0.1:7890 https://github.com。如果能收到 HTTP 標頭,代表代理本身可用;若失敗,應先檢查 Clash 是否啟動、埠號是否正確,以及目前策略組是否有可用節點。

設定終端機的通用代理

對命令列工具而言,環境變數是最方便的入口。HTTP_PROXY 和 HTTPS_PROXY 通常使用 HTTP 代理格式;ALL_PROXY 則可指定 SOCKS5。為了避免大小寫差異造成部分程式讀不到設定,建議大小寫版本一起設定。

macOS 或 Linux 的臨時代理
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5://127.0.0.1:7891

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

curl -I https://github.com

以上設定只在目前的終端機工作階段有效,關閉視窗後便會消失。若你每天都需要代理,可以將其放入 Zsh 或 Bash 的啟動檔案,例如 macOS 常用的 ~/.zshrc,Linux 則可能使用 ~/.bashrc 或 ~/.zshrc。修改後執行 source ~/.zshrc 讓設定立即生效。

可選擇的永久設定
# ~/.zshrc
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5://127.0.0.1:7891

# 套用設定
source ~/.zshrc

# 檢查是否已載入
env | grep -i proxy

Windows PowerShell 可以使用 $env: 語法設定目前工作階段的變數。若使用 Windows Terminal 啟動 PowerShell,設定方式與傳統 PowerShell 基本相同。

Windows PowerShell 代理設定
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
$env:ALL_PROXY="socks5://127.0.0.1:7891"

curl.exe -I https://github.com
注意代理殘留:如果你只想暫時加速一次下載,建議在單一命令前使用環境變數,或完成工作後執行 unset HTTP_PROXY HTTPS_PROXY ALL_PROXY http_proxy https_proxy all_proxy。長期保留代理可能導致公司內網、localhost 或區域網路服務連線異常。

為 Git HTTPS 設定代理

GitHub、GitLab 和 Bitbucket 都可能透過 HTTPS 提供遠端倉庫。當你使用 git clone https://...、git fetch 或 git push 時,Git 可以直接使用自己的代理設定。這種方式比單純設定 Shell 變數更明確,也方便只針對 Git 生效。

Git 全域 HTTP 代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

git config --global --get http.proxy
git config --global --get https.proxy

如果代理是 SOCKS5,可以使用 socks5h,其中 h 代表讓代理伺服器解析目標域名。這對 DNS 受到污染或本地解析結果不可靠的環境尤其重要。

Git 使用 SOCKS5 代理
git config --global http.proxy socks5h://127.0.0.1:7891
git config --global https.proxy socks5h://127.0.0.1:7891

git ls-remote https://github.com/example/project.git

如果只需要為某一個倉庫設定代理,不建議使用 --global。在該倉庫目錄執行以下命令即可,設定會寫入專案的 .git/config,不會影響其他專案。

單一倉庫的代理設定
cd ~/Projects/sample-project
git config http.proxy http://127.0.0.1:7890
git config https.proxy http://127.0.0.1:7890

# 移除目前倉庫的代理
git config --unset http.proxy
git config --unset https.proxy

若你的公司內部 GitLab 可以直連,建議建立例外,讓公開服務走 Clash、內部網域保持直連。Git 支援依 URL 前綴指定代理,例如:

Git 公網與內網分流
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

git config --global http.https://gitlab.corp.example.com.proxy ""
git config --global https.https://gitlab.corp.example.com.proxy ""

git config --global --list | grep -E "proxy|gitlab"

讓 Git SSH 透過 Clash 連線

使用 SSH 遠端網址時,Git 不會讀取 http.proxy。例如 [email protected]:owner/project.git 實際上會呼叫 OpenSSH,因此必須在 ~/.ssh/config 中設定代理。Clash 的 SOCKS5 埠通常是最方便的選擇。

SSH 透過 SOCKS5 代理
# ~/.ssh/config
Host github.com
    HostName github.com
    User git
    Port 22
    ProxyCommand nc -X 5 -x 127.0.0.1:7891 %h %p
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes

macOS 通常內建支援帶有 SOCKS5 功能的 nc。部分 Linux 發行版的 netcat 參數不同,如果執行測試時出現未知選項,可以改用 connect-proxy、ncat 或系統套件提供的對應工具。配置完成後,先不要直接執行推送,應使用詳細模式確認 SSH 是否真的經過代理。

測試 GitHub SSH
ssh -T -v [email protected]

git remote -v
git fetch origin
git push origin main

如果公司網路封鎖 TCP 22 埠,而 GitHub 的 HTTPS 仍可使用,可以讓 SSH 連到 GitHub 提供的 443 埠。這仍然是 SSH 協定,只是改用較容易通過防火牆的連接埠。

SSH 使用 GitHub 的 443 埠
# ~/.ssh/config
Host github.com
    HostName ssh.github.com
    User git
    Port 443
    ProxyCommand nc -X 5 -x 127.0.0.1:7891 %h %p
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
判斷 SSH 問題的順序:先用 ssh -T [email protected] 測試身份驗證,再用 ssh -vT [email protected] 查看代理命令是否成功,最後才檢查 Git remote、分支權限與 SSH 金鑰。不要把「網路連不上」和「金鑰沒有權限」混為同一個問題。

Homebrew 下載與更新加速

Homebrew 的工作包含更新 formula 索引、拉取 Git 倉庫、下載 bottle 二進位套件,以及執行部分由 curl 或其他下載器完成的請求。因此只設定某一個工具,未必能覆蓋整個流程。最簡單的方式是先在目前終端機設定 HTTP、HTTPS 與 SOCKS5 代理,再執行 Homebrew 命令。

使用 Clash 加速 Homebrew
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5://127.0.0.1:7891

brew update
brew outdated
brew install wget
brew upgrade

在 Apple Silicon Mac 上,Homebrew 通常位於 /opt/homebrew;Intel Mac 常見路徑則是 /usr/local。如果你以圖形介面啟動的工具無法讀取 Shell 裡的代理變數,這不一定是 Clash 失效,而可能是該程式與終端機使用了不同的環境。此時應優先確認 Clash 的系統代理或 TUN 模式,而不是盲目重複設定。

Homebrew 還可能需要從 GitHub、GitHub Releases、各套件上游站點下載檔案。若 brew update 可以完成,但安裝某個套件時卡住,應查看錯誤訊息中的實際下載網址,再用帶代理的 curl 單獨測試該網址,這樣可以區分是節點問題、DNS 問題還是上游伺服器暫時異常。

公司內網與公開服務的分流策略

開發者最容易忽略的是「代理不是越多越好」。公開 GitHub、套件註冊表與文件網站可能需要代理,但公司 GitLab、Jira、內部 Docker Registry、VPN 網段與本機開發服務通常應該直連。若所有流量都送到境外節點,可能造成內網服務無法解析、認證失敗,甚至觸發公司安全系統的異常登入警報。

  • 將 localhost、127.0.0.1、*.local 與公司內部網域設定為直連。
  • 對常見私有網段 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 保留 DIRECT 規則。
  • 公司 GitLab 若使用自訂網域,應以完整網域加入 Clash 的直連規則或 Git 的代理例外。
  • 使用 TUN 模式時,確認 DNS 劫持與路由設定不會把 VPN 內的 DNS 請求送到錯誤出口。
  • 不要把公司憑證、私有套件下載網址或內部原始碼傳送到不受信任的第三方代理。
Shell 代理的內網排除範例
export NO_PROXY="localhost,127.0.0.1,::1,.local,.corp.example.com"
export no_proxy="$NO_PROXY"

# 測試內網服務是否不經代理
curl -I https://gitlab.corp.example.com

NO_PROXY 的匹配方式會因程式而異,有些工具支援網域後綴,有些工具對萬用字元的行為不同。遇到內網連線問題時,可以先用完整主機名稱測試,再逐步縮小範圍。若 Clash 本身開啟了 TUN 模式,環境變數的排除並不一定能阻止 TUN 接管,因此仍需同步檢查規則與模式。

常見故障排查流程

當 Git、SSH 或 Homebrew 出現問題時,建議按照由底層到上層的順序排查,不要一開始就修改大量設定。

  1. 確認 Clash 正常運作:檢查客戶端是否啟動、策略組是否有可用節點,並確認 HTTP 與 SOCKS5 埠號。
  2. 測試代理本身:使用 curl -x 指定代理請求 GitHub 或其他目標網站。
  3. 檢查環境變數:執行 env | grep -i proxy,確認沒有錯誤的舊埠號或已失效的遠端代理。
  4. 檢查 Git 層設定:使用 git config --show-origin --get-regexp 'http.*proxy',確認代理來自全域設定、目前倉庫或其他檔案。
  5. 檢查 SSH 詳細日誌:使用 ssh -vT,觀察 ProxyCommand、DNS、TCP 連線與金鑰驗證分別在哪一步失敗。
  6. 檢查分流規則:確認目標網域沒有被錯誤匹配到 REJECT、DIRECT 或不適合的節點策略。
  7. 清理不必要的永久設定:問題解決後,移除不再需要的 Git 全域代理與 Shell 變數,避免日後內網服務出現難以追蹤的錯誤。

常見錯誤訊息也能提供方向:Could not resolve host 多半與 DNS 或代理解析有關;Connection timed out 通常涉及路由、埠號或節點不可用;Permission denied (publickey) 則代表已經連到 SSH 服務,但金鑰身份驗證失敗。把錯誤發生的層級分清楚,通常比更換大量節點更有效。

總結來說,Clash 對開發者的價值不只是讓瀏覽器開啟網站,而是把 Git、SSH、Homebrew 與其他命令列工具納入一套可控的流量管理流程。公開服務可以透過代理改善連線,公司的內部網路則保留直連;Git HTTPS 使用明確的 HTTP 代理,Git SSH 使用獨立的 SOCKS5 設定,兩者分開管理,後續排錯會簡單許多。完成設定後,建議保留一組可重複執行的測試命令,當網路環境或 Clash 設定變更時,就能快速定位問題。

立即開始

用 Clash 掌控您的流量

支援 Windows、macOS、Linux、Android 與 iOS,靈活規則,開箱即用。

免費下載 查看設定指南 →