教程 2026-04-05 · 約 14 分鐘閱讀

Clash Linux 無圖形環境部署:Meta 內核、systemd 常駐與訂閱自動更新

如果你要在沒有桌面的 Debian、Ubuntu、Arch 或任意一臺遠程 VPS 上長期跑 Clash,圖形客戶端幫不上忙。本文以社區廣泛使用的 Clash Meta 內核實現(發佈名常見為 mihomo)為主線,說明如何安裝二進制、組織配置目錄、用 proxy-providers 讓訂閱按間隔自動拉取、用 systemd 做進程守護與開機自啟,以及怎樣讓 curlapt、CI 腳本等命令行工具穩定走本地混合端口或環境變量代理。步驟與 Windows、Android 教程差異很大,更適合自建網關、旁路由或遠端開發機場景。

為什麼在無圖形 Linux 上要選 Clash Meta

無頭服務器沒有托盤圖標,也沒有「一鍵導入」界面,一切依賴配置文件與進程管理。Clash Meta 系內核在規則特性、協議支持與生態工具鏈上較貼近當前機場與規則集實踐,適合在服務器側與桌面側共用同一套 YAML 思路。你可以把它理解成:一個常駐用戶空間進程,監聽本地端口(常見為混合端口或 HTTP/SOCKS),根據規則把流量送到不同節點;再通過外部控制器(REST API)做熱更新與健康檢查。

與桌面版相比,Linux 無頭部署多出來的工作主要集中在三塊:其一,用包管理器或官方發佈頁取得與 CPU 架構匹配的可執行文件,並放到統一路徑;其二,把配置、訂閱緩存、GeoIP 數據等目錄權限收緊,避免以 root 長期運行;其三,用 systemd 處理崩潰重啟、開機順序(建議在網絡就緒後再拉起),以及可選的定時任務配合 API 觸發完整配置重載。把這三塊做對,後面無論是旁路由轉發還是本機出站,都會省心很多。

開始前:架構、用戶與網絡前提

檢查清單

  • CPU 架構:確認是 amd64arm64 等,下載對應發行包,避免在 ARM 小主機上誤裝 x86 二進制。
  • 專用系統用戶:建議創建 clashmihomo 用戶,配置目錄歸其所有,服務以該用戶運行。
  • 端口規劃:為 mixed-port(或分別的 HTTP/SOCKS)、external-controller(REST)選定未佔用端口,防火牆僅對本機或管理網段開放管理口。
  • 訂閱可達性:若訂閱域名在牆外,首次拉取可能需從中轉或已聯通的環境拷貝生成的 providers 緩存文件,再改為定時更新。

家用旁路由場景下,往往還會涉及 IPv4 轉發、iptables/nftables 或透明代理插件,這已經超出單篇入門篇幅;本文默認讀者目標是「本機或 VPS 上有一個可靠的上游 SOCKS/HTTP 出口」,先把無頭服務跑穩,再與網關轉發方案拼接。

安裝 mihomo(Clash Meta)二進制

以官方 GitHub Release 為例(項目名常寫作 mihomo),在服務器上下載與你架構匹配的壓縮包或單文件,解壓後將可執行文件放到 /usr/local/bin/mihomo,並賦予可執行權限。若你更習慣發行版自帶的 AUR、第三方包,也可以,但要確認版本是否滿足訂閱裡用到的協議與規則特性,過舊的內核可能在解析新字段時直接報錯退出。

  1. 使用 uname -m 核對架構,與 Release 資產文件名對照。
  2. 下載後校驗校驗和(若發佈頁提供),避免供應鏈風險。
  3. sudo install -m 0755 mihomo /usr/local/bin/mihomo 或等價方式安裝到 PATH。
  4. 以普通用戶執行 mihomo -v 驗證能正常輸出版本信息。

提示

不要把整個配置目錄放在全局可寫路徑;systemd 的 ReadWritePaths 與專用用戶組合,比 root 運行後再 chmod 777 更安全。

配置目錄與主配置骨架

約定配置根目錄為 /etc/mihomo(亦可選用 /var/lib/mihomo,關鍵是權限與 systemd 中路徑一致)。主文件通常命名為 config.yaml,其中聲明監聽端口、模式、外部控制器密鑰、引用哪些 proxy-providersrule-providers。無頭環境下建議顯式打開 external-controller 並設置 secret,這樣後續可以用 curl 調用 API 做健康檢查或觸發重載,而無需登錄桌面。

下面是一段極度精簡的骨架,僅用於說明字段關係;真實環境請在此基礎上補全規則、策略組與節點引用。佔位 URL 需替換為你的訂閱地址。

port: 7890
socks-port: 7891
mixed-port: 7893
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
secret: "change-me"

proxy-providers:
  airport:
    type: http
    url: "https://example.com/subscription"
    path: ./providers/airport.yaml
    interval: 3600
    health-check:
      enable: true
      interval: 600
      url: https://www.gstatic.com/generate_204

proxies: []

proxy-groups:
  - name: PROXY
    type: select
    use:
      - airport

rules:
  - MATCH,PROXY

interval 以秒為單位,表示內核週期性重新下載訂閱併合並;配合 health-check 可對節點做主動探測,減少手工在命令行裡換節點的次數。若訂閱返回的是完整 proxies 列表而非 provider 片段,需按你所用版本的文檔調整字段(部分場景會用 proxy-providers 的 parser 或單獨維護靜態文件)。

