跳到主要內容

首頁 / 部落格 / 進阶技巧

Mihomo 核心命令列部署入門:從解壓縮到 systemd 常駐

Mihomo 核心命令列部署入門:從解壓縮到 systemd 常駐

伺服器、軟路由、NAS 上沒有桌面環境,裝 Clash Verge 沒意義。這些場景直接跑 Mihomo 核心 就行——它本身就是個單檔案命令列程式。

這篇以 Linux amd64 為例走一遍完整流程。

一、下載並安裝

本站下載的是 .gz 壓縮檔,裡面就是一個可執行檔案:

# 下載後解壓縮
gunzip mihomo-linux-amd64-v1.19.29.gz

# 賦予執行權限
chmod +x mihomo-linux-amd64-v1.19.29

# 放到 PATH 裡,順便改個短名字
sudo mv mihomo-linux-amd64-v1.19.29 /usr/local/bin/mihomo

# 驗證
mihomo -v

正常會輸出版本號和編譯資訊。

二、準備設定目錄

Mihomo 需要一個工作目錄存放設定和資料庫:

sudo mkdir -p /etc/mihomo
cd /etc/mihomo

把你的 config.yaml 放進去。如果你用的是訂閱連結,可以直接下載下來:

sudo curl -L -o /etc/mihomo/config.yaml \
  -A "clash.meta" \
  "你的订阅链接"

設定裡至少要有這幾項才能正常工作:

mixed-port: 7890          # 混合端口(HTTP + SOCKS5)
allow-lan: true           # 允许局域网设备连接
bind-address: "*"
mode: rule
log-level: info
external-controller: 0.0.0.0:9090   # 外部控制 API
secret: "改成你自己的密码"            # API 密码,公网环境必设

三、前台跑一遍確認沒問題

mihomo -d /etc/mihomo

-d 指定工作目錄。正常會看到類似輸出:

INFO[0000] Start initial configuration in progress
INFO[0000] Geodata Loader mode: memconservative
INFO[0000] HTTP proxy listening at: [::]:7890
INFO[0000] RESTful API listening at: [::]:9090

看到 listening at 就說明起來了。

前台確認沒問題後,Ctrl+C 停掉,接下來做成服務。

部署流程下載解壓縮單檔案二進位準備設定config.yaml 放進工作目前台試跑確認能起來寫 systemd做成常駐服務開機自啟enable
中間「前台試跑」這步不要跳過,設定有問題時報錯看得最清楚

四、寫 systemd 服務

創建 /etc/systemd/system/mihomo.service

[Unit]
Description=Mihomo Daemon
Documentation=https://wiki.metacubex.one
After=network.target nss-lookup.target

[Service]
Type=simple
User=root
LimitNPROC=500
LimitNOFILE=1000000
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo

[Install]
WantedBy=multi-user.target

然後:

sudo systemctl daemon-reload
sudo systemctl enable mihomo      # 开机自启
sudo systemctl start mihomo       # 立即启动
sudo systemctl status mihomo      # 查看状态

看到 active (running) 就成功了。

常用運維命令

sudo systemctl restart mihomo     # 改完配置后重启
sudo systemctl stop mihomo        # 停止
journalctl -u mihomo -f           # 实时看日志
journalctl -u mihomo -n 100       # 看最近 100 行

五、讓其他設備用上它

設定裡 allow-lan: true 已經開了區域網路訪問。其他設備只要把代理指向這台機器的 IP + 連接埠即可:

區域網路共享的拓撲手機 電腦 軟路由 NASMihomo 核心按規則判斷外網国內流量在這台機器上直接出去,不經過節點
一台設備設定,全家設備受益

在用戶端設備上:

  • Windows:設定 → 網路和 Internet → 代理 → 手動設定代理 → 填 192.168.1.107890
  • 手機(Wi-Fi):長按當前 Wi-Fi → 修改網路 → 高級 → 代理選「手動」→ 填上面的地址和連接埠
  • 路由器級別:如果軟路由本身就是閘道,可以配合 TUN/TProxy 做透明代理,全家自動生效(這部分設定較複雜,本文不展開)

六、外部控制 API 與面板

設定裡的 external-controller: 0.0.0.0:9090 開了一個 RESTful API,可以用它來切換節點、查看連接、重載設定。

簡單驗證:

curl -H "Authorization: Bearer 你的secret" http://127.0.0.1:9090/version

常用接口:

接口作用
GET /proxies列出所有節點和策略組
PUT /proxies/{组名}切換某個策略組選中的節點
GET /connections當前所有連接
DELETE /connections斷開所有連接
GET /logs實時日誌流
PUT /configs?force=true重載設定

配合網頁面板(如 metacubexd、yacd)可以得到一個和圖形用戶端差不多的管理介面,把面板檔案放到本地目錄,用 external-ui 指向它即可:

external-ui: /etc/mihomo/ui
external-ui-name: metacubexd

然後瀏覽器訪問 http://服务器IP:9090/ui

七、訂閱自動更新

命令列部署沒有用戶端幫你更新訂閱,用 cron 自己做:

sudo crontab -e

加一行(每天凌晨 4 點更新並重新啟動):

0 4 * * * curl -L -A "clash.meta" -o /etc/mihomo/config.yaml "你的订阅链接" && systemctl restart mihomo

更穩妥的做法是先下載到臨時檔案、校驗通過再替換:

#!/bin/bash
TMP=$(mktemp)
curl -fsSL -A "clash.meta" -o "$TMP" "你的订阅链接" || exit 1
# 簡單校驗:必須包含 proxies 段
grep -q "^proxies:" "$TMP" || { rm -f "$TMP"; exit 1; }
mv "$TMP" /etc/mihomo/config.yaml
systemctl restart mihomo

存成 /usr/local/bin/update-mihomo.shchmod +x,然後 cron 裡調用它。這樣訂閱接口臨時抽風時不會把好設定覆蓋成一個錯誤頁。

常見問題

啟動失敗,日誌報 unmarshal error 設定檔 YAML 語法有問題,或者用了當前核心版本不支援的欄位。用 mihomo -t -d /etc/mihomo 做一次設定檢查(-t 是 test 模式)。

連接埠被佔用 sudo ss -tlnp | grep 7890 看是誰佔了,改設定裡的連接埠或者停掉佔用的行程。

GeoIP 資料庫下載失敗 手動下載 geoip.metadbgeosite.dat 放到工作目錄,或者在設定裡關掉自動更新:

geo-auto-update: false

小結

Mihomo 命令列部署的核心就四步:放二進位、放設定、systemd 常駐、防火牆限制來源

跑起來之後它就是個不需要維護的後台服務,比在每台設備上裝用戶端省事得多。

相關:區域網路共享代理Linux 安裝 Clash Verge