先選部署方式:桌面用戶端或獨立核心

在 Linux 上使用 Clash 設定,通常有兩種方式:桌面環境可安裝圖形介面用戶端,由用戶端管理 mihomo;伺服器或精簡環境則可直接執行 mihomo,再交由 systemd 管理程序。mihomo 是代理核心,不是桌面設定視窗。只把執行檔放進系統,不會自動啟用系統代理,也不會讓所有終端機指令都經過代理。

使用情境建議方式需要管理的項目
日常桌面使用、經常切換設定圖形介面用戶端匯入設定、策略組、系統代理與登入時自動啟動
SSH 伺服器、命令列工具mihomo 與 systemd設定檔、服務帳號、連接埠及終端機環境變數
需要代理不支援代理設定的應用程式進一步設定 TUN虛擬網卡、權限、路由與 DNS

以下指令以採用 systemd 的 Debian 12、Ubuntu 24.04 等系統為例,使用本機迴路位址 127.0.0.1 與混合連接埠 7890。先執行 ps -p 1 -o comm=,確認 PID 1 是 systemd。容器、部分 WSL 環境及 OpenRC 系統無法直接照搬服務管理步驟。

Linux 桌面:安裝用戶端並確認代理入口

依發行版與 CPU 架構選擇安裝套件

前往用戶端下載頁選擇 Linux 平台,查看 Clash Verge Rev、FlClashs 等用戶端的可用套件與系統需求。Debian、Ubuntu 通常選擇 DEB;Fedora 等發行版通常選擇 RPM。先執行以下兩個指令,避免在 x86_64 裝置上安裝 ARM64 套件。

uname -m
cat /etc/os-release
  • x86_64 通常對應 x64 或 amd64;aarch64 通常對應 arm64。
  • 可用桌面軟體安裝程式開啟 DEB 或 RPM 套件。若遇到相依性錯誤,請使用發行版的套件管理工具處理,不要隨意下載其他系統版本的共用程式庫。
  • 安裝成功但無法開啟視窗時,請從終端機啟動用戶端並保留錯誤訊息。缺少圖形執行階段程式庫與代理設定錯誤是不同問題。

先匯入設定,再設定系統代理

在用戶端的設定或訂閱頁面匯入服務提供者提供的相容設定,切換至該設定,再檢查連線記錄與策略組。不同用戶端的選單名稱可能不同,請以實際介面為準。確認核心正在執行,且 7890 已在監聽後,再開啟用戶端的系統代理開關。

若要手動設定,GNOME 桌面的常見路徑為「設定」→「網路」→「網路代理」→「手動」。HTTP 和 HTTPS 代理都可填入主機 127.0.0.1、連接埠 7890。此處的 HTTPS 是指 HTTPS 要求使用的代理入口,不代表本機監聽連接埠必須啟用 TLS。

桌面系統代理只會向遵循桌面代理設定的程式提供連線參數。瀏覽器可能會使用,SSH、部分遊戲及終端機工具則不一定會使用。關閉用戶端前應先關閉系統代理;否則桌面仍會連到已停止監聽的連接埠,網頁可能因此無法開啟。

命令列安裝:固定執行檔、設定與資料目錄

安裝執行檔並建立專用帳號

從 mihomo 專案的發佈管道取得符合裝置架構與指令集需求的 Linux 核心,解壓縮後將執行檔命名為 mihomo,並放在目前目錄。不要將尚未解壓縮的壓縮檔直接安裝為執行檔。以下先檢查架構與版本,再將核心放入固定路徑。

file ./mihomo
chmod u+x ./mihomo
./mihomo -v
sudo install -m 0755 ./mihomo /usr/local/bin/mihomo

getent group mihomo >/dev/null || sudo groupadd --system mihomo
id mihomo >/dev/null 2>&1 || sudo useradd \
  --system --gid mihomo --home-dir /var/lib/mihomo \
  --no-create-home --shell /usr/sbin/nologin mihomo

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

本例將設定檔放在 /etc/mihomo/config.yaml,執行資料放在 /var/lib/mihomo。設定檔由管理員維護,服務帳號僅能讀取;快取與規則資源則寫入資料目錄。不要依賴啟動時所在的目錄,也不要假設 SSH 使用者的 ~/.config 會自動成為系統服務的設定目錄。

先用最小設定確認監聽狀態

