QuickQ VPN - 更快、更稳、更简单的VPN

Mihomo 规则不生效?先检查 mode、代理组和规则顺序

更新于 2026-10-23 · as6.mom

简答:写了规则却仍然走直连或代理,先确认 mode: rule、规则目标名称和 YAML 缩进,再用最小模板测试。Mihomo 按 rules 从上到下匹配,第一条命中即停止,末尾应保留 MATCH 兜底;RULE-SET 还要核对 URL、behavior 与 format。

定义:Mihomo 规则配置,是在 config.yaml 中用 mode、代理组、rules 和 rule-providers 共同决定域名、IP 或网络请求进入直连、代理、拒绝等处理路径。

先试这一步:四项检查决定规则是否参与匹配

写了规则却没有效果时,不要先继续添加更多规则。先检查 mode、代理组名称、规则顺序和配置是否成功加载。Mihomo 官方文档将 rule、global、direct列为运行模式;只有使用 mode: rule 时,路由规则才会参与匹配。可参考 mihomo General configuration。

检查项正常写法或现象不正常时先处理什么
modemode: rule如果是 global 或 direct,先改为规则模式再测试
规则目标例如 Proxy 与 proxy-groups.name 逐字一致检查大小写、空格和中文符号,不能把节点名误当代理组名
规则顺序例外规则在前,范围较宽的规则在后检查前面是否已有更宽泛的规则提前命中
最终规则末尾有 MATCH,Proxy没有 MATCH 时,未命中的请求可能没有明确兜底路径

规则的可视化判断可以记成:请求 → 第 1 条规则 → 命中就停止;未命中 → 继续下一条 → 全部未命中 → MATCH 兜底。官方路由文档明确说明规则按从上到下匹配,上方规则优先级更高,并列出了 DOMAIN、GEOIP、RULE-SET 和 MATCH等类型,详见 mihomo Route Rules。

可复制的最小 config.yaml:先替换三处再加载

下面是一份用于验证规则链路的最小模板。它的配置结构包含 mixed-port、mode、proxy-providers、proxy-groups、rules 和 rule-providers。示例中的订阅地址、规则集地址和测试域名都是占位内容,必须替换;不能直接把占位地址当作真实服务使用。

mixed-port: 7890
mode: rule
log-level: info
allow-lan: false

proxy-providers:
  my-subscription:
    type: http
    url: https://替换为你的订阅地址
    path: ./providers/my-subscription.yaml
    interval: 86400

proxy-groups:
  - name: Proxy
    type: select
    use:
      - my-subscription
    proxies:
      - DIRECT

rule-providers:
  test-domain:
    type: http
    behavior: domain
    format: yaml
    path: ./rule-providers/test-domain.yaml
    url: https://替换为真实的域名规则文件地址
    interval: 86400

rules:
  - DOMAIN,example.com,DIRECT
  - DOMAIN-SUFFIX,example.org,Proxy
  - RULE-SET,test-domain,Proxy
  - MATCH,Proxy
必须替换的字段替换成什么判定标准
proxy-providers.url你实际使用的订阅地址客户端能下载并解析订阅,且代理组中出现可选节点
rule-providers.test-domain.url实际可访问的规则文件地址规则提供者状态显示已加载,而不是下载失败或格式错误
Proxy可由你控制的代理组名称rules 中的目标名称与 proxy-groups.name 完全一致

官方快速配置示例同时展示了代理提供者、代理组、规则提供者和最终 MATCH 规则的组合方式,可对照 mihomo Quick configuration。如果你的客户端已经自动生成了代理组,不要重复创建同名组;先查看现有配置,再决定是修改组名还是修改 rules 的目标。

规则类型怎么选:精确域名、后缀、关键词还是 IP

类型匹配对象适合场景使用提醒
DOMAIN完整域名只处理一个明确域名范围窄,适合写例外
DOMAIN-SUFFIX域名及其后缀范围处理一个主域名下的多个子域名范围比 DOMAIN 更宽,要注意提前命中
DOMAIN-KEYWORD域名中的关键词域名变化较多、只能按关键词归类可能误匹配,建议先用精确规则验证
DOMAIN-REGEX符合表达式的域名需要模式匹配的特殊场景表达式应先用少量域名测试
GEOSITE预设站点分类按已有站点集合处理分类内容取决于所用数据文件
IP-CIDR/IP-CIDR6IPv4 或 IPv6 网段请求目标直接表现为 IP 地址段不要用 IP 规则代替域名规则
GEOIP目标 IP 的地区代码按 IP 地理归属处理IP 归属不等同于网站运营地

新手可以先用两条简单规则确认链路:

rules:
  - DOMAIN,example.com,DIRECT
  - DOMAIN-SUFFIX,example.org,Proxy
  - MATCH,Proxy

example.com 和 example.org 只是示例域名,请替换为你确实要测试的域名。不要同时加入大量关键词、地区和规则集,否则即使出现异常,也很难判断是哪一条规则提前命中。各类规则及其参数以 mihomo Route Rules 文档为准。

