平台部署 閱讀時間約 12 分鐘

Linux 部署 Clash:圖形介面用戶端與 systemd 命令列教學

Linux 桌面可安裝圖形介面用戶端;伺服器或無頭環境則可用 mihomo 二進位檔搭配 systemd 管理。本文介紹兩種部署方式,涵蓋安裝、設定目錄、開機啟動與終端機代理環境變數。

先選部署方式:桌面用圖形介面,伺服器用獨立核心

先說結論:使用 GNOME、KDE 等桌面環境,且經常需要切換訂閱與策略組,建議選用 Linux 圖形介面用戶端;透過 SSH 管理、沒有桌面工作階段的主機,則較適合使用 mihomo 搭配 systemd。兩種方式都能提供本機代理連接埠,但啟動時機、設定位置與權限範圍不同,不建議讓兩套核心同時占用相同連接埠。

Clash 常被用來泛稱這類用戶端。mihomo 是從 Clash Meta 延續發展而來的核心;圖形介面用戶端負責介面、訂閱與服務管理,實際連線能力則取決於搭載的核心。請勿直接套用舊版用戶端的說明來設定目前的 mihomo,也別預設所有 Clash 格式的訂閱都支援相同通訊協定。

檢查項目圖形介面用戶端mihomo 與 systemd
使用環境已登入的桌面工作階段伺服器、無頭主機
設定入口訂閱、設定與策略組介面本機 YAML 檔案
啟動方式登入桌面後自動啟動或用戶端服務系統服務開機啟動
本文驗證的連接埠以用戶端實際顯示為準範例固定使用 127.0.0.1:7890

安裝前檢查:架構、套件與目前的監聽連接埠

先執行以下三個命令。第一個確認 CPU 架構,第二個檢查是否使用 systemd,第三個檢查預計使用的連接埠。如果輸出顯示已有程序監聽 7890,請先確認是否為另一個代理核心,再決定停用該程序或更換連接埠。

uname -m
systemctl --version
sudo ss -lntup 'sport = :7890'
  • x86_64 通常對應 amd64 或 x64 安裝套件;aarch64 通常對應 arm64。32 位元 ARM 無法直接執行 arm64 二進位檔。
  • Debian、Ubuntu 系列優先選擇符合架構的 DEB;Fedora 等 RPM 系列則選擇 RPM。套件格式與 CPU 架構須分別確認。
  • 較舊的 CPU 也要確認發行說明中的指令集需求。若出現 Illegal instruction,應先檢查建置版本,不能只根據檔名中的 amd64 判斷。
  • Alpine 常用 OpenRC,使用者空間通常採用 musl;本文的 systemd 單元無法直接套用於這類環境。

請從專案官方發行管道取得用戶端與核心。本文不指定未經驗證的版本;部署時請記錄安裝版本與架構,方便日後比對及排查。核心安裝後可用 mihomo -v 查看實際版本;圖形介面用戶端則應同時記錄介面版本與核心版本。

方式一:Linux 桌面圖形介面用戶端

先匯入完整設定,再啟用系統代理

Clash Verge Rev、FlClash 等用戶端提供 Linux 圖形介面,但發行套件與系統整合方式各不相同。可前往本站下載中心比較平台下載項目與適用條件,再依照各專案說明安裝。安裝 DEB 可使用 sudo apt install ./檔名.deb;請將檔名換成下載目錄中的實際檔案,不要直接照抄這個說明用名稱。

  1. 在用戶端的訂閱或設定頁面匯入服務提供者提供的 Clash/mihomo 設定。訂閱網址通常含有存取憑證,請勿貼在公開截圖或記錄檔中。
  2. 更新設定後,確認是否已載入節點與策略組。只有節點清單,不代表 DNS、規則和策略組都已設定完整。
  3. 先選擇規則模式,再從目標策略組中選取節點。記下介面顯示的 HTTP、SOCKS 或混合連接埠。
  4. 啟用系統代理後,使用瀏覽器造訪確定會套用代理規則的目標,同時查看連線記錄中的規則、策略組與出口。

各用戶端的選單配置可能不同,因此不必尋找所有軟體都通用的固定選單路徑。請確認四項狀態:「設定是否已啟用、核心是否已啟動、連接埠為何、系統代理是否已設定」。只看到系統匣圖示,無法證明流量已進入核心。

設定目錄與桌面自動啟動

圖形介面用戶端可能會將資料存放於 XDG 使用者目錄,例如 ~/.config 或 ~/.local/share 下的應用程式子目錄;實際目錄名稱由應用程式決定。請優先使用用戶端提供的設定目錄入口,不要猜測路徑後就大量刪除檔案。訂閱快取、覆寫檔案與核心實際使用的設定,可能是三個不同檔案。

