Linux 部署方式與適用情境

有桌面環境、需要經常切換節點的電腦,建議先前往客戶端下載頁選擇 Linux 圖形客戶端,再匯入服務商提供的訂閱。只有 SSH 終端機的伺服器,通常更適合直接執行 mihomo,並交由 systemd 管理程序。兩種方式的代理設定可能相近,但安裝方式、權限與代理連線方式各有不同,不必在同一台機器上同時啟用。

Clash 是這類代理工具與設定生態系的常見稱呼;mihomo 則是從 Clash Meta 延續發展而來的核心。圖形客戶端負責管理設定、系統匣圖示與開關等操作,核心則負責監聽連接埠、比對規則及建立連線。下載核心二進位檔不會自動附帶桌面介面;啟動圖形客戶端,也不代表所有 Linux 程式都已透過代理連線。

使用環境建議方式初次驗證方式
Ubuntu、Debian 桌面版支援對應架構的 DEB 圖形客戶端匯入設定後檢查節點與本機監聽連接埠
Fedora 等 RPM 桌面版支援對應架構的 RPM 圖形客戶端檢查核心記錄,再測試明確指定代理的請求
無圖形介面的伺服器mihomo 二進位檔與 systemd 系統服務先驗證設定,再檢查服務與 7890 連接埠

安裝桌面客戶端與匯入訂閱

系統架構與安裝套件

下載前先執行以下兩個命令。x86_64 通常對應 amd64 或 x64 套件;aarch64 通常對應 arm64 套件。套件格式也必須符合 Linux 發行版:DEB 適用於 Debian 系,RPM 則適用於採用 RPM 的發行版。架構相符不代表系統相依套件一定齊全,較舊的發行版還需確認客戶端的最低執行需求。

uname -m
cat /etc/os-release

可前往下載頁查看 Clash Verge Rev、FlClash 等專案的 Linux 下載項目與目前支援範圍。以下命令以本機檔案名稱示範安裝:先將實際下載的安裝套件重新命名為 client.deb 或 client.rpm,再進入檔案所在目錄,並依目前使用的發行版執行其中一個命令。這裡的檔名不是下載網址。

# Debian / Ubuntu:安裝目前目錄中的 DEB 套件
sudo apt install ./client.deb

# Fedora:安裝目前目錄中的 RPM 套件
sudo dnf install ./client.rpm

使用套件管理器安裝本機套件,可一併處理套件庫中可取得的相依項目。如果系統提示缺少圖形函式庫、WebKit 或執行環境,請先確認發行版版本與專案說明,不要刪除相依檢查來強行安裝。伺服器沒有圖形工作階段時,直接採用下文的命令列方式會更簡單。

訂閱、設定與選擇節點

  1. 在客戶端開啟「訂閱」或「設定」頁面,選擇「匯入」或「新增」,貼上服務商提供的訂閱網址。不同客戶端與版本的項目名稱可能不同,重點是進入設定管理頁,而不是把網址填在節點名稱欄位。
  2. 等待更新完成後,選取剛匯入的設定。畫面上出現訂閱卡片,不代表核心已載入該設定。
  3. 前往「代理」頁面,先使用規則模式,再從相應的代理群組中選取可用節點。如果訂閱只有節點清單、沒有規則,則需搭配客戶端支援的完整設定,或使用服務商提供的完整設定。
  4. 在「設定」中找到「系統代理」開關並啟用,再確認瀏覽器是否使用桌面代理設定。如果選單項目不同,請依開關名稱尋找,不要依賴特定版本的螢幕截圖位置。

訂閱網址通常含有可識別帳戶的權杖,應比照憑證妥善保管。排錯截圖可保留錯誤類型與時間,但請遮住完整訂閱網址、節點密碼及控制介面密鑰。匯入失敗時先檢查回應內容:登入頁面、HTML 錯誤頁與一般節點 URI 清單,都不能直接當成完整的 mihomo YAML 設定。

系統代理與 TUN 的差異

系統代理主要影響會讀取桌面代理設定的應用程式。命令列工具、部分遊戲或獨立網路程式可能不會使用系統代理;在 GNOME 中可前往「設定」→「網路」→「網路代理」檢查,KDE 通常可在「系統設定」→「網路」→「代理」檢查。請以客戶端實際顯示的連接埠為準,不要預設每個客戶端都使用 7890。

TUN 透過虛擬網卡與路由接管流量,涵蓋範圍不同於系統代理,也會牽涉服務模式、網路管理權限與 DNS 設定。初次在桌面環境部署時,建議先用系統代理驗證設定,再依客戶端文件啟用 TUN。不要讓桌面核心與另一個 systemd 核心同時占用同一連接埠,或同時修改預設路由。

mihomo 二進位檔與服務帳戶

