月神云 - 全终端加速服务

Mihomo 规则模式不生效怎么办?

更新于 2026-11-01 · moontoday.store

简答:Mihomo 规则模式不生效,先确认运行配置中的 mode 是否为 rule,再检查 rules 是否存在 MATCH 兜底、规则顺序是否被前面的规则抢先命中。随后通过控制器的 /rules 和 /connections 查看实际命中规则;如果规则集未加载或域名未被识别,再处理 rule-providers、DNS和缓存。

定义:Mihomo 规则模式是按照配置文件中 rules 从上到下匹配流量,并将请求交给对应代理组、节点或直连策略的运行模式。

先试这一步:确认不是模式、顺序或策略组问题

本文是第三方使用指南,适用于使用 Mihomo 内核的客户端;不同客户端的菜单名称可能不同,但最终都要落到 Mihomo 的运行配置和连接记录上。

规则模式不生效的快速判断
现象优先检查可观察结果
所有请求都直连mode、rules和最后一条规则运行配置应显示 mode: rule,连接记录不应全部命中 MATCH,DIRECT
指定域名仍走错误策略规则从上到下的优先级更靠前的 DOMAIN、GEOIP或RULE-SET可能已经先命中
规则集名称存在但没有效果rule-providers定义与引用名称规则集合能更新,且 RULE-SET中的名称完全一致
规则看起来正确但无法匹配DNS、域名识别和连接类型连接记录中的目标地址、协议、命中规则与预期一致

Mihomo 官方文档说明,rule代表按规则匹配,global代表全局代理,direct代表全局直连;默认模式为规则模式。先在客户端的“运行模式”“配置详情”或“核心配置”入口确认当前运行配置,而不要只看订阅文件中的文本。查看 Mihomo 通用配置说明

随后打开当前配置中的 rules,确认至少存在一条明确的测试规则和一条兜底规则。例如结构上应类似 DOMAIN-SUFFIX,example.com,PROXY 与 MATCH,DIRECT。这里的域名、策略组名称仅作结构示例,不能直接复制到实际配置;请替换为当前配置中真实存在的域名和策略组。

按五步定位:规则模式为何没有按预期分流

  1. 确认客户端加载的是当前配置。

    如果客户端有多个配置文件、订阅配置或覆写配置,先记录当前正在运行的配置名称,再修改它。修改后执行客户端提供的“重新加载配置”“应用配置”或重启核心操作。只编辑本地文件但没有重新加载,运行中的核心仍可能使用旧配置。

  2. 确认规则顺序。

    Mihomo 规则按从上到下匹配,排在前面的规则优先级更高。若前面已有 DOMAIN-SUFFIX,example.com,DIRECT,后面的 RULE-SET,my-proxy,PROXY通常不会再接管同一请求。把用于测试的精确规则临时放到相关规则集之前,测试完成后再恢复原顺序。查看 Mihomo 路由规则与优先级说明

  3. 确认策略组名称真实存在。

    规则最后一列必须指向当前配置中存在的代理、策略组或直连策略。若规则写的是一个不存在或已改名的策略组,先在客户端的代理组页面核对名称;不要只依据订阅模板中的旧名称判断。

  4. 确认规则集定义和引用一致。

    RULE-SET需要对应的 rule-providers配置。官方文档要求 HTTP 类型规则集配置 URL,且 behavior要与文件格式相符,例如 domain、ipcidr或classical;规则集名称还必须唯一。检查名称大小写、缩进、URL、文件格式和更新状态。查看 Mihomo rule-providers 配置说明

  5. 用连接记录确认到底命中了什么。

    如果客户端提供控制器面板,打开连接列表,访问一个明确用于测试的域名,观察该连接的目标地址、协议、代理链、rule和rulePayload。Mihomo API的 /connections会返回连接命中的规则类型和规则内容,/rules则可查看规则索引、类型、匹配内容、目标策略及部分命中统计。若面板没有展示这些字段,可在客户端日志中临时提高到 info或debug,测试完成后恢复原日志级别。查看 Mihomo API 中的规则、连接和日志接口

三类常见异常:看到什么结果就怎么处理

1. 连接命中 MATCH,DIRECT

这通常表示前面的规则没有匹配,最后的兜底规则接管了请求。先检查域名是否与规则写法一致:精确域名使用 DOMAIN,后缀匹配使用 DOMAIN-SUFFIX;如果规则依赖域名,但连接记录只显示目标 IP,继续检查 DNS、嗅探或当前应用是否通过其他协议建立连接。不要为了“强制命中”直接删除所有兜底规则,先保留备份并只增加一条最小测试规则。

