Linux 部署 Clash:桌面用戶端安裝與 mihomo 命令列設定
介紹在 Linux 桌面環境安裝 Clash 用戶端,以及用 mihomo 核心以命令列方式執行代理的完整流程與開機自動啟動設定。
先選路線:圖形介面還是命令列
Linux 上執行 Clash 有兩條路線。第一條是桌面用戶端:Clash Verge Rev、FlClash 這類帶圖形介面的應用程式,訂閱匯入、節點切換、延遲測試、規則檢視都在視窗裡完成,適合日常使用的桌面系統。第二條是 mihomo 核心加命令列:mihomo 是 Clash Meta 核心的延續,開源免費,只包含代理核心,沒有介面,所有設定都寫在一份 YAML 檔案裡,適合伺服器、NAS、軟路由,也適合希望代理像系統服務一樣常駐的桌面用戶。
兩條路線互不衝突。同一台機器可以在家用用戶端以圖形操作,出門後由 systemd 拉起 mihomo 繼續服務。下表列出取捨依據,先想清楚再動手。
| 比較項目 | 桌面用戶端 | mihomo 命令列 |
|---|---|---|
| 適用環境 | GNOME / KDE 等桌面 | 伺服器、終端機、常駐服務 |
| 設定方式 | 介面操作 + 訂閱連結 | 手動編輯 config.yaml |
| 開機自動啟動 | 用戶端內建開關 | systemd 單元託管 |
| 資源占用 | 核心 + 介面行程 | 僅核心行程 |
| 管理面板 | 自帶圖形面板 | 外接 metacubexd 等 Web 面板 |
安裝桌面用戶端
打開本站下載中心的 Linux 分區,依發行版的套件格式挑選。Debian、Ubuntu、Deepin 系使用 .deb 套件;Fedora、openSUSE 系使用 .rpm 套件;不想安裝進系統就用 AppImage 單一檔案。Clash Verge Rev 提供 deb 與 rpm,FlClash 提供 deb,兩者都內建 mihomo 核心,裝完即可使用。
# Debian / Ubuntu 系
sudo dpkg -i clash-verge_*_amd64.deb
sudo apt -f install # 依賴缺失時補裝
# Fedora / openSUSE 系
sudo dnf install ./clash-verge-*-1.x86_64.rpm
AppImage 依賴 FUSE 執行庫,Ubuntu 22.04 之後預設不附帶,需先補裝 libfuse2(24.04 的套件名稱是 libfuse2t64),Fedora 對應 fuse-libs;之後給檔案加上執行權限即可直接執行。
sudo apt install libfuse2
chmod +x FlClash-*-amd64.AppImage
./FlClash-*-amd64.AppImage
兩點注意。其一,架構務必選對:一般 PC 選 amd64(x86_64),樹莓派與 ARM 筆電選 arm64,選錯會直接無法啟動。其二,首次啟動後到訂閱頁貼上機場提供的 Clash 訂閱連結,更新出節點清單,再到代理頁選擇節點、在設定裡打開系統代理開關。需要全域接管時開啟 TUN 模式,用戶端會彈出核心授權提示,授權一次之後所有應用程式的流量都會走代理,無需逐一設定。
mihomo 命令列部署
命令列路線分三步:安裝核心、準備設定、手動驗證。跑通之後再交給 systemd 託管。
第一步:安裝核心
從本站下載中心或 mihomo 的 GitHub Releases 取得 Linux 版壓縮檔,檔名形如 mihomo-linux-amd64-v1.18.9.gz,以實際版本為準;較舊的 CPU 缺少 x86-64-v3 指令集時,改用檔名帶 compatible 的版本。解壓縮後放進系統 PATH:
gunzip mihomo-linux-amd64-v1.18.9.gz
chmod +x mihomo-linux-amd64-v1.18.9
sudo mv mihomo-linux-amd64-v1.18.9 /usr/local/bin/mihomo
mihomo -v # 印出版本號即安裝成功
第二步:準備設定目錄
sudo mkdir -p /etc/mihomo
sudo curl -L -o /etc/mihomo/config.yaml "你的 Clash 訂閱連結"
多數機場直接提供 Clash 訂閱網址,拉取下來就是可用的 config.yaml;若機場只給通用訂閱,可先在桌面用戶端裡匯入再匯出設定,或改用訂閱轉換服務產生 Clash 格式。GeoIP 與 GeoSite 資料檔(geoip.metadb、geosite.dat 等)首次啟動時會自動下載到設定目錄,網路受限時可以從用戶端機器複製同名檔案過去。
config.yaml 裡有三個欄位與日常使用關係最大:
mixed-port: 7890 # HTTP 與 SOCKS 混合入口
allow-lan: false # 是否允許區域網路裝置連入
external-controller: 127.0.0.1:9090 # 控制器位址,僅監聽本機
mixed-port:HTTP 與 SOCKS 的混合入口埠,系統代理就指向它。allow-lan:是否允許區域網路其他裝置連入,單機使用時保持 false。external-controller:外部控制器位址,面板類工具透過它管理核心。
注意
external-controller 不要綁定 0.0.0.0 後直接暴露到公網。確實需要遠端管理時,務必設定 secret 密語,並在前面套一層具備驗證機制的反向代理。
第三步:手動啟動驗證
mihomo -d /etc/mihomo
終端機印出 mixed inbound 監聽日誌後,另開一個終端機視窗驗證出口:
curl -x http://127.0.0.1:7890 https://api.ip.sb
回傳的出口 IP 與所選節點的地區一致,表示代理連線已經打通。按 Ctrl+C 結束行程,進入服務化設定。
用 systemd 註冊開機自動啟動
手動跑通之後,把 mihomo 交給 systemd 託管,換來開機自動啟動與崩潰自我修復。以 root 身分新建 /etc/systemd/system/mihomo.service:
[Unit]
Description=mihomo proxy daemon
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=5
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
載入單元並啟用:
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
systemctl status mihomo # 看到 active (running) 即成功
journalctl -u mihomo -f # 即時追蹤核心日誌
status 輸出 active (running) 即代表服務正在運作;排查問題請先看 journalctl 的日誌輸出,錯誤訊息會直接指向出錯的那一行。
需要 TUN 全域接管時,先在 config.yaml 裡啟用 tun 區段:
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
再在 service 檔案的 [Service] 區段補兩行能力授權,讓核心取得建立虛擬網卡的權限:
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
改完執行 systemctl daemon-reload 並 restart mihomo 生效。
訂閱更新同樣可以自動化:用 cron 每週定時重新拉取 config.yaml,再 systemctl restart mihomo;也可以呼叫控制器介面熱重新載入,免去重新啟動:
curl -X PUT "http://127.0.0.1:9090/configs?force=true" \
-d '{"path": "/etc/mihomo/config.yaml"}'
桌面環境的代理指向設定
核心跑起來只是第一步,還要把系統流量導過去。GNOME 桌面:設定 → 網路 → 網路代理 → 手動,HTTP 與 HTTPS 主機填 127.0.0.1、埠 7890,SOCKS 主機同樣指向 127.0.0.1:7890。KDE 在系統設定的網路代理頁做相同設定。命令列等效寫法:
gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.http host '127.0.0.1'
gsettings set org.gnome.system.proxy.http port 7890
終端機裡臨時走代理,用環境變數更直接:
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:7890
把這三行寫進 ~/.bashrc 可長期生效。已開啟 TUN 模式的機器上述步驟全省,流量在路由層就被接管,應用程式無需任何設定。
常見問題
AppImage 雙擊無反應,終端機執行報 FUSE 相關錯誤
系統缺少 FUSE 執行庫。Ubuntu 安裝 libfuse2(24.04 為 libfuse2t64),Fedora 安裝 fuse-libs;也可以給 AppImage 加 --appimage-extract 參數解包後執行。
開啟 TUN 模式提示權限不足
用戶端路線需在彈出視窗裡完成核心授權;命令列路線請確認 service 檔案裡加了 CAP_NET_ADMIN 能力授權,並以 root 或具備對應能力的使用者執行。
curl 測試回傳的仍是本機 IP
先確認 7890 埠正在監聽(ss -tlnp | grep 7890),再檢查規則模式:規則模式下目標網站可能命中 DIRECT 直連,可切全域模式重測,排除規則因素。
systemctl 啟動 mihomo 失敗
多數是 config.yaml 語法問題或資料檔缺失。執行 journalctl -u mihomo -n 50 檢視具體錯誤;注意 YAML 縮排必須使用空格,不能用 Tab。
區域網路其他裝置想共用這台機器的代理
把 config.yaml 裡 allow-lan 改為 true,確認防火牆放行 7890 埠,其他裝置把代理指向這台機器的內網 IP 即可。external-controller 仍保持本機監聽,不要一併開放。
小結:桌面用戶端解決「用起來」,mihomo 加 systemd 解決「一直在」。依本文順序走完,Linux 機器從開機那一刻起就有一條穩定的代理連線。用戶端與各平台核心都在下載中心依系統列好,按需取用即可。