RULE-SET 怎么配置:先确认 behavior,再确认 format

RULE-SET 只是引用入口,真正决定能否加载的是 rule-providers。官方文档列出 domain、ipcidr、classical 三种 behavior,以及 yaml、text、mrs 三种 format。填写时要按规则文件的实际内容选择,不能只看文件扩展名。详情见 mihomo Rule-Providers。

规则文件内容behavior常见 format适用说明
域名集合domaintext、yaml 或 mrs每项主要是域名,适合域名类集合
IP 网段集合ipcidrtext、yaml 或 mrs每项主要是 IPv4 或 IPv6 网段
完整 Mihomo 规则行classicalyaml 或 text文件内含 DOMAIN、IP-CIDR 等完整规则行

Text 规则集可以是每行一个域名或网段,例如:

# domain 格式的 text 文件
example.com
example.org
sub.example.net

Classical 文件则应包含完整规则行,例如:

# classical 格式的 text 文件
DOMAIN,example.com
DOMAIN-SUFFIX,example.org
IP-CIDR,192.0.2.0/24,no-resolve

MRS 是二进制规则集格式。官方文档说明,mrs behavior 当前只支持 domain 和 ipcidr;如果手头是 YAML 或 Text 文件,可以使用 Mihomo 的 convert-ruleset 命令转换为 MRS,命令格式应以当前版本帮助信息为准。不要把包含完整规则行的 classical 文件直接标记为 MRS。

no-resolve 到底做什么:避免把 IP 规则误解成域名规则

no-resolve 的作用是:当域名请求开始匹配目标 IP 类规则时,不触发 DNS 解析来检查解析后的目标 IP 是否命中该规则。官方路由文档明确说明,目标 IP 规则在域名匹配过程中可能触发 DNS 解析,而添加 no-resolve 可以跳过这一步。

rules:
  - IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
  - GEOIP,CN,DIRECT
  - MATCH,Proxy

因此,GEOIP,CN,DIRECT 不加 no-resolve 时,域名请求可能需要先解析,再根据目标 IP 的地区归属继续判断。是否添加应取决于你的规则目的:如果规则只想处理已经明确出现的 IP,使用 no-resolve;如果希望域名请求也通过解析后的 IP 参与 GEOIP 判断,就不要随意添加。

DNS、Fake-IP 和 TUN 如何影响规则:不要只看系统解析结果

DNS 负责解析和返回地址,rules 负责决定请求交给哪个目标,TUN 则决定哪些系统流量能被 Mihomo 接收到。三者不是同一个配置层级,只改 rules 不能保证没有进入 Mihomo 的应用流量也会被处理。

官方 DNS 文档显示,enhanced-mode 可使用 fake-ip 或 redir-host;Fake-IP 模式下使用 Fake-IP 地址范围。因此,假如系统工具看到 198.18.x.x,不能仅凭这一结果判断 DNS 出错或规则失效。先查看 Mihomo 的连接信息和实际代理目标,再临时使用 redir-host 做对照。DNS 字段说明见 mihomo DNS configuration。

TUN 配置中的 auto-route 用于自动设置路由,dns-mode 可设置为 disabled、native 或 hijack,dns-hijack 用于将符合条件的 DNS 连接导入内部 DNS 模块。不同系统对防火墙、严格路由和 DNS 劫持的要求不同,修改前应对照 mihomo TUN configuration。

最小验证顺序是:先用 mixed-port 让浏览器或应用明确接入;确认 rules 能命中后,再开启 TUN;最后再调整 Fake-IP、DNS 劫持或严格路由。一次只改一个变量,才能知道问题来自规则、DNS 还是流量没有进入 Mihomo。

怎样查看命中的规则:打开日志和本地 API

如果客户端界面没有直接显示命中规则,可以在配置中临时加入本地控制 API 和 debug 日志:

log-level: debug
external-controller: 127.0.0.1:9090
secret: "请替换为本地管理密钥"

external-controller 默认可监听本地地址,secret 用于 API 访问认证。不要把控制地址改成公网监听,也不要把密钥留空后暴露到局域网或互联网。字段说明见 mihomo General configuration。

  1. 保存配置并重新加载,先确认内核没有 YAML 解析错误。
  2. 打开客户端的连接列表,访问一个你明确写入 DOMAIN 或 DOMAIN-SUFFIX 的测试域名。
  3. 在连接详情中查看目标地址、进程或连接元数据,以及最终使用的代理组;重点确认它是否进入了预期的 Proxy 或 DIRECT。
  4. 如果需要通过 API 检查,可使用本机地址访问 http://127.0.0.1:9090/connections;若配置了密钥,按客户端要求发送认证信息。
  5. 检查规则集时访问 /providers/rules,看 provider 名称是否存在、更新时间和状态是否正常。