命令列部署需要使用符合 CPU 架構的 Linux 二進位檔。除了 amd64、arm64,部分發布檔也會區分指令集或相容等級;舊款處理器若出現 Illegal instruction,應核對發布說明,而不是一再重新啟動服務。下載並解壓所選發布檔後,將可執行檔命名為 mihomo,再進入該檔案所在目錄。

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

-v 顯示的是實際安裝的核心版本。請保存這項資訊,日後遇到設定欄位不相容時,便可查閱對應版本的文件;不要只記錄圖形客戶端的版本號。如果出現 Exec format error,請先檢查架構是否相符,以及檔案是否已解壓。不要直接將壓縮檔當成可執行檔安裝。

專用帳戶與目錄權限

本機 HTTP/SOCKS 代理監聽 7890 不需要 root 權限。以下會建立專用系統帳戶,將設定檔放在 /etc/mihomo,快取與執行資料則放在 /var/lib/mihomo。範例使用 Debian、Ubuntu 常見的 /usr/sbin/nologin;其他發行版請先用 command -v nologin 確認路徑,再調整命令。

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

帳戶只需建立一次;若已有同名帳戶,請先確認用途與所屬群組,不要直接刪除後重建。設定由 root 管理、服務帳戶僅有讀取權限,可降低執行中的程序意外改寫訂閱憑證的風險;資料目錄則必須允許服務帳戶寫入,否則快取或規則資源可能無法更新。

config.yaml 設定與前景驗證

最小設定與監聽範圍

使用 sudoedit /etc/mihomo/config.yaml 建立設定檔。以下是用來驗證服務運作流程的最小完整範例:所有規則都設為直連,因此只能確認連接埠與程序正常運作,無法證明遠端代理節點可用。實際使用時,應改用服務商提供且相容於目前 mihomo 版本的完整設定,並保留適當的本機監聽限制。

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

rules:
  - MATCH,DIRECT

mixed-port 會在同一連接埠接收 HTTP 與 SOCKS5 代理請求。它不是 DNS 監聽連接埠,也不是控制面板連接埠。此處關閉區域網路存取並綁定回環位址;即使伺服器有公網 IP,也不必為 7890 開放防火牆的輸入規則。

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 指定設定檔。YAML 縮排不可使用 Tab;若出現行號錯誤,請先檢查該行與上一行的縮排、冒號及引號。設定測試通過主要表示設定可解析並載入,不代表節點可連線,也不代表所有規則資源都能持續更新。

遷移完整訂閱設定

如果已有完整 YAML,可先在本機儲存為 config.yaml,再上傳至伺服器的使用者目錄,最後安裝到服務目錄。以下假設上傳的檔案位於目前目錄。請勿將含權杖的訂閱 URL 寫入共用指令碼或終端機截圖,也不要只憑副檔名判斷內容是否正確。

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

sudo -u mihomo /usr/local/bin/mihomo \
  -t -d /var/lib/mihomo -f /etc/mihomo/config.yaml
  • 檢查新設定中的 mixed-port、allow-lan 與 bind-address,避免覆寫後意外擴大監聽範圍。
  • 若設定中含有 proxy-providers、rule-providers 或相對路徑資源,請檢查路徑與目錄權限;本文以 /var/lib/mihomo 作為資料基準目錄。
  • 若啟用了 external-controller,請確認確實需要此介面,並使用回環位址監聽及設定高強度密鑰。初次部署也可以先移除控制介面設定。
  • 檢查設定是否包含 tun、自動路由或 DNS 劫持選項;本文的普通服務帳戶方案不會授予這些功能所需的網路管理權限。

交由 systemd 管理前,先在前景啟動一次並查看記錄。測試完成後按 Ctrl+C 結束,釋放 7890 連接埠,再啟動服務。

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

systemd 常駐執行與開機啟動

建立 /etc/systemd/system/mihomo.service。這是系統層級的服務,不依賴 SSH 登入工作階段;終端機中斷後仍由 systemd 管理。以下服務單元適用於前文的普通代理模式,使用專用帳戶執行,並將可寫入的範圍限制在資料目錄。