2. 规则集显示已配置但没有条目

重点检查规则集下载是否成功、文件是否为空、behavior与实际内容是否匹配,以及客户端是否有网络权限。官方文档列出了 HTTP、file和inline等 provider 类型;HTTP 类型需要 URL,文件路径还受到 Mihomo 工作目录和安全路径限制。若只是临时验证,可先用一个小型、明确格式的规则集或单条内联规则测试,确认基础链路正常后再恢复较大的远程规则集。

3. 规则命中了,但流量仍未按预期连接

这时规则匹配可能已经成功,问题转移到策略组、节点能力或协议层。例如连接记录显示命中了某代理组,但代理组当前选择的是直连、不可用节点,或请求类型与节点能力不匹配。先在代理组页面确认当前选择,再用相同策略组执行一次延迟或连通性测试;如果规则命中内容正确,不要继续反复修改规则。

DNS、缓存和 TUN 场景下的补充检查

当规则依赖域名、GEOIP或RULE-SET时,DNS结果和目标识别会影响匹配。特别是在 Fake-IP、TUN或应用自行解析域名的场景中,连接记录可能出现域名与 IP 不一致。建议按以下顺序操作:

  1. 先关闭一个正在运行的测试连接,再清理客户端提供的 DNS 缓存或 Fake-IP 缓存。
  2. 重新打开目标应用,只访问一个测试域名,并立即查看连接记录中的 metadata、rule和rulePayload。
  3. 若规则仍无法识别域名,暂时用明确的 IP 或简单域名规则做对照,不要同时修改 DNS、TUN、嗅探和规则集。
  4. 如果只在 TUN 模式下异常,先关闭 TUN,用普通系统代理复测;普通代理能命中而 TUN 不能命中,优先检查 TUN 路由、DNS 劫持和应用流量是否真正进入 Mihomo。

这是分流定位方法,不代表某一个配置一定适用于所有平台。完成测试后,恢复原来的 DNS、TUN和嗅探设置,避免把临时排查项长期保留。

回滚与最小复现:避免越改越乱

  1. 修改前备份当前配置文件、覆写文件和规则集定义,记录客户端、Mihomo内核和系统平台。
  2. 只保留一个测试域名、一条测试规则、一个明确存在的策略组和一条兜底规则,暂时移除无法核实的远程规则集。
  3. 重新加载配置,访问测试域名,记录连接中的命中规则和实际代理链。
  4. 若最小配置能命中,再逐个恢复规则集、DNS、TUN和其他覆写;每恢复一项就重新测试。
  5. 若最小配置仍不能命中,恢复备份,不要继续叠加改动,并检查客户端是否实际使用 Mihomo 内核以及控制器是否连接到当前实例。

排查完成后,建议保留一份“可工作的最小配置”和一份完整配置。以后规则更新失败时,可以先用最小配置判断是规则内容问题,还是客户端、DNS或网络链路问题。

相关使用指南

如果你已经确认规则本身正常,但仍遇到配置或网络层问题,可继续查看:

常见问题

Mihomo 规则模式和全局模式有什么区别?

规则模式会按 rules 从上到下匹配,再交给对应策略;全局模式则要求在全局代理组中选择统一出口。排查规则时必须先确认当前运行模式确实是 rule。

为什么我写了规则,最后还是命中 MATCH,DIRECT?

通常是前面的规则没有匹配,或者域名、规则集、策略组名称与实际配置不一致。先在连接记录中查看 rulePayload,再核对规则顺序、域名写法和规则集更新状态。

RULE-SET 配置了但完全不生效怎么办?

检查 RULE-SET 引用名称是否与 rule-providers 下的名称完全一致,再检查 HTTP 地址、文件格式、behavior和更新结果。先用一条简单的内联或本地测试规则确认基础规则链路。

规则命中后仍然直连,是规则坏了吗?

不一定。连接记录显示的 rule 和 rulePayload 只能说明匹配结果,还要查看该规则对应的策略组当前选择。如果策略组选择了直连或节点不可用,规则本身可能已经正常工作。

修改规则后为什么页面还是旧结果?

可能只修改了文件但没有重新加载运行配置,也可能客户端实际运行的是另一份配置。先记录当前配置名称,执行客户端的重新加载或重启核心,再重新建立连接测试。

相关阅读

参考资料

  1. mihomo 官方文档:通用配置与运行模式
  2. mihomo 官方文档:路由规则、规则顺序与匹配方式
  3. mihomo 官方文档:规则集提供器配置
  4. mihomo 官方文档:API、规则命中、连接与日志接口