Linux 安裝 Clash:桌面用戶端與 mihomo 命令列部署指南

介紹 Linux 桌面圖形用戶端的安裝,以及在無圖形介面的伺服器上以 mihomo 二進位檔搭配 systemd 常駐執行,並設定組態目錄與連接埠。

一、依執行環境選擇部署方式

在 Linux 上使用 Clash 規則分流,常見做法有兩種:桌面用戶端負責訂閱、節點選擇與系統代理;mihomo 命令列核心則直接讀取 YAML,並由 systemd 管理背景程序。mihomo 是 Clash Meta 專案沿用的核心名稱,不必搭配圖形介面也能執行。

平時使用 GNOME 或 KDE 桌面瀏覽網頁,建議優先選擇圖形用戶端。沒有桌面環境的伺服器、開發機或長時間運作的主機,則可直接部署核心。兩種方式都需要有效的組態;安裝用戶端或二進位檔本身並不會提供代理節點。

比較項目桌面用戶端mihomo 命令列
適用環境GNOME、KDE 等圖形桌面無圖形介面的伺服器、背景主機
組態入口組態或訂閱管理頁面本例使用 /etc/mihomo/config.yaml
節點選擇在代理群組頁面操作設定組態中的預設順序,或透過控制介面管理
自動啟動用戶端的開機啟動選項systemd 系統服務
代理範圍系統代理或 TUN先使用本機代理連接埠,再視需求設定 TUN

二、安裝桌面用戶端並匯入訂閱

確認發行版、CPU 架構與套件格式

先執行以下兩個命令。x86_64 通常對應 x64 或 amd64 套件,aarch64 通常對應 arm64 套件。套件管理器不會自動將錯誤架構的程式轉換成可執行檔。

uname -m
cat /etc/os-release

前往下載中心,選擇提供 Linux 套件的 Clash Verge Rev 或 FlClashs 等用戶端。Ubuntu、Debian 通常使用 DEB;Fedora 等系統通常使用 RPM。是否支援目前使用的系統,仍須參考用戶端發布說明中的系統版本與執行階段函式庫需求。

以下示範安裝本機套件:先將下載的相符架構安裝套件重新命名為 client.deb 或 client.rpm,再放入下載目錄。請依發行版擇一執行安裝命令,不要兩個都執行。

cd ~/Downloads

# Debian / Ubuntu:只執行這一行
sudo apt install ./client.deb

# Fedora:只執行這一行
sudo dnf install ./client.rpm

若使用 AppImage,通常需要先設定執行權限。AppImage 能否啟動也取決於 FUSE 與桌面環境相依套件;若出現缺少共用函式庫的提示,請依用戶端說明補齊相依套件,避免以 root 身分執行整個圖形程式。

依序完成「匯入、啟用、選擇節點、設定代理」

  1. 啟動用戶端,在「組態」或「訂閱」頁面匯入服務提供者給的 Clash/mihomo 組態網址。選單名稱會因用戶端而異;節點分享連結不一定是完整的 YAML 組態。
  2. 更新後,將該組態設為目前使用的項目。確認節點清單、代理群組與規則都已載入,而不只是儲存了訂閱名稱。
  3. 開啟代理群組,選擇可用節點並測試延遲。若測試逾時,可能是測試網址無法連線,也可能是節點失效,請搭配實際連線狀況判斷。
  4. 選擇規則模式後,再開啟系統代理。查看用戶端顯示的本機監聽連接埠;下文的 7890 僅為統一示例。

以 GNOME 為例,可前往「設定」→「網路」→「網路代理」確認手動代理位址。若用戶端設定為 mixed-port: 7890,HTTP 與 HTTPS 代理都可填入 127.0.0.1,連接埠設為 7890。其他桌面環境的設定路徑可能不同。

系統代理並不是能接管所有應用程式流量的機制。瀏覽器通常會讀取桌面代理設定,但終端機工具、容器與部分獨立應用程式可能不會。若遇到「瀏覽器可用、終端機失敗」,請先為終端機明確指定代理,不必立刻切換成全域模式。

三、安裝 mihomo 核心並設定組態目錄

準備二進位檔與完整 YAML 組態

無圖形介面的部署方式需要使用符合 CPU 架構與系統環境的 mihomo Linux 二進位檔。請先解壓縮封存檔,再將其中的可執行檔重新命名為 mihomo。以下命令會從目前目錄安裝該檔案,並查看實際版本;記下版本號有助於排查組態欄位的相容性問題。

sudo install -m 0755 ./mihomo /usr/local/bin/mihomo
/usr/local/bin/mihomo -v

本例將靜態組態與執行資料分開存放:/etc/mihomo/config.yaml 放置完整組態,/var/lib/mihomo 存放快取、規則資源等可寫入資料。使用獨立的 mihomo 系統使用者執行服務,避免讓一般代理服務取得整台主機的管理權限。