以下設定僅用於確認服務與本機連接埠,所有要求都會直接連線,不包含代理節點,不能取代實際訂閱。若已有設定,請先備份,以免執行指令時遭到覆寫。使用最小設定可暫時排除訂閱格式、遠端規則下載與節點可用性等因素。

sudo tee /etc/mihomo/config.yaml >/dev/null <<'YAML'
mixed-port: 7890
allow-lan: false
bind-address: 127.0.0.1
mode: rule
log-level: info
ipv6: false
rules:
  - MATCH,DIRECT
YAML

sudo chown root:mihomo /etc/mihomo/config.yaml
sudo chmod 0640 /etc/mihomo/config.yaml
sudo -u mihomo /usr/local/bin/mihomo -t \
  -d /var/lib/mihomo -f /etc/mihomo/config.yaml

-t 用於測試設定;-d 明確指定工作資料目錄;-f 指定設定檔。之後換成實際設定時也要再次測試。通過語法檢查不代表節點一定連得上,也不代表遠端規則資源一定下載成功,仍須參考啟動記錄判斷。

若訂閱網址回傳的是 Base64 節點清單、網頁或登入提示,就不能直接存成 mihomo 主設定檔。請取得相容的完整 YAML,或在完整主設定檔中依照對應格式設定 proxy-providers。訂閱連結通常包含存取憑證,請勿貼到公開記錄或截圖中。

systemd 服務:開機自動啟動、記錄與設定重啟

建立系統層級的 unit 檔案。本例使用一般專用帳號執行,只提供本機 HTTP/SOCKS 混合代理,不啟用 TUN,因此不需要讓整個核心長期以 root 身分執行。

