服务器、软路由、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 停掉,接下来做成服务。
四、写 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 + 端口即可:
在客户端设备上:
- Windows:设置 → 网络和 Internet → 代理 → 手动设置代理 → 填
192.168.1.10和7890 - 手机(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.sh,chmod +x,然后 cron 里调用它。这样订阅接口临时抽风时不会把好配置覆盖成一个错误页。
常见问题
启动失败,日志报 unmarshal error 配置文件 YAML 语法有问题,或者用了当前内核版本不支持的字段。用 mihomo -t -d /etc/mihomo 做一次配置检查(-t 是 test 模式)。
端口被占用 sudo ss -tlnp | grep 7890 看是谁占了,改配置里的端口或者停掉占用的进程。
GeoIP 数据库下载失败 手动下载 geoip.metadb、geosite.dat 放到工作目录,或者在配置里关掉自动更新:
geo-auto-update: false小结
Mihomo 命令行部署的核心就四步:放二进制、放配置、systemd 常驻、防火墙限制来源。
跑起来之后它就是个不需要维护的后台服务,比在每台设备上装客户端省事得多。
相关:局域网共享代理、Linux 安装 Clash Verge。