Linux 如何安裝 Clash:桌面客戶端與純命令列核心的兩種部署方式

在 Linux 上使用 Clash 有兩種方式:安裝圖形化桌面客戶端,或直接執行核心並交由 systemd 管理。本文依發行版說明安裝步驟、設定檔位置與開機自動啟動設定,並比較兩種方案的適用情境。

先選擇部署方式:桌面客戶端或 Mihomo 命令列核心

Linux 沒有一套適用於所有情境的通用安裝方式。日常使用 Ubuntu、Fedora、Linux Mint 或 Arch 桌面的使用者,通常更需要訂閱管理、策略組切換、日誌檢視與系統代理開關;伺服器、軟路由旁路環境及無顯示器主機,則更重視資源用量、遠端維護與開機自動啟動。這兩類需求分別對應桌面客戶端與純核心兩種部署方式。

比較項目 桌面客戶端 Mihomo 命令列核心
適用裝置 Ubuntu、Fedora、Mint、Arch 桌面 伺服器、開發機、NAS、無桌面環境主機
訂閱匯入 在圖形介面貼上 URL 並更新 自行準備或定期更新 config.yaml
策略切換 直接點選策略組與節點 透過外部控制器 API 或 Web 面板操作
背景執行 登入桌面後自動啟動 由 systemd 在系統啟動時啟動
典型記憶體用量 介面與核心合計通常約 140~320 MB 一般規則設定通常約 35~110 MB
TUN 權限 通常由服務模式或授權元件處理 需要 CAP_NET_ADMIN 等權限

安裝前先確認 CPU 架構

下載錯誤架構的軟體套件,會直接出現「無法執行二進位檔」或 Exec format error。請先在終端機執行以下命令:

uname -m
cat /etc/os-release

發行版資訊會決定套件格式:Ubuntu、Debian、Linux Mint 優先選擇 .deb;Fedora、RHEL 系發行版優先選擇 .rpm;其他桌面發行版可以使用 AppImage。伺服器部署核心時,直接使用與架構相符的可執行檔即可。

方式一:安裝 Linux 桌面客戶端

桌面部署建議選擇內建 Mihomo 核心、仍持續維護且提供 Linux 建置版本的客戶端。安裝套件名稱可能帶有 amd64、x86_64、arm64 或 aarch64 標記,請先依照前述 uname -m 結果進行比對。不要將 macOS 的 ClashX 安裝套件複製到 Linux,兩者的程式格式與系統介面並不相容。

Ubuntu、Debian 與 Linux Mint 安裝 DEB

假設安裝套件已下載至「下載」目錄,請先進入該目錄,再讓 APT 安裝本機套件。使用 APT 而不是只執行 dpkg -i,可以同時處理套件宣告的相依性。

cd ~/下載
sudo apt install ./Clash-Linux-amd64.deb

英文目錄環境通常使用 cd ~/Downloads。檔名應替換為實際下載至本機的完整名稱,輸入前幾個字元後按 Tab 可自動補全。安裝完成後,可以從應用程式選單啟動;也可以執行 dpkg -l | grep -i clash,確認套件是否已登錄。

Fedora、RHEL 系發行版安裝 RPM

cd ~/Downloads
sudo dnf install ./Clash-Linux-x86_64.rpm

dnf install 會讀取 RPM 的相依性資訊。若系統啟用了較嚴格的桌面安全性策略,首次啟用 TUN 或服務模式時可能出現管理員授權視窗;這是建立虛擬網卡及修改路由所需的權限步驟,不應反覆取消。

AppImage 的執行與固定位置

AppImage 不需要寫入發行版的套件資料庫,但檔案必須具備執行權限。以下以下載目錄中的檔案為例:

cd ~/Downloads
chmod +x Clash-Linux-x86_64.AppImage
./Clash-Linux-x86_64.AppImage

如果系統提示 FUSE 相關錯誤,應透過目前發行版的套件庫安裝相容的 FUSE 執行元件;也可以先使用 --appimage-extract-and-run,確認程式能否啟動。長期使用時,建議將 AppImage 移至 ~/Applications,避免清理下載目錄時誤刪。

匯入訂閱並完成首次連線

  1. 開啟客戶端的「訂閱」頁面,選擇「新增」或「從 URL 匯入」。部分客戶端的操作路徑為「訂閱」→「新增」→「URL」。
  2. 貼上服務提供者提供的訂閱網址,確認後執行一次更新。
  3. 進入「代理」或「策略」頁面,在主要策略組中選擇節點,也可以選擇 URL 測速組。
  4. 開啟「系統代理」,接著造訪測試頁面或使用命令檢查出口位址。
  5. 只有在需要接管不讀取系統代理的軟體時,才設定 TUN 模式;首次啟動時不必同時變更所有網路設定。
curl -I --proxy http://127.0.0.1:7890 https://example.com
curl -I --proxy socks5h://127.0.0.1:7890 https://example.com

第一個命令用來驗證 HTTP 代理,第二個使用 SOCKS5,並將網域解析交給代理端。連接埠必須以客戶端的實際設定為準:常見的混合連接埠是 7890,但有些設定會將 HTTP 與 SOCKS 分別放在 78907891。檢查路徑通常是「設定」→「參數設定」→「連接埠設定」。