先確認手動啟動正常,再開啟用戶端的登入時自動啟動選項,登出並重新登入驗證。桌面自動啟動通常表示「使用者登入後啟動」,而非「無人登入時也會執行」。若用戶端提供獨立服務模式,請依照其服務安裝說明操作,不要再疊加本文中占用相同連接埠的 systemd 服務。

方式二:準備 mihomo 二進位檔與設定目錄

以下步驟使用專用低權限帳號執行一般代理服務,不授予 TUN 所需的網路管理權限。請先下載符合架構的官方壓縮檔;若下載的是單一 gzip 檔案,可在本機重新命名為 mihomo.gz,再於該目錄執行:

gzip -dk mihomo.gz
file ./mihomo
chmod u+x ./mihomo
./mihomo -v
sudo install -o root -g root -m 0755 ./mihomo /usr/local/bin/mihomo

Exec format error 常見原因是架構不符,或將壓縮檔當成程式執行。遇到此錯誤時,請回到下載與解壓縮步驟檢查,不要一再增加執行權限。接著建立服務帳號;若系統已有同名帳號,請先確認用途,不要重複建立或直接修改其權限。

sudo useradd --system --user-group \
  --home-dir /var/lib/mihomo \
  --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

將準備好的完整設定存為目前目錄下的 config.yaml,再安裝至服務設定目錄。本文不提供公開節點,也不會把只有 DNS 和連接埠的片段當成完整訂閱。設定必須包含符合你所用服務的節點或提供者、策略組與規則。

sudo install -o root -g mihomo -m 0640 \
  ./config.yaml /etc/mihomo/config.yaml

請編輯完整設定中已存在的同名欄位,不要在 YAML 檔案末尾重複新增鍵。以下是本機一般代理所需的關鍵欄位;這只是局部片段,不能獨立運作:

mixed-port: 7890
allow-lan: false
bind-address: 127.0.0.1
mode: rule
log-level: info
tun:
  enable: false

mixed-port 可讓同一連接埠接受 HTTP 與 SOCKS 代理連線。此範例僅供本機使用;若完整設定還啟用了其他入站連接埠、DNS 監聽或控制介面,也必須分別檢查監聽位址。尤其是 external-controller,若不需要管理功能,可以不啟用;若需啟用,應綁定回環位址並設定獨立的存取金鑰。

本文將唯讀主設定放在 /etc/mihomo,快取、資料庫與執行資料則放在 /var/lib/mihomo。使用 proxy-providers 或 rule-providers 時,請將可更新檔案放在工作目錄內,例如 ./providers/main.yaml,避免寫入之後會設為唯讀的設定目錄。

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

測試通過只表示設定檔檢查成功,不代表節點可以連線。若出現檔案權限或缺少資料庫的錯誤,請依照訊息修正路徑、權限及所需資源,再繼續建立服務。

systemd 管理服務:啟動、開機自動啟動與記錄檔

使用 sudoedit /etc/systemd/system/mihomo.service 建立以下單元。此單元明確指定執行檔、設定檔與工作目錄,並限制服務寫入系統其他位置。由於沒有開放網路管理權限,請勿同時將設定中的 TUN 開關改為啟用。

[Unit]
Description=mihomo local proxy service
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=mihomo
Group=mihomo
StateDirectory=mihomo
StateDirectoryMode=0750
WorkingDirectory=/var/lib/mihomo
ExecStart=/usr/local/bin/mihomo -d /var/lib/mihomo -f /etc/mihomo/config.yaml
Restart=on-failure
RestartSec=5s
UMask=0027
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/var/lib/mihomo

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo.service
systemctl is-enabled mihomo.service
systemctl is-active mihomo.service
sudo journalctl -u mihomo.service -b -n 80 --no-pager
sudo ss -lntp 'sport = :7890'

enable --now 會同時設定開機自動啟動並立即啟動;enabled 與 active 分別表示「之後是否會啟動」和「目前是否正在執行」。監聽檢查結果應符合範例設定,應看到 127.0.0.1:7890,而非意外出現的公網監聽位址。

  • 修改 YAML 後,先執行設定檔測試,再執行 sudo systemctl restart mihomo。重新啟動期間,現有代理連線會短暫中斷。
  • 修改服務單元後,先執行 sudo systemctl daemon-reload,再重新啟動服務。
  • 服務持續啟動失敗時,請查看記錄檔中的第一個實際錯誤。修正後若遇到啟動頻率限制,可執行 sudo systemctl reset-failed mihomo,再啟動服務。