sudo tee /etc/systemd/system/mihomo.service >/dev/null <<'UNIT'
[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=5s
LimitNOFILE=65536
UMask=0077

[Install]
WantedBy=multi-user.target
UNIT

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo.service
systemctl status mihomo.service --no-pager
sudo journalctl -u mihomo.service -n 80 --no-pager
sudo ss -lntup | grep ':7890'
  • enable --now 會同時設定開機自動啟動並立即啟動服務;只執行 enable 不會立刻啟動服務。
  • Restart=on-failure 會在異常結束後重試,但不會在手動停止服務後強制重新啟動。
  • network-online.target 實際等待的行為取決於系統的網路管理元件,無法保證遠端訂閱伺服器已可連線。
  • 服務顯示 active (running) 後,還要確認監聽位址是 127.0.0.1:7890,而非意外對所有網路介面公開。

修改設定與修改 unit 的處理方式不同

修改 YAML 後,先使用相同的服務帳號測試設定,再重新啟動服務。本文的 unit 未定義 ExecReload,因此不要將 systemctl reload 當成通用的重新載入方式。重新啟動會短暫中斷現有代理連線。

sudo -u mihomo /usr/local/bin/mihomo -t \
  -d /var/lib/mihomo -f /etc/mihomo/config.yaml
sudo systemctl restart mihomo.service
sudo journalctl -u mihomo.service -n 40 --no-pager

只有修改 /etc/systemd/system/mihomo.service 或相關 drop-in 檔案時,才需要先執行 sudo systemctl daemon-reload。更新核心前應保留原執行檔與設定備份;停止服務後再替換檔案,檢查 mihomo -v 與設定測試結果,然後啟動服務。

終端機代理:環境變數只會影響讀取它的程式

mihomo 已在 7890 監聽後,可在目前的終端機設定以下變數。大多數支援這些變數的 HTTP 工具都會使用它們,但這不代表 Linux 整個網路堆疊都已透明代理。

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
export no_proxy=localhost,127.0.0.1,::1

curl -I --connect-timeout 10 https://example.com
curl -I --proxy http://127.0.0.1:7890 https://example.com
curl -I --proxy socks5h://127.0.0.1:7890 https://example.com

socks5h 表示由代理端解析目標網域名稱;socks5 通常會先由本機解析。上方的 https_proxy 仍使用 http://,因為它描述的是本機 HTTP 代理入口;HTTPS 目標通常透過 CONNECT 通道存取。

使用最小直連設定時,明確指定代理的要求成功,只能證明程式可以經由本機核心連線至目標。若要驗證遠端代理節點,須改用有效設定,在策略組中選擇節點,並檢查連線記錄中的實際規則與出站。

設為常駐與撤銷設定

若要讓設定每次開啟 Bash 終端機時都生效,可將上述 export 行加入 ~/.bashrc;Zsh 通常使用 ~/.zshrc。圖形應用程式、排程工作與 systemd 服務不會自動讀取互動式 shell 的設定,因此不能據此判斷它們也已啟用代理。

unset http_proxy https_proxy all_proxy no_proxy
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY

sudo 預設可能會過濾代理變數,APT 也可以有獨立的代理設定。不要為了暫時下載,就將整個使用者環境不加區別地傳給管理員程序。若要進行單次 curl 測試,優先使用明確的 --proxy 參數;應用程式不支援代理變數時,請查詢該程式自己的代理選項。

常見問題:依序檢查設定、權限、連接埠與路由

服務啟動後立即退出:先確認服務帳號能否讀取設定

sudo journalctl -u mihomo.service -b -n 100 --no-pager
namei -l /etc/mihomo/config.yaml
sudo -u mihomo test -r /etc/mihomo/config.yaml && echo readable
sudo -u mihomo test -w /var/lib/mihomo && echo writable

permission denied 不一定是設定檔本身造成,也可能是上層目錄缺少進入權限,或遠端規則檔案指定在服務帳號無法寫入的位置。請修正目標目錄的擁有者與最低必要權限,不要用 chmod -R 777 掩蓋問題。啟用 SELinux 的系統也要查看相關拒絕記錄,不建議直接關閉安全機制。

7890 已被占用:先確認是否啟動了兩套核心

sudo ss -lntp 'sport = :7890'
pgrep -a mihomo

桌面用戶端、手動啟動的核心與 systemd 服務可能同時執行。確認各程序的來源後,停止不需要的那一個,不要直接終止所有同名程序。若確實需要改用 7891,請同步修改 mixed-port、桌面代理與終端機變數,重新啟動後再檢查監聽狀態。

服務正常但要求失敗:分辨連線入口與出站問題

  • Connection refused:通常表示連接埠未在監聽、程序已退出或位址填錯。先檢查 ss,暫時不要調整規則。
  • 連上代理後逾時:查看核心記錄中的節點連線、網域名稱解析與規則資源錯誤。規則成功比對不代表出站線路可用。
  • 出現憑證錯誤:檢查系統時間、CA 憑證與目標網域。不要將關閉 TLS 驗證當成長期解決方式。
  • 啟動多次失敗後不再重試:排除根本原因後,執行 sudo systemctl reset-failed mihomo.service,再啟動服務。

需要 TUN 時,另行處理權限、DNS 與遠端連線風險

本例的一般帳號服務不能直接當成完整的 TUN 部署使用。Linux TUN 通常需要存取 /dev/net/tun;設定虛擬介面與路由也需要相應的網路管理權限。相關能力、服務限制與 DNS 接管方案必須一併規劃,不能只在 YAML 中新增一行 enable: true。

尤其在 SSH 伺服器上,啟用自動路由前應保留第二個管理工作階段或主控台入口,並確認 SSH 回程流量、區域網路網段與內部 DNS 的路徑。請先測試本機 7890 的明確代理,再導入 TUN;不要同時變更連接埠、DNS 與預設路由,否則很難找出失去連線的原因。

設定維護:保留復原方式,釐清更新項目

部署完成後,至少記錄執行檔路徑、設定路徑、資料目錄、監聽連接埠與服務名稱。更新訂閱、更新核心與更新用戶端是三件不同的事:替換核心不會自動更新節點,systemd 開機自動啟動也不會自動重新整理主設定檔。

  • 使用圖形介面用戶端時,請確認設定頁面的自動更新開關與更新間隔,並檢查更新後生效的設定。
  • 使用獨立核心時,proxy-providers 的更新間隔僅適用於對應的 provider,不代表整份主 YAML 會定期替換。
  • 若要自動下載主設定檔,必須自行設計安全的下載、測試、替換與失敗回復流程,不能直接以未經測試的回應覆寫執行中的設定檔。
  • 不再使用系統服務時,執行 sudo systemctl disable --now mihomo.service,並清除終端機變數與桌面代理設定。

日常桌面使用可優先選擇圖形介面用戶端;無人值守環境則適合使用固定目錄與 systemd 服務。無論採用哪種方式,都應先確認設定的讀取位置、程式監聽的連接埠,以及應用程式使用的連線入口,再逐步加入規則分流與 TUN 功能。更多設定概念請參閱協定手冊,操作步驟可參考設定教學。