Mihomo 使用教程:Linux 命令行部署、导入订阅、systemd 服务与常见错误
- 客户端
- Mihomo
- 支持平台
- Linux / 路由器
- 价格
- 免费(开源)
- 官方地址
- 前往下载
- 下载
- 安装
- 导入订阅
- 设置
- 排错
Mihomo 是 Clash Meta 内核改名后的名称,由 MetaCubeX 社区维护。Clash Verge Rev、Mihomo Party、Clash Meta for Android 等图形客户端,底层运行的都是它。在没有桌面环境的 Linux 服务器、软路由或树莓派上,可以直接运行 Mihomo 内核,用配置文件和网页面板管理。
本文面向有一定 Linux 基础的用户,以 x86_64 架构、使用 systemd 的发行版(如 Debian、Ubuntu)为例。如果你的 Linux 有桌面环境,更推荐使用上面提到的图形客户端。
下载
Mihomo 的官方发布渠道是 MetaCubeX 在 GitHub 上的 mihomo 仓库 Releases 页面。发布页中的文件按“系统-架构”命名,选择方法:
| 设备 | 选择文件名中含有的关键字 |
|---|---|
| 普通 x86_64 电脑或服务器 | linux-amd64 |
| 树莓派 4/5 等 64 位 ARM 设备 | linux-arm64 |
| 较老的 32 位 ARM 设备 | linux-armv7 |
用 uname -m 可以查看架构:输出 x86_64 选 amd64,输出 aarch64 选 arm64。amd64 有时还会细分出兼容性版本(如带 compatible 字样),老旧 CPU 运行报错时可以改用兼容版本。
发布页同时提供 .gz 压缩的单文件二进制和 .deb、.rpm 等安装包。本文以二进制文件为例。
只从官方仓库下载。网上流传的“一键脚本”“魔改内核”可能夹带后门,运行前务必确认来源。
安装
以下载 .gz 二进制为例,在终端中执行(文件名以实际下载的为准):
gunzip mihomo-linux-amd64-*.gz
sudo mv mihomo-linux-amd64-* /usr/local/bin/mihomo
sudo chmod +x /usr/local/bin/mihomo
mihomo -v
最后一条命令能输出版本信息,说明安装成功。接着创建配置目录:
sudo mkdir -p /etc/mihomo
-d 参数指定的就是这个配置目录。Mihomo 运行时会在这里读取 config.yaml,并存放 Geo 数据文件、订阅缓存(providers 子目录)和网页面板文件等。以后备份或迁移,只需要复制整个目录。建议目录权限只允许 root 读写,因为配置文件中包含订阅链接和控制密码。
首次启动时,Mihomo 会在配置目录下自动下载分流所需的 GeoIP / GeoSite 等数据文件。如果服务器直接访问这些下载地址较慢,启动会卡在这一步,耐心等待或稍后重试即可。
导入订阅
Mihomo 本身没有“导入订阅”按钮,一切由 config.yaml 决定。把机场订阅变成配置,有两种思路:
思路一:直接使用机场的 Clash 配置
机场提供的 Clash / Mihomo 订阅,本身就是一份完整的 config.yaml。可以下载后直接放到配置目录:
sudo curl -L -o /etc/mihomo/config.yaml "你的Clash订阅链接"
注意:部分机场会根据请求的 User-Agent 返回不同格式的内容,如果下载下来的不是 YAML,可以在 curl 中加 -A 参数指定一个 Clash 类客户端的 User-Agent。缺点是更新订阅时整份配置会被覆盖,自己的修改会丢失。
思路二:用 proxy-providers 引用订阅(推荐)
自己写一份主配置,节点部分通过 proxy-providers 引用订阅链接,Mihomo 会自动下载和定时更新。一个最小示例:
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
secret: "自己设置一个复杂的密码"
proxy-providers:
my-airport:
type: http
url: "你的Clash订阅链接"
interval: 86400
path: ./providers/my-airport.yaml
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 300
proxy-groups:
- name: 节点选择
type: select
use:
- my-airport
- name: 自动选择
type: url-test
use:
- my-airport
url: https://www.gstatic.com/generate_204
interval: 300
rules:
- GEOIP,LAN,DIRECT
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,节点选择
这份示例只演示结构,字段的完整含义以 Mihomo 官方文档为准。不建议把订阅链接交给来路不明的在线“订阅转换”网站处理,订阅链接等同于账号凭证,交给第三方存在泄露风险。
添加节点
单个节点可以直接写在配置的 proxies 字段中,按 Mihomo 文档中对应协议的格式填写服务器、端口、密码等参数,然后把节点名加入某个 proxy-groups 的 proxies 列表。自己写的节点和 proxy-providers 引用的订阅节点可以同时存在。
修改配置后,可以先用测试参数检查语法:
mihomo -d /etc/mihomo -t
更新订阅
- 使用思路一时,重新执行 curl 下载命令,然后重启服务;
- 使用思路二时,Mihomo 会按
interval(单位秒)自动更新;也可以在外部控制面板的 Providers 页面手动更新。
更新后如果节点数量变成 0,多半是订阅已过期,或机场返回了错误页面而不是节点列表。可以查看 providers 目录下缓存文件的内容判断原因,同时登录机场后台确认套餐状态。修改 config.yaml 本身后,需要重启服务或在面板中重新加载配置才会生效。
配置 systemd 服务
让 Mihomo 开机自启、崩溃自动重启,创建文件 /etc/systemd/system/mihomo.service:
[Unit]
Description=mihomo daemon
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
[Install]
WantedBy=multi-user.target
然后执行:
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
systemctl status mihomo
journalctl -u mihomo -f
status 显示 active (running) 即运行成功,journalctl 用于查看实时日志。
外部控制面板
命令行不便于切换节点,Mihomo 提供了 RESTful 控制接口(即配置中的 external-controller),可以配合网页面板使用,常见的有 MetaCubeXD、Yacd(及其 Meta 分支)、Zashboard 等。它们都是纯前端页面,连接到你填写的控制地址和 secret 后,就能在浏览器里切换节点、测速、查看连接和日志。
面板也可以通过配置中的 external-ui 字段放到本机目录由 Mihomo 直接提供。安全提醒:如果把控制地址改为 0.0.0.0 供局域网访问,务必设置强密码,并且不要暴露到公网。
系统代理
服务器上没有“系统代理”开关。让程序走代理的常见方式是设置环境变量:
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890
只对当前终端会话生效,写入 shell 配置文件可以长期生效。如果要让局域网其他设备使用,把 allow-lan 改为 true,并在防火墙中只对可信网段开放端口。
TUN 模式
不读取环境变量的程序(如 Docker 拉取镜像、部分服务进程),可以用 TUN 模式接管:
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns:
enable: true
enhanced-mode: fake-ip
TUN 模式通常要和 DNS 配置一起使用:fake-ip 模式下,Mihomo 会对域名查询先返回一个保留地址段的假 IP,等程序真正发起连接时再按域名匹配规则,这样分流更准确、响应也更快。如果本机还运行着其他 DNS 服务(如 systemd-resolved),需要留意端口和解析顺序是否冲突。
TUN 需要 CAP_NET_ADMIN 权限,上面的 systemd 文件已授予。在远程服务器上开启 TUN 前请确认有其他登录方式(如服务商的控制台),配置不当可能导致 SSH 断开。
规则模式
配置中 mode: rule 即规则模式,按 rules 自上而下匹配,命中即停止,最后一条 MATCH 兜底。上面的示例让局域网和国内流量直连,其余走“节点选择”组。也可以在控制面板中临时切换模式。
全局模式
把 mode 改为 global,或在控制面板中切换为全局,所有流量都走所选节点,适合临时排查。排查完切回规则模式,避免浪费流量,流量计算见机场流量怎么算。
常见错误
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 运行提示 exec format error | 下载了错误架构的二进制 | 用 uname -m 确认架构后重新下载 |
| 启动卡在下载 Geo 数据 | 服务器访问下载地址慢 | 等待重试,或手动放入数据文件 |
| 配置检查报 YAML 错误 | 缩进错误或使用了 Tab | 统一用空格缩进,用 -t 检查 |
| 订阅下载内容不是 YAML | 机场按 User-Agent 返回格式 | 复制 Clash 订阅,必要时指定 User-Agent |
| 面板连接失败 | 控制地址、端口或 secret 不对 | 核对 external-controller 与面板填写 |
| 开启 TUN 失败 | 缺少权限 | 以 root 运行或授予 CAP_NET_ADMIN |
| 开启 TUN 后 SSH 断开 | 路由被接管 | 通过控制台关闭 TUN,并调整路由排除规则 |
| 节点全部超时 | 订阅过期或流量用完 | 登录机场后台检查套餐 |
更多 Linux 客户端可以看 Linux 客户端教程。