方式二:安裝 Mihomo 命令列核心

Mihomo 是延續 Clash 設定體系的開源核心,支援規則分流、策略組、規則集、DNS 與 TUN。命令列部署不包含訂閱清單與系統匣選單,主要工作是準備可執行檔、放置 config.yaml,再交由 systemd 管理。

安裝二進位檔與專用帳戶

以下命令以已下載並解壓縮的 mihomo-linux-amd64-v1.19.12 為例。版本號僅用於說明檔名格式,實際部署時應選擇下載頁提供的目前版本與正確架構。

sudo install -Dm755 mihomo-linux-amd64-v1.19.12 /usr/local/bin/mihomo
sudo useradd --system --home-dir /var/lib/mihomo --create-home --shell /usr/sbin/nologin mihomo
sudo install -d -o mihomo -g mihomo -m 750 /var/lib/mihomo
/usr/local/bin/mihomo -v

若發行版沒有 /usr/sbin/nologin,可以先執行 command -v nologin 查找實際路徑。使用獨立的系統帳戶可以將執行目錄與一般使用者的家目錄分開,也方便 systemd 精確授予網路能力。

準備最小可執行設定

將轉換或匯出的完整 Clash/Mihomo 設定儲存為 /var/lib/mihomo/config.yaml。以下片段展示連接埠、控制器、DNS 與規則的基本結構,但不包含代理節點,只能用來檢查核心啟動與直連鏈路。

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: true

external-controller: 127.0.0.1:9090
secret: "change-this-controller-secret"

dns:
  enable: true
  listen: 127.0.0.1:1053
  ipv6: true
  enhanced-mode: fake-ip
  nameserver:
    - 1.1.1.1
    - 8.8.8.8

proxies: []

rules:
  - MATCH,DIRECT

mixed-port: 7890 同時接受 HTTP 與 SOCKS 連線;external-controller 是控制介面,不是代理連接埠。控制介面只監聽 127.0.0.1,可避免直接暴露給區域網路。實際設定中應設置獨立且高強度的 secret,遠端管理時優先透過 SSH 連接埠轉送存取。

複製設定後修正擁有者,並執行語法測試。YAML 對縮排很敏感,清單項目通常比父層多兩個空格,不建議使用 Tab 字元縮排。

sudo chown mihomo:mihomo /var/lib/mihomo/config.yaml
sudo chmod 640 /var/lib/mihomo/config.yaml
sudo -u mihomo /usr/local/bin/mihomo -t -d /var/lib/mihomo

測試成功時會完成設定解析;如果出現 yamlmappingunmarshal 錯誤,應回到提示行附近檢查縮排、冒號與欄位型別。訂閱回傳網頁、登入提示或 Base64 節點清單時,也不能直接當作完整的 config.yaml 使用。

使用 systemd 設定背景執行與開機自動啟動

直接在 SSH 工作階段中執行 Mihomo,關閉終端機後程序可能會結束。systemd 可以統一處理啟動順序、異常重啟、日誌讀取與開機自動啟動。建立 /etc/systemd/system/mihomo.service,內容如下:

[Unit]
Description=Mihomo Proxy Service
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=mihomo
Group=mihomo
WorkingDirectory=/var/lib/mihomo
ExecStartPre=/usr/local/bin/mihomo -t -d /var/lib/mihomo
ExecStart=/usr/local/bin/mihomo -d /var/lib/mihomo
Restart=on-failure
RestartSec=5
LimitNOFILE=1048576
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/mihomo

[Install]
WantedBy=multi-user.target

ExecStartPre 會在每次啟動前測試設定,錯誤的設定不會取代目前正在運作的程序。Restart=on-failure 只會在異常結束時重啟,間隔為 5 秒。CAP_NET_ADMINCAP_NET_RAW 用於 TUN 及相關網路操作;如果確定只開放本機 HTTP/SOCKS 連接埠、不使用 TUN,可以移除兩行 capability 設定,進一步縮小權限範圍。

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

看到 active (running) 表示服務正在執行。修改 YAML 後,請先執行測試命令,再執行 sudo systemctl restart mihomo。持續查看日誌可使用 journalctl -u mihomo -f,按下 Ctrl+C 只會離開日誌檢視,不會停止服務。

確認連接埠是否確實監聽

ss -lntp | grep -E '7890|9090'
curl -I --proxy http://127.0.0.1:7890 https://example.com

若 systemd 顯示正在執行,但 7890 沒有監聽,請重點檢查設定是否將連接埠改成其他數值,以及程序是否因載入規則集失敗而結束。若連接埠存在但請求逾時,應繼續查看策略組選擇、節點連通性、DNS 日誌與伺服器防火牆,而不是重複安裝二進位檔。

如何選擇 TUN 模式、系統代理與終端機環境變數

桌面日常使用:先啟用系統代理

系統代理的變更較少,適合瀏覽器、桌面聊天工具,以及遵循 GNOME、KDE 代理設定的應用程式。客戶端常見的操作路徑為「設定」→「系統代理」→「啟用」。如果只需要日常瀏覽網頁與查閱開發文件,先使用系統代理較容易定位問題。