編寫 systemd 服務單元

/etc/systemd/system/mihomo.service 創建單元文件。核心思路是:Type=simple,工作目錄指向配置根,啟動命令帶 -d 指定目錄;失敗時自動退避重啟;限制文件句柄數以應對大量連接。若你希望服務在 WAN 撥號完成後再啟動,可把 After= 調整為運營商提供的網絡目標或使用 network-online.target(需確保系統啟用了相應等待邏輯)。

[Unit]
Description=mihomo (Clash Meta) daemon
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=mihomo
Group=mihomo
WorkingDirectory=/etc/mihomo
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=5
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
  1. sudo systemctl daemon-reload
  2. sudo systemctl enable --now mihomo.service
  3. systemctl status mihomo 確認 active (running)
  4. 異常時查看 journalctl -u mihomo -e 日誌中的 YAML 解析錯誤或端口占用信息

安全注意

external-controller 若監聽在非迴環地址,必須配合防火牆與強 secret,否則等價於在網絡上暴露一臺可切換出口的代理控制檯。默認建議僅綁定 127.0.0.1,通過 SSH 端口轉發管理。

命令行與腳本如何使用代理

無頭服務器上最常見的需求是:aptgitcurl、容器拉鏡像、語言包管理器等都走 Clash。若主配置裡打開了 mixed-port,可以在 shell 中導出標準環境變量,讓支持這些變量的工具自動使用 HTTP 或 SOCKS 代理。示例(端口請與本地配置一致):

export http_proxy="http://127.0.0.1:7893/"
export https_proxy="http://127.0.0.1:7893/"
export all_proxy="socks5://127.0.0.1:7893/"

部分工具只認小寫變量,部分則認大寫;CI 環境裡可在 job 級別注入。若你希望「僅對某些命令走代理」,可在命令前加前綴 env,而不是把變量寫進全局 ~/.bashrc,避免影響本機維護流量。對於不走環境變量的程序,可考慮 redsocks、proxychains 或 TUN 級方案,但複雜度會明顯上升。

提示

把 DNS 查詢也納入規劃:若使用 fake-ip 等模式,請閱讀你所用內核版本文檔,避免在服務器上出現「解析到了假地址導致本機服務異常」的耦合問題。

訂閱熱更新與配置重載

proxy-providersinterval 到期時,內核會嘗試重新下載訂閱並更新內存中的節點列表,這一過程通常不需要重啟整個進程。若你修改了主配置 config.yaml 本身(例如新增了一個 provider 或改了規則文件路徑),則需要觸發一次完整配置加載。常見做法有兩種:其一是通過外部控制器調用重載接口(具體路徑以當前版本文檔為準,常見模式為向 /configs 發送 PUT 並帶 Authorization: Bearer <secret>);其二是 systemctl restart mihomo,簡單粗暴但有短暫斷流。

你也可以額外定義 systemd timer,每小時執行一次調用 API 的腳本,用於在 interval 之外強制刷新;這在訂閱端突發變更、而本地 interval 設得較長時有用。編寫腳本時注意不要把 secret 寫進世界可讀的文件,可用 systemd EnvironmentFile 配合權限 600 存放。

常見問題

服務啟動後立即退出,日誌提示端口被佔用?

ss -lntplsof -i :7893 查看是否已有舊進程或其他代理佔用 mixed-port 或 controller 端口。若曾手動前臺運行過 mihomo,可能重複啟動導致衝突。統一改為僅由 systemd 管理,並關閉重複實例。

訂閱一直下載失敗?

先在服務器上用 curl -v 直連訂閱 URL,確認是 DNS、TLS 還是出口被攔。若訂閱必須翻牆才能拉取,屬於「冷啟動」問題:需要先用其他方式拿到首份 providers 緩存,或臨時在可達網絡生成配置後同步到服務器,再依賴節點在線後的週期性更新。部分機場提供多線路訂閱域名,換一個直連更友好的域名往往比盲目加大 interval 更有效。

提示無法寫入 providers 目錄?

檢查配置目錄所有者是否與 systemd 裡的 User= 一致,並確認 path: ./providers/... 相對目錄存在且可寫。不要把整個倉庫克隆到 root 目錄卻用低權限用戶運行,否則下載訂閱時無法落盤。

流程小結

  1. 準備架構匹配的二進制與專用系統用戶,規劃端口與權限。
  2. 編寫 config.yaml,用 proxy-providers 聲明訂閱 URL、間隔與健康檢查。
  3. 配置 systemd 單元,啟用 Restart=on-failure 與合理的網絡依賴。
  4. mixed-port 或環境變量讓命令行工具走本地代理;管理接口僅本機或 SSH 轉發訪問。
  5. 大改配置時用 API 重載或受控重啟;日常節點變更交給 provider 週期更新。

需要帶界面的整合版本?

在服務器上維護 YAML 與 systemd 是穩定方案;若你同時在桌面環境工作,也可以從 Clash 下載頁 獲取帶圖形界面、已整合常見規則與中文說明的客戶端,把無頭實例當作網關或上游,在電腦上專注業務本身。

立即免費下載 Clash,開啟流暢上網新體驗

桌面端一鍵配置,服務器端穩態運行

無頭 Linux 負責常駐與訂閱更新;日常辦公可搭配整合版客戶端,減少手寫配置時間。

免費下載 Clash