Clash 配置规则不生效?从规则顺序到代理组的完整排查教程
简答:Clash 配置规则要同时连接代理组、规则集和 rules:先确认名称完全一致,再按“具体规则在前、MATCH 兜底在后”排列,最后检查客户端内核、DNS 和 TUN 是否支持当前字段。
定义:Clash 配置规则是根据域名、IP、进程或网络类型匹配请求,再把请求交给 DIRECT、代理节点或代理组处理的一组 YAML 路由条件。
先看这张表:Clash 规则为什么不生效
本站是第三方使用指南站,与 Clash、mihomo 及相关开发者无隶属关系。下面的字段和匹配逻辑以已查阅的 mihomo 配置文档为参考;不同客户端可能使用不同内核,字段支持和界面入口应以客户端实际提示为准。
| 现象 | 优先检查 | 正常判定 |
|---|---|---|
| 配置无法启动 | YAML 缩进、冒号、列表短横线、字段拼写 | 客户端能加载配置,日志没有 YAML 解析错误 |
| 规则命中但没有流量 | rules 里的策略名称是否存在于 proxy-groups | 策略名称与代理组 name 逐字一致 |
| 所有请求都走同一路径 | 规则顺序和末尾 MATCH | 具体 DOMAIN 或 RULE-SET 出现在 MATCH 前 |
| 规则集加载失败 | url、path、behavior、format 和网络访问 | 规则集状态显示已下载或已加载,文件格式与 behavior 对应 |
| 域名分流异常 | DNS enhanced-mode、fake-ip-filter、nameserver-policy | 连接详情中的域名、解析结果和命中规则符合预期 |
官方文档说明,路由规则按从上到下的顺序匹配,顶部规则优先级更高;mihomo 路由规则文档还列出了 DOMAIN、IP-CIDR、RULE-SET 和 MATCH 等规则类型。因此,最快的修复动作是:先把末尾的 MATCH 暂时保留为兜底,再把你要优先处理的域名规则放到它前面。
Clash 配置规则的整体结构:五部分如何连接
一个可维护的配置通常可以拆成五层:proxies 保存节点或出站代理;proxy-groups 把节点组织成可选择、可测速或可自动切换的策略组;rule-providers 声明远程或本地规则集;rules 决定请求如何匹配;dns 负责域名解析与分流配合。
规则本身不会自动产生节点。比如 rules 写成 DOMAIN-SUFFIX,example.com,Proxy,其中 Proxy 必须是已有节点名或代理组名,否则就会出现策略找不到、规则无法按预期执行等问题。代理组的 name、rules 最后一列和 rule-providers 被 RULE-SET 引用的名称,都建议复制粘贴,避免大小写、空格或标点不一致。
以下模板只使用占位符,适合先验证结构。把 替换为你的节点名、替换为可访问的规则文件地址 和域名改成实际内容后,再导入客户端:
proxies:
- name: "节点A"
type: "填写实际协议"
server: "替换为节点服务器"
port: 443
proxy-groups:
- name: "Proxy"
type: select
proxies:
- "节点A"
- DIRECT
rule-providers:
my-domain:
type: http
url: "替换为可访问的规则文件地址"
path: ./rules/my-domain.yaml
interval: 86400
behavior: domain
format: yaml
rules:
- DOMAIN-SUFFIX,example.com,Proxy
- RULE-SET,my-domain,Proxy
- GEOIP,CN,DIRECT
- MATCH,Proxy
上例的关键关系是:my-domain 在 rule-providers 中声明,随后由 RULE-SET,my-domain,Proxy 调用;Proxy 又必须在 proxy-groups 中存在。官方文档将 rule-provider 的 type、url、path、interval、behavior 和 format 分开定义,详情可查看 mihomo Rule-Providers 配置文档。
Rule、Global、Direct 三种模式怎么选
| 模式 | 作用 | 适合场景 | 注意事项 |
|---|---|---|---|
| Rule | 按 rules 从上到下匹配,再交给对应策略 | 需要国内直连、指定域名代理和规则集分流 | 最依赖规则顺序、代理组名称和 DNS 配合 |
| Global | 将请求统一交给当前选中的全局策略 | 临时验证节点或判断问题是否来自规则 | 不能体现每条分流规则的效果 |
| Direct | 请求直接连接,不经过代理策略 | 排查本地网络、局域网设备或直连可用性 | 如果目标服务需要代理,直连失败并不等于规则错误 |
日常配置通常先使用 Rule 模式。排查时可以短暂切换 Global 或 Direct 做单变量对照:如果 Global 能访问而 Rule 不能,重点看规则顺序、策略名称和 DNS;如果 Direct 与 Global 都不能访问,优先检查节点、系统网络或目标服务本身。
Rule 模式下,具体规则应放在通用规则之前。例如 DOMAIN,api.example.com,Proxy 应放在 DOMAIN-SUFFIX,example.com,DIRECT 前面,否则前面的后缀规则可能先匹配。MATCH,Proxy 匹配所有未被前面规则处理的请求,因此应放在 rules 末尾。
常用规则类型与可直接改写的案例
- DOMAIN:匹配完整域名,例如
DOMAIN,api.example.com,Proxy,适合只指定一个域名。 - DOMAIN-SUFFIX:匹配域名后缀,例如
DOMAIN-SUFFIX,example.com,Proxy,适合一个主域名及其子域名。 - DOMAIN-KEYWORD:匹配域名中包含的关键词,例如
DOMAIN-KEYWORD,video,Proxy,范围较宽,容易误匹配,建议谨慎使用。 - DOMAIN-REGEX:使用正则表达式匹配域名,例如
DOMAIN-REGEX,^img[0-9]+\.example\.com$,Proxy,适合明确知道正则边界的用户。 - IP-CIDR:匹配 IPv4 网段,例如
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve;no-resolve可避免为目标 IP 规则额外触发域名解析。 - GEOIP:按 IP 地理库代码匹配,例如
GEOIP,CN,DIRECT。它依赖 IP 数据库,不能替代所有域名规则。 - RULE-SET:调用 rule-providers 中已经声明的规则集,例如
RULE-SET,my-domain,Proxy。 - MATCH:匹配所有剩余请求,通常作为最后一条兜底规则。
mihomo 的官方路由规则页面同时列出了 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、DOMAIN-REGEX、IP-CIDR、GEOIP、RULE-SET 和 MATCH 等类型,具体参数和可用规则应以路由规则参考为准。
常见需求写法
- 国内直连、其他请求交给代理:
GEOIP,CN,DIRECT后接MATCH,Proxy。这只是基础示例,实际效果还会受 DNS 和 IP 数据库影响。 - 指定域名固定走某策略:
DOMAIN-SUFFIX,example.com,Work,并确保 proxy-groups 中确实存在名为Work的策略组。 - 局域网直连:
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve,再按实际网段补充其他私有地址。 - 广告域名拒绝:
RULE-SET,ad-domain,REJECT,前提是规则集的 behavior、format 和内容类型互相匹配,且当前内核支持该策略。 - 流媒体单独分流:先在 rule-providers 声明对应域名或经典规则集,再用
RULE-SET,media,Media调用,避免把大量域名直接堆在主配置中。
rule-providers:YAML、text 和 MRS 怎么区别
rule-providers 用来集中管理规则文件,常见 type 包括 http、file 和 inline。远程规则通常需要 url,本地规则使用 file 和 path,inline 则直接在 payload 中写规则。官方文档还要求根据文件内容选择 behavior:domain 用于域名集合,ipcidr 用于 IP 网段,classical 用于包含多种传统规则类型的集合。
| format | 适用内容 | 注意事项 |
|---|---|---|
| yaml | 结构化 YAML 规则 | 便于阅读和编辑,但大型规则集可能更占资源 |
| text | 按行保存的文本规则 | 必须与实际规则内容和 behavior 对应 |
| mrs | 预编译规则集 | 官方文档注明其 behavior 目前支持 domain 和 ipcidr,不应直接套用于 classical |
规则集下载失败时按以下顺序检查:第一,直接在浏览器或命令行打开 url,确认地址可访问;第二,确认 path 所在目录允许客户端写入;第三,确认 behavior 与规则文件内容一致;第四,确认 format 与文件实际格式一致;第五,查看客户端日志是否出现证书、超时、重定向或解析错误。不要为了“能加载”随意把 behavior 改成 classical,因为格式不匹配可能导致规则内容被忽略。
DNS、Fake-IP、嗅探与分流异常的排查
DNS 不只是“把域名变成 IP”。在启用 Fake-IP、域名嗅探或 TUN 时,解析方式会影响客户端能否看到原始域名,进而影响 DOMAIN、RULE-SET 和 IP-CIDR 规则的命中。mihomo 文档列出了 enhanced-mode、fake-ip-filter、nameserver-policy、proxy-server-nameserver 和 respect-rules 等 DNS 字段,具体行为可查看 mihomo DNS 配置文档。
- 先关闭复杂的自定义 DNS 选项,保留客户端能正常启动的基础配置,确认普通域名可以解析。
- 在连接详情或日志中查看请求显示的是域名还是 Fake-IP;如果 DOMAIN 规则完全不命中,检查是否由 TUN、嗅探或 DNS 模式改变了可见信息。
- 如果只有某些局域网域名打不开,检查 fake-ip-filter 是否包含局域网后缀,并确认局域网请求是否应使用 DIRECT。
- 如果规则依赖 nameserver-policy 或 respect-rules,逐项启用并测试,不要同时修改 DNS、rules 和代理组,否则无法判断是哪一项造成变化。
判定标准不是“看到了一个 DNS 地址”,而是同一个域名在连接详情中的解析、命中规则和最终策略能够互相对应。若客户端没有提供连接详情,只能通过日志和单域名测试做有限判断,不能把一次访问结果当作完整分流结论。
不同 Clash 客户端与内核的兼容边界
“Clash 配置规则”并不等于所有客户端都支持同一套字段。传统 Clash、Clash Meta、mihomo 以及基于它们封装的 Windows、macOS、Android、iOS 客户端,可能在规则类型、规则集格式、TUN、Fake-IP、Network Extension、控制器和界面入口上存在差异。本文模板以 mihomo 语法为主,未核实每个客户端对全部字段的兼容性。
实际导入前建议先确认三件事:一是客户端显示的内核名称;二是配置校验是否报告未知字段;三是当前平台是否允许 TUN 或 VPN 权限。配置文件能导入,不代表所有规则已经生效;尤其是 rule-providers、MRS、TUN 和 DNS 相关字段,应以当前客户端的内核文档和日志为准。
如果你使用的是基于 mihomo 的图形客户端,可先用最小配置验证:只保留一个节点、一个 select 代理组、一条 DOMAIN 规则和一条 MATCH 规则。确认这套结构能启动并命中后,再逐步加入远程规则集、DNS、Fake-IP 和 TUN。这样比一次导入数百条规则更容易定位兼容问题。
规则不生效的完整排查顺序
- 备份原配置。复制一份配置文件,后续只修改副本,避免把可用订阅配置改坏。
- 先验证 YAML。检查缩进是否使用空格,列表项是否以短横线开头,带特殊字符的策略组名称是否使用引号。配置无法启动时,先不要排查网络。
- 核对名称。逐字检查 rules 最后一列、proxy-groups 的 name、rule-providers 的键名以及 RULE-SET 引用名。名称不一致时,规则可能无法交给预期策略。
- 缩小规则集。暂时移除远程 rule-providers,只保留一条 DOMAIN 和一条 MATCH。如果最小配置能命中,问题大概率在规则集地址、格式或内容。
- 验证顺序。把测试域名写成最具体的 DOMAIN 规则并放在前面,再放 DOMAIN-SUFFIX、GEOIP 和 MATCH。查看连接详情中的实际命中规则。
- 做模式对照。用 Direct、Global、Rule 分别测试同一个域名。Direct 失败说明可能是本地网络或目标服务问题;Global 成功而 Rule 失败,优先检查规则链;Rule 与 Global 都失败,再检查节点和 DNS。
- 最后检查 TUN 和 DNS。如果浏览器能走代理而其他应用不行,检查 TUN 权限、系统代理状态、DNS 模式和应用是否绕过代理。不要在没有日志或连接详情的情况下直接判断为节点问题。
完成每一步后只修改一个变量,并记录“测试域名、当前模式、命中规则、策略名称、是否成功”。这比连续更换节点、DNS 和规则集更容易得到可复现结论。
安全提醒:订阅地址、远程规则和管理端口
订阅地址和远程规则地址可能包含访问凭据,不要直接发布到公开仓库、截图或聊天群。rule-providers 会定期拉取远程内容,使用前应确认来源可信,并在客户端日志中检查实际下载地址。
如果配置了 allow-lan、external-controller 或类似管理入口,应确认监听地址、访问范围和 secret 设置。mihomo 入站文档特别提醒,监听 0.0.0.0 代表绑定所有网络接口;只有在明确了解防火墙和访问控制的情况下才应使用。详情可查看 mihomo 入站配置文档。
常见问题
Clash 配置规则必须放在配置文件最后吗?
不是。rules 通常位于配置文件的规则区域,关键是规则按从上到下匹配。具体规则应放在通用规则前,MATCH 通常放在最后作为兜底。
为什么写了 DOMAIN 规则,却还是走了其他策略?
先检查域名是否与实际请求完全一致,再检查这条 DOMAIN 是否被前面的规则抢先匹配,最后确认 rules 中填写的策略名称是否与 proxy-groups 的 name 完全一致。
RULE-SET 和 rule-providers 是什么关系?
rule-providers 负责声明规则集的来源、保存路径、更新间隔和格式;RULE-SET 负责在 rules 中调用这个规则集。两者的键名必须一致,例如声明 my-domain 后使用 RULE-SET,my-domain,Proxy。
rule-providers 中的 behavior 和 format 可以随便改吗?
不建议。behavior 应与规则内容对应,domain 用于域名集合,ipcidr 用于 IP 网段,classical 用于多种传统规则;format 也应与实际文件格式一致。MRS 不能直接按 classical 使用,具体以 mihomo 文档为准。
Clash 的 Rule、Global、Direct 模式有什么区别?
Rule 按规则匹配并交给策略,Global 统一使用当前全局策略,Direct 直接连接。排查时可用 Global 和 Direct 做对照,日常需要分流时通常使用 Rule。
规则配置能在所有 Clash 客户端中通用吗?
不能保证。不同客户端可能使用不同内核,对 TUN、DNS、Fake-IP、MRS、规则类型和管理字段的支持不同。导入前应确认内核名称,并查看配置校验和运行日志。
规则不生效时应该先换节点吗?
不建议先换节点。应先用最小配置检查 YAML、策略组名称、规则顺序和规则集加载状态,再用 Direct、Global、Rule 做对照;只有确认规则链正常后,才适合继续判断节点或网络问题。