為什麼「無桌面 Linux」要另闢一套流程?

在 Windows 11、macOS 或 Android 上,多數使用者習慣透過圖形介面一鍵匯入訂閱、切換節點、查看連線狀態。這些用戶端把二進位路徑、設定檔目錄、日誌輸出都包在應用程式沙盒裡,對日常桌機十分友善。

但當場景換成僅有 SSH 的 VPS、家用伺服器、或刻意不裝圖形介面的最小化 Linux時,你面對的是另一套問題:沒有托盤圖示提醒你服務是否還活著、沒有「重新載入」按鈕、也沒有視覺化防火牆精靈。此時若仍用「桌機思維」手動執行二進位檔,只要 SSH 斷線或行程意外退出,代理就整段消失,更不會在開機後自動回來。

本文以 Clash Meta 核心(社群常稱 Mihomo)為例,示範如何把同一顆引擎放到 Linux 使用者空間裡,並交給 systemd 管理生命週期:開機自啟、崩潰後自動拉起、標準化日誌與可預期的設定檔路徑。若你希望先釐清 Meta 與舊版差異,可搭配站內的Clash Meta 升級指南一起閱讀。

ℹ️
與 WSL2 橋接文的差異:站內WSL2 主機代理橋接處理的是「子系統如何連到 Windows 上的 Clash」。本篇則假設Clash Meta 本身就跑在這台 Linux 上,屬於典型 VPS/無 GUI 伺服器部署。

第一步:目錄與身分——先把「檔案放哪」說清楚

在伺服器上最忌諱的是把設定散落在 root 家目錄或臨時資料夾,半年後自己都找不到。建議一開始就採固定根目錄,並用專用系統使用者執行,降低誤刪與權限過大的風險。

以下為常見、也好寫進文件的佈局範例(可依機房規範調整,但請全機統一):

  • 程式二進位檔:/usr/local/bin/mihomo(或你自訂名稱,與 systemd 單元檔內 ExecStart 一致即可)
  • 設定與執行時資料:/etc/mihomo/ 下放 config.yaml、規則集快取、Geo 資料等(目錄權限僅開給執行帳號)
  • 日誌(若寫檔):/var/log/mihomo/,並確認目錄存在且執行帳號可寫入;若改走 systemd journal,可不在磁碟另開檔案

建立專用使用者(名稱可自訂,此處以 clash 為例)有助於稽核與權限分離:

sudo useradd --system --home /etc/mihomo --shell /usr/sbin/nologin clash
sudo mkdir -p /etc/mihomo /var/log/mihomo
sudo chown -R clash:clash /etc/mihomo /var/log/mihomo

接著把官方發行的 Linux 二進位檔放到 /usr/local/bin/ 並賦予執行權限。取得上游發行檔屬於開源專案釋出物範疇;若你同時也需要圖形用戶端安裝包,仍建議以本站下載頁作為桌機平台的主要入口,與伺服器二進位檔用途分開理解。

第二步:config.yaml 與「無 GUI」下的必查欄位

沒有面板時,所有行為都由 YAML 決定。除了節點與規則外,伺服器場景請特別核對:

  • 監聽位址:若僅本機其他服務要連,維持 127.0.0.1;若同一區網裝置也要用 HTTP/SOCKS 代理,需同步評估 allow-lan 與防火牆,避免把未認證的代理埠暴露到公網。
  • 外部控制器(external-controller):若開放給區網或遠端 REST 管理,務必搭配密鑰或網路隔離;純本機自動化可綁 127.0.0.1 並限制來源介面。
  • DNS 與 Fake-IP:無桌面時更常遇到「只有 curl 有問題」其實是解析語意不一致。建議對照站內Fake-IP 與 DNS 設定,把 dns 區塊與規則順序一次寫清楚。

訂閱與 proxy-providers 匯入流程與桌機版概念相同,細節可參考訂閱匯入教學。差別在於:你要自己處理檔案更新後的重載時機(例如透過 API 或排程),而不是依賴 GUI 的「重新整理」按鈕。

第三步:撰寫 systemd 單元檔——常駐、自動重啟、開機自啟

以下為精簡但可上線的單元檔範例,重點在於 Type=simple、明確的 WorkingDirectory、以及 Restart=on-failure 讓行程在非零退出或訊號導致異常時由 systemd 拉回。

# /etc/systemd/system/mihomo.service
[Unit]
Description=Clash Meta (Mihomo) daemon
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=clash
Group=clash
WorkingDirectory=/etc/mihomo
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=3s
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