[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
ExecStartPre=/usr/local/bin/mihomo -t -d /var/lib/mihomo -f /etc/mihomo/config.yaml
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

ExecStartPre 會在啟動前測試設定,若測試失敗便不會啟動主要程序。Restart=on-failure 會在程序異常結束後重新啟動,但無法自動修復失效的訂閱或無法連線的節點。network-online.target 的實際效果也取決於發行版的網路等待服務,並不保證遠端節點已可使用。

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo.service
systemctl is-enabled mihomo.service
systemctl is-active mihomo.service
sudo systemctl status mihomo.service --no-pager
sudo journalctl -u mihomo.service -b -n 80 --no-pager

enabled 表示已設定為開機啟動,active 表示目前正在執行,兩者需分別確認。修改服務單元後,先執行 daemon-reload 再重新啟動;若只修改 YAML,請先測試設定,再執行 sudo systemctl restart mihomo.service 即可。本文未設定 ExecReload,因此不要假設 systemctl reload 會自動重新載入訂閱。

代理連線與連通性檢查

服務啟動後,Linux 不會自動讓所有程序使用代理。請先檢查監聽狀態,再以明確指定代理的請求進行驗證,藉此區分「核心未啟動」與「應用程式未接入代理」兩種問題。以下以 example.com 作為請求範例,回應狀態與耗時會依目前網路而異,並非固定的測試結果。

sudo ss -lntp 'sport = :7890'

curl --connect-timeout 10 --max-time 30 \
  --proxy http://127.0.0.1:7890 \
  -I https://example.com

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

監聽位址應為 127.0.0.1:7890。HTTP 代理存取 HTTPS 時,curl 會使用 CONNECT 通道;SOCKS 範例中的 socks5h 表示由代理端解析目標網域。實際的解析與轉送方式仍取決於核心設定及符合的規則,不能只憑命令格式判斷請求已經透過遠端節點傳送。

終端機環境變數

若要讓目前終端機中的相容程式使用代理,可設定以下變數。它們只會影響目前的 shell 及其後續子程序,不會影響其他使用者、已啟動的程式或既有的 systemd 服務。部分工具有自己的代理設定,請以該工具的文件為準。

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

# 取消目前終端機中剛設定的代理變數
unset http_proxy https_proxy all_proxy no_proxy

https_proxy 的值仍使用 http://,表示連線至本機 HTTP 代理,並非宣告目標網站使用未加密的連線。若要替單一 systemd 服務設定代理,應在該服務自己的設定中加入環境變數;不要只為了一個程式就強行修改整台伺服器的路由。

遠端存取範圍

若要讓自己的電腦暫時使用伺服器上的回環代理,可在本機建立 SSH 轉送,而不是開放伺服器的 7890 輸入連接埠。例如,將本機連接埠轉送至伺服器的 127.0.0.1:7890 後,本機程式便可連線至轉送連接埠。SSH 主機名稱請使用既有的連線設定,存取權限仍受 SSH 帳戶權限限制。

只有確實需要與區域網路共用時,才另外規劃 allow-lan、監聽位址、驗證方式及防火牆允許的來源範圍。將監聽位址改為所有網卡只會擴大可連線範圍,並非效能最佳化;尤其是公網主機,不應公開缺乏存取控制的代理服務。

啟動失敗與維護檢查

狀況優先檢查項目處理方式
Exec format errorCPU 架構、二進位檔格式重新選擇並解壓符合架構的 Linux 發布檔
Permission denied執行權限、目錄權限、檔案路徑確認服務帳戶能讀取設定檔,並能寫入資料目錄
address already in use目前占用 7890 連接埠的程序結束前景測試,或停用重複執行的核心
YAML 解析失敗記錄中的行號、縮排與回應內容修正設定,排除誤匯入 HTML 或節點清單的情況
連接埠可用,但請求失敗節點狀態、規則比對、DNS 與對外網路查看該請求的記錄,分辨直連與代理路徑
服務不斷啟動失敗設定測試結果與本次啟動記錄修復原因後重設失敗狀態,再啟動服務

排錯時先保留具體錯誤訊息,不要同時更換節點、設定、核心與連接埠。可執行 sudo journalctl -u mihomo.service --since "10 minutes ago" --no-pager 查看近期記錄。如果觸發 systemd 啟動頻率限制,請修正設定後執行 sudo systemctl reset-failed mihomo.service,再啟動服務;若只重設狀態而未排除原因,仍會再次失敗。

更新與回復舊版

  1. 記錄目前 mihomo -v 的輸出,備份正在使用的二進位檔與設定檔,並限制備份檔的讀取權限。
  2. 先用新版二進位檔測試現有設定,並查看跨版本的欄位與行為變更;若使用相對路徑資源,請採用與正式服務相同的資料目錄。
  3. 安排短暫維護時段,停止服務後安裝新版二進位檔,再啟動服務並檢查監聽狀態、記錄與實際請求。
  4. 若新版無法正常運作,請還原原本的二進位檔與相應設定,再重新驗證;不要只還原其中一項。

更新完整 YAML 與更新訂閱提供者是兩回事。圖形客戶端通常有自己的訂閱更新流程;單獨部署 mihomo 時,proxy-providers 的更新方式取決於設定,整份 config.yaml 不會因為使用 systemd 就自動替換。若之後要新增定期更新,請先下載至暫存檔並驗證成功,再取代舊檔,同時保留可在失敗時使用的舊設定。

桌面方式的重點是選取正確設定並確認應用程式如何接入代理;命令列方式則要留意權限、設定路徑與程序生命週期。先確認本機回環代理運作正常,再逐步加入規則提供者、遠端管理或 TUN,通常更容易找出問題。完整的平台檢查方式可參閱全平台疑難排解指南,初次匯入步驟則請參考快速入門。