getent passwd mihomo >/dev/null || sudo useradd \
  --system --user-group --home-dir /var/lib/mihomo \
  --shell /usr/sbin/nologin mihomo

sudo install -d -m 0750 -o root -g mihomo /etc/mihomo
sudo install -d -m 0750 -o mihomo -g mihomo /var/lib/mihomo

# 目前目錄中的 config.yaml 必須是已準備好的完整組態
sudo install -m 0640 -o root -g mihomo \
  ./config.yaml /etc/mihomo/config.yaml

如果系統中已存在同名使用者,請先確認其主要群組與目錄權限,不要直接套用建立帳戶的假設。組態可能包含節點憑證、訂閱網址與控制金鑰,不應開放給所有本機使用者讀取,也不要存入公開儲存庫。

只合併監聽設定,不要刪除節點與規則

請在既有完整組態中確認以下頂層欄位。這段設定只供合併,不能取代完整的訂閱組態;請保留原有的 proxies、proxy-providers、proxy-groups 與 rules 等內容。同一個 YAML 對應項目中,不要重複定義相同欄位。

mixed-port: 7890
allow-lan: false
bind-address: 127.0.0.1
mode: rule
log-level: info
tun:
  enable: false
  • mixed-port 可在同一個連接埠接受 HTTP 代理與 SOCKS5 請求,但不代表所有系統流量都會自動經過該連接埠。
  • allow-lan: false 搭配回送位址監聽,僅供本機存取,不會對公網開放代理入口。
  • mode: rule 會依組態中的規則進行分流。規則引用的策略群組必須確實存在,通常也需要在最後設定適當的預設規則。
  • 首次部署時請先關閉 TUN,避免節點、路由、DNS 與權限問題交錯,增加排查難度。

以服務帳戶執行組態檢查。-d 指定執行資料目錄,-f 指定組態檔,-t 用於測試組態。若組態依賴外部規則或地理資料,也要確認資源可正常取得且路徑可讀;語法檢查通過不代表節點連線成功。

sudo -u mihomo /usr/local/bin/mihomo \
  -t -d /var/lib/mihomo -f /etc/mihomo/config.yaml

四、使用 systemd 常駐執行 mihomo

組態檢查通過後,建立 /etc/systemd/system/mihomo.service。以下服務單元適用於一般本機代理連接埠,不會授予 TUN 所需的網路管理權限。network-online.target 代表啟動順序上的相依關係,不保證節點或網際網路已可連線。

sudo tee /etc/systemd/system/mihomo.service >/dev/null <<'EOF'
[Unit]
Description=mihomo local proxy service
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=mihomo
Group=mihomo
WorkingDirectory=/var/lib/mihomo
ExecStart=/usr/local/bin/mihomo -d /var/lib/mihomo -f /etc/mihomo/config.yaml
Restart=on-failure
RestartSec=5
UMask=0077
NoNewPrivileges=true
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
sudo systemctl status mihomo --no-pager
sudo journalctl -u mihomo -b -n 80 --no-pager

active (running) 只表示程序仍在執行。請繼續檢查日誌中是否有組態解析失敗、資源下載失敗或 address already in use 等訊息。若用戶端也正在使用 7890,請先關閉其中一個,或為兩個程序設定不同的連接埠。

修改 config.yaml 後,請先重新測試組態,再重新啟動服務。此服務單元未定義 ExecReload,因此不要假設 systemctl reload mihomo 可以重新載入組態。只有修改 service 檔案時,才需要重新執行 daemon-reload。

sudo -u mihomo /usr/local/bin/mihomo \
  -t -d /var/lib/mihomo -f /etc/mihomo/config.yaml

# 確認上一項檢查成功後再執行
sudo systemctl restart mihomo
sudo journalctl -u mihomo -b -n 40 --no-pager

五、確認連接埠、終端機代理與規則命中

先確認監聽狀態,再明確透過代理送出請求

以下第一個命令會檢查 7890 的 TCP 監聽位址,預期會看到 127.0.0.1:7890;若出現公網位址或 0.0.0.0,請先回頭檢查監聽設定。第二個命令會明確透過 HTTP 代理連線至本站;20 秒逾時是請求時間上限,並非節點延遲指標。

sudo ss -lntp 'sport = :7890'

curl --proxy http://127.0.0.1:7890 \
  --connect-timeout 10 --max-time 20 \
  --output /dev/null --show-error \
  --write-out 'HTTP %{http_code}\n' \
  https://clash-system.com/

收到 HTTP 回應表示請求已進入本機代理入口,但不能據此斷定流量經過遠端節點:規則可能選中了 DIRECT。請同時查看日誌中的目標網域、符合的規則與實際策略;若組態引用代理群組,也要確認群組內選中了哪個節點。

為目前終端機設定代理環境變數

