本页目录

mihomo 操作手册

mihomo (clash meta) 是代理规则引擎。核心概念: proxy (代理节点), proxy-group (节点分组, 含策略如 url-test/fallback), rule (分流规则), sniffer (协议嗅探), fake-ip (假 DNS 映射)。以下以 /opt/mihomo/mihomo_config/config.yaml 为典型配置路径。

配置管理

# 真源位置 (唯一手动编辑的配置)
vi /opt/mihomo/mihomo_config/config.yaml

# 校验配置语法 (重启前必须跑, 语法错误 = 服务起不来)
mihomo -t -f /opt/mihomo/mihomo_config/config.yaml
# OK: "configuration file is valid"
# NG: 具体报错行号

# API 热重载 (不中断连接)
curl -X PUT 127.0.0.1:9999/configs?force=true \
  -H "Authorization: Bearer <secret>" \
  -d '{"path":""}'
# force=true: 即使有错误也尝试 (不推荐, 先 -t 校验)

# 远程旁路由 (如 OpenWrt Nikki):
# ssh <router> /etc/init.d/nikki reload
# 或: curl -X PUT <router_ip>:9090/configs?force=true

日志与监控

# 日志 (默认 level: info)
tail -f /var/log/mihomo.log
journalctl -u mihomo -f

# API: 基础状态
curl 127.0.0.1:9999 -H "Authorization: Bearer <secret>" | jq
# 返回: {"hello":"clash"}

# API: 所有代理节点 + 延迟
curl 127.0.0.1:9999/proxies -H "Authorization: Bearer <secret>" | jq '.proxies[] | {name, type, history}'
# history: [{time, delay}] — 最近的延迟采样

# API: 活跃连接数
curl 127.0.0.1:9999/connections -H "Authorization: Bearer <secret>" | jq '{upload,download,connections: [.connections[] | {src,dst,rule,chain}]}'

# API: 规则列表
curl 127.0.0.1:9999/rules -H "Authorization: Bearer <secret>" | jq

规则调试

# 打开 debug 日志 (重启后失效)
# config.yaml: log-level: debug

# 日志中关键信息:
# [TCP] 192.168.1.100:52341 --> google.com:443 match MATCH using PROXY[Auto] --> HK-Hy2
# ↑ 源 IP          ↑ 目标域名    ↑ 匹配的规则  ↑ 走的分组 ↑ 最终节点

# 常见问题排查:
# 1. 规则不匹配 → 查看走的是 Matcher (域名) 还是 GEOIP (IP 归属)
# 2. 走了 PROXY 但节点不通 → 检查 proxy history 延迟
# 3. 走了 DIRECT 但预期走 PROXY → 检查域名是否在直连规则中

旁路由透明代理运维

# OpenWrt/Nikki 系统: 检查 nftables 透明代理规则
nft list table inet nikki
# → 应包含: dstnat redirect TCP → :7891, mangle markers → TUN

# 检查 failopen 守护 (如已部署)
/etc/init.d/nikki-failopen status
# 功能: 检测 mihomo 是否存活 → 连续失败 → 删透明代理规则 → 全屋直连

# 检查 DNS 链路
docker exec adguardhome nslookup google.com   # 如果 DNS 在容器中

常见问题

# 所有节点超时
# → 检查本机出口网络: curl --proxy 127.0.0.1:7890 -I https://www.google.com
# → 检查每个节点: curl 127.0.0.1:9999/proxies | jq '.proxies[] | select(.history|length>0) | {name, delay: .history[-1].delay}'

# 域名规则不生效
# → 开了 sniffer 吗? config.yaml: sniffer: enable: true
# → fake-ip 模式: DNS 返回假 IP (198.18.x.x) → 连接时查表 → 匹配域名规则
# → redir-host 模式: 无 fake-ip → 必须在连接时 sniffing — 如果没 sniffing, 域名规则失效

# DNS 解析异常
# → fake-ip 范围与 hosts 冲突? 检查 /etc/hosts 是否有 198.18.x.x
# → 上游 DNS 不可达? 检查 nameserver-policy 和 fallback DNS