network-online.target 不保證一定能連上網際網路、DNS 或訂閱伺服器。遠端規則與提供者更新失敗時,應分辨是網路尚未就緒、網址失效,還是檔案寫入權限不足。發布記錄檔前,請移除訂閱網址、金鑰及其他敏感資訊。

終端機代理環境變數:只會影響讀取這些變數的程序

服務啟動後,不會自動接管所有命令列工具。請先在目前的終端機暫時設定 HTTP 代理;HTTPS 目標通常也會使用以下 http:// 代理位址,由用戶端透過 CONNECT 建立通道。不要只因目標網址是 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

curl -I --connect-timeout 10 --max-time 20 https://example.com

也可以不修改環境設定,直接為單次請求指定代理。以下兩個範例分別測試 HTTP 與 SOCKS5 代理;socks5h 中的 h 表示將目標網域交由代理端解析,但實際解析路徑仍取決於核心設定與節點通訊協定。

curl --noproxy "" -x http://127.0.0.1:7890 \
  -I --connect-timeout 10 --max-time 20 https://example.com

curl --noproxy "" --proxy socks5h://127.0.0.1:7890 \
  -I --connect-timeout 10 --max-time 20 https://example.com

若要永久設定,Bash 互動式終端機可寫入 ~/.bashrc,Zsh 則可寫入 ~/.zshrc,重新開啟終端機後再驗證。登入 shell、桌面程式與 systemd 服務各有不同的環境載入方式,不能假設它們都會讀取 Bash 設定。部分工具只接受小寫變數,另一些也支援大寫,依照工具文件設定即可。

sudo 通常會過濾代理環境變數;APT、容器與其他服務也可能需要個別設定。不要為了省事就把代理變數寫入全域環境;先用單次命令測試,再決定要永久套用的範圍。若要還原目前終端機的設定,請執行:

unset http_proxy https_proxy all_proxy no_proxy
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY

TUN、遠端存取與常見故障範圍

何時再考慮 TUN

確認瀏覽器與支援代理變數的工具都運作正常後,如果某些應用程式不會讀取系統代理或環境變數,再考慮使用 TUN。TUN 涉及虛擬網卡、路由與 DNS 接管,不是在任何主機上把 enable 改成 true 就會生效。

先檢查 ls -l /dev/net/tun。容器還需要主機授予相應的裝置與網路權限,VPS 也可能設有限制。本文採用的低權限服務未設定這些權限,因此不能直接用於 TUN。若有需要,請依照目前的 mihomo 文件重新評估服務權限,特別是網路管理權限、自動路由及 DNS 劫持設定;不要把整個服務改成 root 執行,當作通用解法。

透過 SSH 修改遠端主機路由時,請保留第二個連線工作階段與服務商控制台,並事先準備復原方式。TUN 的自動路由或嚴格路由可能影響管理連線。連線面板中有記錄,也不代表 DNS 已由 TUN 接管;應用程式內建的加密 DNS 也需要另外檢查。

遠端主機如何安全使用本機監聽連接埠

如果只是要讓自己的電腦使用伺服器上的代理,不必直接將 7890 暴露在公網。可以建立 SSH 本機轉送:使用 ssh -L 17890:127.0.0.1:7890,後面接上平時用來登入伺服器的目標。接著讓本機應用程式連線至 127.0.0.1:17890。伺服器上的節點、規則與網路仍須正常運作。

依症狀逐項排查,避免同時修改多個變數

  • Connection refused:先檢查服務狀態與監聽連接埠。這通常表示請求尚未進入規則判斷階段。
  • 服務正在執行,但請求逾時:檢查提供者更新狀態、選取的節點、目標規則與伺服器對外網路,不要立刻重新安裝用戶端。
  • 終端機可用、瀏覽器不可用:檢查瀏覽器與桌面代理設定;環境變數不會自動改變已啟動瀏覽器的網路行為。
  • 瀏覽器可用、終端機不可用:檢查目前 shell 的變數、工具是否支援代理,以及 sudo 是否過濾環境變數。
  • 重新啟動後失效:分辨桌面登入後自動啟動與系統開機服務,檢查 systemctl is-enabled mihomo,並查看這次啟動的記錄檔。

完成前請確認三件事:重新啟動後服務能正常啟動;7890 只在預期的位址上監聽;明確命中代理規則的請求,能在連線記錄中找到對應節點。請一併記下這三項結果與實際核心版本,方便日後升級或遷移時依相同條件複查。更多設定基礎請參閱入門指南;DNS 與規則概念可參考使用手冊。

Clash 最新版下載