對於會遵循代理環境變數的程式,可在目前的 shell 設定以下變數。瀏覽 HTTPS 網站時,HTTP 代理位址仍應使用 http://127.0.0.1:7890;工具會透過 CONNECT 建立通道,不要只因目標網站使用 HTTPS,就把代理位址的通訊協定改成 HTTPS。

export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export no_proxy=localhost,127.0.0.1,::1

# 測試 SOCKS5 並由代理端解析網域時
curl --proxy socks5h://127.0.0.1:7890 \
  --connect-timeout 10 --max-time 20 \
  --output /dev/null --show-error \
  https://clash-system.com/

# 還原目前終端機環境
unset http_proxy https_proxy no_proxy

這些變數只會影響目前的 shell 及其後續子程序,不會自動傳遞給所有 systemd 服務;sudo 也可能會清除這些變數。容器中的 127.0.0.1 指向容器本身,不能直接把主機的回送位址當成容器代理入口;請另外規劃可連線的位址與存取限制。

六、TUN、DNS 與遠端管理的注意事項

一般連接埠代理不一定要使用 TUN

TUN 透過虛擬網路裝置搭配路由接管流量,適合處理不遵循系統代理設定的應用程式。這項功能需要核心支援 TUN,並涉及裝置存取、網路管理權限與路由設定。前文的低權限 systemd 服務單元不能只將 tun.enable 改為 true 就直接啟用。

  • 先執行 ls -l /dev/net/tun 檢查裝置,再依目前 mihomo 文件設定服務權限與 TUN 參數。
  • 在遠端伺服器啟用自動路由前,請準備好主控台或其他復原管道,避免影響 SSH 管理連線。
  • 排查 DNS 時,請一併檢查系統解析器、mihomo 的 DNS 設定與 TUN 的 DNS 接管方式,避免發生解析迴圈或無法連線至上游 DNS。
  • 不要同時啟用桌面用戶端的 TUN 與另一個核心服務的自動路由。

一般 HTTP 代理、SOCKS5 與 TUN 的網域解析路徑並不完全相同。例如 socks5h 會將目標網域交由代理端解析;只測試本機 getent hosts 的結果,無法涵蓋所有代理請求。若遇到「IP 可連線、網域無法連線」,請先確認問題出在哪一條解析路徑。

分開管理控制介面與代理連接埠

external-controller 是管理 API,不是供瀏覽器上網使用的 HTTP 代理。常見範例會使用 127.0.0.1:9090,與 mixed-port: 7890 用途不同。若確實需要啟用,應設定獨立且強度足夠的 secret,並維持回送位址監聽;本例預設不啟用控制介面。

遠端操作可透過 SSH 轉送本機代理連接埠。例如在個人電腦執行以下命令,將電腦的 17890 轉送至伺服器的 7890。命令使用 SSH 設定中已定義的 proxy-server 主機別名;請先在個人電腦的 SSH 設定中為此別名填入實際主機與使用者。

ssh -N -L 127.0.0.1:17890:127.0.0.1:7890 proxy-server

此時,個人電腦上的應用程式應連線至 127.0.0.1:17890。SSH 連接埠轉送不會自動啟動伺服器上的代理服務,也不會自動變更電腦的系統代理。請勿為了遠端存取而直接將 7890 或控制連接埠開放至網際網路。

七、更新訂閱與排除常見問題

桌面用戶端通常提供更新訂閱的功能;獨立執行的 mihomo 不會只因讀取一份本機 YAML,就自動更新整份遠端訂閱。組態中的 proxy-providers 與 rule-providers 可依各自設定更新資源,但這不等於取代完整組態檔。

更新整份組態時,請先備份舊檔,再將新內容寫入候選檔,並使用相同的服務帳戶進行測試。測試成功後,再安裝至 /etc/mihomo/config.yaml 並重新啟動服務。不要因一次網路下載失敗就直接覆蓋目前使用的組態,也不要在日誌或支援案件中公開訂閱網址。

現象優先檢查項目處理方式
Exec format erroruname -m 輸出與下載檔的架構解壓縮並安裝相符架構的二進位檔
Permission denied執行權限、目錄權限、服務使用者確認二進位檔可執行、組態可讀取、執行資料目錄可寫入
7890 已被占用ss 輸出中的程序停用重複執行的程序,或更換監聽連接埠
程序持續執行,但請求失敗節點狀態、規則命中情形、DNS 日誌區分本機入口連線成功與遠端節點連線成功
瀏覽器可用,但終端機失敗終端機是否使用代理使用 curl --proxy 或環境變數進行測試
重新啟動後組態變更用戶端訂閱更新、服務的 -f 路徑確認組態來源,避免直接修改會被覆寫的檔案

確認部署完成時,請依序檢查:二進位檔可執行、組態測試通過、服務穩定運作、回送連接埠監聽正常、請求已進入核心、規則選擇符合預期。逐一驗證這六個步驟後,再加入自動更新或 TUN,後續維護時更容易定位問題。

下載最新版 Clash