終端機工具:依程序設定代理變數

許多命令列程式會讀取 HTTP_PROXYHTTPS_PROXYALL_PROXY。臨時設定只會影響目前的終端機工作階段,關閉終端機後便會自動失效:

export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5h://127.0.0.1:7890

curl -I https://example.com

若要恢復直連,可執行:

unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
unset http_proxy https_proxy all_proxy

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 --unset http.proxy
git config --global --unset https.proxy

容器、遊戲與不讀取代理設定的程式:再考慮 TUN

TUN 模式會建立虛擬網卡,並透過路由將更多流量送入 Mihomo。它能涵蓋不支援 HTTP/SOCKS 代理的程式,但也會帶來 DNS、路由優先順序、區域網路存取與權限等問題。在伺服器上遠端部署前,應保留第二個 SSH 工作階段,避免錯誤路由中斷目前的管理連線。

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-redirect: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

auto-detect-interface 用於識別預設出口網卡;auto-route 新增接管路由;dns-hijack 將指定的 DNS 流量交由核心處理。不同核心版本與作業系統網路堆疊的支援項目有所差異,啟用前應先執行 mihomo -t。Docker、Podman、虛擬機器橋接網路或策略路由環境,還需要檢查保留網段,避免容器網段被錯誤送入代理。

設定檔、訂閱更新與日誌維護

桌面客戶端的設定位置

桌面客戶端通常會將設定放在使用者資料目錄,而不是 /etc。Linux 常見位置包括 ~/.config/應用程式目錄~/.local/share/應用程式目錄;Flatpak 應用程式則多位於 ~/.var/app/應用程式識別碼。不要在客戶端執行期間直接批次覆蓋整個目錄,優先使用介面中的匯入、更新與備份功能。

若要找出最近修改的 YAML 檔案,可以執行:

find ~/.config ~/.local/share -type f \
  \( -name '*.yaml' -o -name '*.yml' \) \
  -mtime -7 2>/dev/null

命令列部署的訂閱更新

命令列核心不會替使用者判斷訂閱格式。較穩妥的流程是先將新設定下載到暫存檔,執行語法測試,成功後再取代正式設定並重啟。不要直接覆蓋正在使用的檔案,否則一次不完整的下載就可能導致服務無法再次啟動。

  1. 將新內容儲存為暫存 YAML 檔案。
  2. 確認回應內容確實是 Clash/Mihomo 設定,而不是 HTML 錯誤頁面。
  3. 在獨立的暫存目錄中執行 mihomo -t
  4. 測試成功後移至 /var/lib/mihomo/config.yaml
  5. 修正檔案擁有者,並重啟 systemd 服務。

如果設定使用 proxy-providers,Mihomo 可以依照設定中的 interval 定期重新整理 provider。常見的 interval: 86400 表示每 86400 秒更新一次,也就是 24 小時。健康檢查的 interval: 300 則表示每 5 分鐘檢查一次,兩者用途不同,不宜為了「更新更快」而同時設成過小的數值。

日誌等級與磁碟用量

日常執行建議使用 log-level: info;排查 DNS、規則比對與連線失敗時,短暫切換為 debug,確認問題後再恢復。systemd 日誌由 journald 管理,可使用以下命令查看服務所占用的空間:

journalctl --disk-usage
journalctl -u mihomo --since "30 minutes ago"
journalctl -u mihomo -p warning --since today

日誌中的 connection refused 通常表示目標位址可達,但該連接埠沒有服務;i/o timeout 更接近網路路徑或節點回應逾時;no such hostDNS resolve failed 則應先檢查 DNS 上游、劫持設定與 IPv6 是否可用。先區分錯誤發生在本機監聽、DNS、節點連線還是目標網站,會比反覆切換節點更有效。

常見安裝問題與檢查順序

啟動時出現 Exec format error

這幾乎總是架構不相容所致。重新執行 uname -m,再使用 file /usr/local/bin/mihomo 查看二進位檔的目標架構。x86_64 主機應使用 amd64 建置版本,aarch64 主機應使用 arm64 建置版本。

桌面客戶端可以開啟,但系統代理沒有作用

systemd 反覆重啟

systemctl status mihomo --no-pager
journalctl -u mihomo -b -n 120 --no-pager
sudo -u mihomo /usr/local/bin/mihomo -t -d /var/lib/mihomo

常見原因包括 YAML 縮排錯誤、連接埠遭其他程序占用、執行帳戶無權讀取設定、Geo 資料下載失敗或 TUN 權限不足。連接埠衝突可使用 sudo ss -lntp 查找;權限問題則檢查 namei -l /var/lib/mihomo/config.yaml 顯示的每一層目錄權限。

區域網路裝置無法連線至 Linux 主機的代理

預設的 allow-lan: false 只允許本機使用。如果確實要為受信任的區域網路裝置提供代理,需要改為 allow-lan: true、設定明確的 bind-address,並在主機防火牆中只允許區域網路網段存取代理連接埠。外部控制器 9090 不應因為開放代理連接埠而一併暴露。

下載Clash