依發行版差異,你可能需要調整 AmbientCapabilities(僅在必須綁定特權埠時才保留),或改用 CapabilityBoundingSet 等更嚴格模板。重點是:單元檔內的路徑必須與實際部署一致,否則 systemd 會在啟動當下直接失敗,這類錯誤會清楚出現在 journal 裡。

寫入後重新載入並啟用開機自啟:

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo.service
systemctl is-active mihomo.service
⚠️
安全提醒:把混合代理埠或外部控制器開在 0.0.0.0 且又未設防火牆,等於在公網上掛了一個未完整盤點風險的入口。VPS 上請預設「最小暴露」,必要時只允許你的固定 IP 連入管理埠。

第四步:日誌與除錯——優先用 journalctl

沒有 GUI 日誌視窗時,journalctl 是最穩定的觀測口。常用指令如下:

sudo journalctl -u mihomo.service -b
sudo journalctl -u mihomo.service -f

若你在設定檔內另外指定寫入檔案日誌,請記得搭配 logrotate,避免單一檔案在長期運行後塞滿磁碟。相對地,若全部交給 journald,通常可沿用發行版預設的輪替與壓縮策略。

除錯順序建議維持樸素:先看單元是否 active → 再看啟動參數與工作目錄 → 最後才懷疑規則或節點品質。很多「以為是節點掛了」其實是設定檔 YAML 縮排錯誤導致程式直接拒絕啟動。

第五步:驗證代理是否真的在聽、規則是否生效

假設 mixed-port7890(請替換成你的實際值),在同一台機器上可用:

ss -lntp | grep 7890
curl -I --proxy http://127.0.0.1:7890 https://www.example.com --max-time 15

若你打算讓整台 Linux 本機行程預設走透明轉發或 TUN,那已進入路由/nftables/權限的另一個層級,與本文「先做好本機代理埠服務」是遞進關係。可延伸閱讀站內TUN 模式詳解以評估是否值得在伺服器上承擔額外複雜度。

第六步:規則與長期維運——別讓 VPS 變成「一次性腳本機」

無圖形環境最常見的技術債,是訂閱 URL、規則集與 Geo 檔案版本在半年後全部過期,卻沒有任何自動更新。實務上可選:

  • config.yaml 設定合理的 proxy-providersrule-providers 更新間隔;
  • 以 systemd timer 或 cron 週期性觸發重載(透過本機 API,且務必帶上授權標頭);
  • 把「變更設定」與「重啟服務」分開:小改動優先嘗試熱重載,避免不必要的中斷。

若你希望把國內直連與海外代理寫得可維護,站內規則分流教學同樣適用於伺服器上的 YAML,只是你會更頻繁地用指令列與版本庫管理設定檔。

與站內文件總覽的銜接

當你把 Clash Meta 當成「機房裡的一個網路元件」時,建議把名詞表、埠位與風險邊界寫進自己的 runbook。站內說明文件總覽可協助新成員快速對齊概念,避免每回除錯都從零開始拼湊論壇片段。

選讀:防火牆與雲端安全群組

即使 systemd 已正確拉起服務,若雲平台的安全群組或本機 nftablesfirewalld 仍預設阻擋入站,你從外部測試會誤判成「代理壞了」。實務上請把檢查拆成兩段:在伺服器本機用 curl127.0.0.1 確認行程與規則正常,再決定是否要在公網介面放行特定埠。

另一個常見誤會是把「能 SSH 進主機」等同於「代理埠也對全世界開放」。對管理用 API 或外部控制器,建議優先走僅限管理網段、VPN、或 SSH 本地埠轉發,而不是直接把敏感介面暴露在公網位址上。這類網路邊界決策與 YAML 內容無關,卻往往決定 VPS 是否在一週內被掃描行為打穿。

結語:把「常駐」當成產品需求,而不是順手開著

在無桌面 Linux 上跑 Clash Meta,本質是把一個網路代理程式當成長生命週期的服務來維運。systemd 提供的不是炫技,而是可預期的啟動順序、可觀測的失敗原因、以及可復原的重啟策略。當你把目錄、設定檔、日誌與單元檔四件事對齊後,VPS 或純 SSH 環境的體驗會與「偶爾手動執行一下」完全不同:它會在背景穩定待命,並在出問題時留下足夠線索讓你追查。

相較於依賴來路不明的整包腳本,更重要的是選擇來源清楚、更新節奏透明的核心與規則來源,並為自己的機器準備可回滾的變更紀錄。桌機與行動裝置上若仍希望用圖形介面管理節點,可從本站用戶端下載頁取得對應平台版本;伺服器則建議維持本文這種「服務化」佈署,讓兩種使用方式各得其所。→ 立即免費下載 Clash,開啟流暢上網新體驗