先選擇部署方式:桌面客戶端或 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
x86_64對應 amd64 或 x64,常見於 Intel、AMD 桌上型電腦與伺服器。aarch64對應 arm64,常見於 Raspberry Pi 4/5、部分 NAS 與 ARM 雲端主機。armv7l對應 32 位元 ARM,必須選擇明確提供 armv7 的建置版本。
發行版資訊會決定套件格式: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,避免清理下載目錄時誤刪。
匯入訂閱並完成首次連線
- 開啟客戶端的「訂閱」頁面,選擇「新增」或「從 URL 匯入」。部分客戶端的操作路徑為「訂閱」→「新增」→「URL」。
- 貼上服務提供者提供的訂閱網址,確認後執行一次更新。
- 進入「代理」或「策略」頁面,在主要策略組中選擇節點,也可以選擇 URL 測速組。
- 開啟「系統代理」,接著造訪測試頁面或使用命令檢查出口位址。
- 只有在需要接管不讀取系統代理的軟體時,才設定 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 分別放在 7890 和 7891。檢查路徑通常是「設定」→「參數設定」→「連接埠設定」。
方式二:安裝 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
測試成功時會完成設定解析;如果出現 yaml、mapping 或 unmarshal 錯誤,應回到提示行附近檢查縮排、冒號與欄位型別。訂閱回傳網頁、登入提示或 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_ADMIN 與 CAP_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_PROXY、HTTPS_PROXY 與 ALL_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
命令列部署的訂閱更新
命令列核心不會替使用者判斷訂閱格式。較穩妥的流程是先將新設定下載到暫存檔,執行語法測試,成功後再取代正式設定並重啟。不要直接覆蓋正在使用的檔案,否則一次不完整的下載就可能導致服務無法再次啟動。
- 將新內容儲存為暫存 YAML 檔案。
- 確認回應內容確實是 Clash/Mihomo 設定,而不是 HTML 錯誤頁面。
- 在獨立的暫存目錄中執行
mihomo -t。 - 測試成功後移至
/var/lib/mihomo/config.yaml。 - 修正檔案擁有者,並重啟 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 host、DNS resolve failed 則應先檢查 DNS 上游、劫持設定與 IPv6 是否可用。先區分錯誤發生在本機監聽、DNS、節點連線還是目標網站,會比反覆切換節點更有效。
常見安裝問題與檢查順序
啟動時出現 Exec format error
這幾乎總是架構不相容所致。重新執行 uname -m,再使用 file /usr/local/bin/mihomo 查看二進位檔的目標架構。x86_64 主機應使用 amd64 建置版本,aarch64 主機應使用 arm64 建置版本。
桌面客戶端可以開啟,但系統代理沒有作用
- 在「設定」→「參數設定」中確認混合連接埠是否確實為
7890。 - 執行帶有
--proxy的 curl 命令,先確認本機代理連接埠可用。 - 檢查瀏覽器是否安裝獨立的代理擴充功能,它可能會覆寫系統設定。
- 確認目前的策略組沒有選到無法使用的節點。
- 終端機程式應個別設定環境變數,不能只依賴桌面開關。
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 不應因為開放代理連接埠而一併暴露。