Mihomo API 文档列出了 /connections、/logs 和 /providers/rules 等接口。实际面板是否提供这些按钮,取决于你使用的客户端界面;接口说明可查看 mihomo APIs。

常见故障按这个顺序排查

  1. 规则完全不生效:先看 mode: rule 是否存在。若当前为 global 或 direct,先切换到 rule 模式。
  2. 配置加载失败:用 pre 中的原始 YAML 检查同级缩进、冒号、列表短横线和重复键。不要把配置片段放在普通段落中复制,连续空格和层级必须保留。
  3. 代理组不存在:将 rules 中的目标名称与 proxy-groups.name 逐字比较。Proxy、proxy 和带尾随空格的名称不是同一个值。
  4. 规则集下载失败:先检查 URL 是否能访问,再核对 type、path、behavior、format 和 interval。官方文档说明更新间隔单位为秒。
  5. 规则集已下载但不匹配:检查文件实际内容。域名集合用 domain,网段集合用 ipcidr,完整规则行才考虑 classical。
  6. 指定规则被另一条规则覆盖:把更精确的 DOMAIN 例外移到宽泛的 DOMAIN-SUFFIX、GEOSITE 或 RULE-SET 之前。
  7. 只有部分应用不受规则控制:确认应用使用了 Mihomo 的 mixed-port,或确认 TUN 已接管该系统流量。Windows、macOS、Android 的 TUN 和 DNS 行为可能不同,应按当前客户端和系统设置检查。
  8. Fake-IP 下判断错误:不要只用系统 DNS 命令的返回地址下结论,先查看连接列表、debug 日志和规则提供者状态,再用 redir-host 进行单变量对照。

本站是第三方使用指南,与相关项目及开发者无隶属关系;文中字段和行为以已链接的官方 Mihomo 文档为准,客户端界面差异和未公开字段均未核实。

完成最小配置后,再逐步增加规则

  1. 备份当前配置文件,保留一份能正常启动的副本。
  2. 确认 mode: rule,并让一个明确的代理组名称承担最终目标。
  3. 只加入一条 DOMAIN、一条 DOMAIN-SUFFIX 和末尾 MATCH,确认连接列表显示预期目标。
  4. 再加入一个 domain 类型的 RULE-SET,核对 provider 状态和命中结果。
  5. 需要处理 IP 时,再增加 IP-CIDR、GEOIP 或 IP-CIDR6,并根据是否允许 DNS 解析决定是否使用 no-resolve。
  6. 最后才调整 DNS 的 Fake-IP、redir-host、TUN、dns-mode 或 dns-hijack,避免同时改变多个变量。

如果规则已经能命中,但应用仍然连接失败,可以继续查看本站的连接问题排查;如果还没有完成客户端基础接入,可先浏览设备配置指南和更多使用指南。

常见问题

Mihomo 规则为什么写了却不生效?

先检查是否为 mode: rule;global 和 direct 模式不会按普通 rules 进行规则匹配。然后核对 rules 目标是否对应现有 proxy-groups.name,再检查宽泛规则是否排在精确规则之前,最后确认 MATCH 位于末尾。

DOMAIN 和 DOMAIN-SUFFIX 应该怎么选?

只处理一个完整域名时使用 DOMAIN;需要覆盖主域名及其子域名时使用 DOMAIN-SUFFIX。若只是写一个例外,优先使用范围更窄的 DOMAIN,并把它放在较宽泛规则之前。

RULE-SET 的 behavior 和 format 怎么填写?

先看规则文件实际内容:域名集合通常使用 domain,IP 网段集合使用 ipcidr,包含完整规则行的文件才考虑 classical;format 再按实际文件选择 yaml、text 或 mrs。官方文档说明 mrs behavior 当前只支持 domain 和 ipcidr。

no-resolve 是什么意思?

它表示目标 IP 类规则在处理域名请求时不触发 DNS 解析来检查目标 IP。需要让域名解析后的 IP 参与 GEOIP 等判断时,不要为了省事随意添加 no-resolve。

Fake-IP 模式看到 198.18.x.x,是 DNS 出错了吗?

不一定。Fake-IP 模式会使用专门的地址范围返回映射地址。应先查看 Mihomo 连接列表或 debug 日志中的实际规则和代理组,再临时切换 redir-host 对照,不能只依据系统解析命令的结果判断。

规则集下载成功但仍然不匹配怎么办?

检查文件真实内容与 behavior、format 是否一致。域名集合、IP 网段集合和 classical 完整规则行的写法不同;同时确认 RULE-SET 中引用的 provider 名称与 rule-providers 下的键名完全一致。

相关阅读

参考资料

  1. General configuration - mihomo docs
  2. Route Rules - mihomo docs
  3. Rule-Providers - mihomo docs
  4. proxy-groups configuration - mihomo docs
  5. DNS configuration - mihomo docs
  6. TUN - mihomo docs
  7. Quick configuration - mihomo docs
  8. APIs - mihomo docs