Clash Meta 设置规则:Rule 模式、策略组与 YAML 示例
简答:设置 Clash Meta 规则,先切到 Rule 模式,再让规则末尾的策略组名称与 proxy-groups 完全一致;自定义规则放在 MATCH 前,并通过连接日志或 /rules 接口确认实际命中。
定义:Clash Meta/Mihomo 规则是由匹配类型、匹配内容和目标策略组成的路由条件,内核按 rules 从上到下检查并将请求交给对应策略。
先按这三步设置:Rule、策略组、规则顺序
最快的设置路径是:第一步,把运行模式切换为 Rule;第二步,检查每条规则最后的策略名称是否真实存在于 proxy-groups 或可用代理中;第三步,把自定义规则放在 MATCH 之前,再通过连接日志验证。mihomo 文档将 rule 定义为基于规则匹配,global 为全局代理,direct 为全局直连。General configuration|mihomo docs
本文与 mihomo 项目及相关客户端开发者无隶属关系,Clash Meta、Mihomo 以及不同客户端的菜单名称可能存在差异,实际字段和界面应以当前客户端及内核文档为准。
| 先检查什么 | 正常表现 | 不正常时怎么改 |
|---|---|---|
| 运行模式 | 界面显示 Rule,或配置中为 mode: rule | 从 Global 或 Direct 切回 Rule |
| 策略组名称 | 规则末尾名称能在策略组中找到 | 复制实际名称,避免大小写、空格或符号不一致 |
| 规则顺序 | 具体域名、IP 或应用规则在 MATCH 前 | 将 MATCH 移到规则列表最后 |
| 流量入口 | 连接日志能看到正在测试的域名或应用 | 检查系统代理、代理端口、TUN 和权限 |
mihomo 官方文档说明,规则从上到下匹配,越靠前优先级越高;但 UDP 请求在代理节点不支持 UDP 时,可能继续向下匹配,因此不能只看规则文字,还要看实际日志。Route Rules|mihomo docs
一份可加载的 YAML 示例:节点和策略组都要对齐
下面模板包含一个最小的 proxies 节点占位,因此结构比只写“节点A”更完整。Node-Example 是示例节点名,必须替换为订阅中实际存在的节点名称;PROXY、Final 也是示例策略组名,规则中引用时必须保持完全一致。示例域名同样要替换为你要测试的域名。
mode: rule
proxies:
- name: Node-Example
type: socks5
server: proxy.example.com
port: 1080
proxy-groups:
- name: PROXY
type: select
proxies:
- Node-Example
- DIRECT
- name: Final
type: select
proxies:
- PROXY
- DIRECT
rules:
- DOMAIN,login.example.com,PROXY
- DOMAIN-SUFFIX,example.com,DIRECT
- DOMAIN-KEYWORD,ads,REJECT
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- PROCESS-NAME,app.exe,PROXY
- MATCH,Final
这个示例不能直接连接真实网络,因为服务器地址、端口和认证信息只是占位内容;它的用途是检查 YAML 层级、策略组引用和规则顺序。加载前至少替换 proxy.example.com、1080 和 Node-Example,或者直接把示例节点替换为订阅已有节点。
| 行或字段 | 作用 | 何时需要删改 |
|---|---|---|
mode: rule | 启用基于规则的分流 | 只想全局代理或全局直连时才改为其他模式 |
proxies | 定义可被策略组引用的出站节点 | 使用订阅节点时替换为订阅中的真实名称 |
name: PROXY | 定义规则可以引用的策略组名称 | 改名后必须同步修改所有规则末尾的名称 |
DOMAIN | 只匹配指定完整域名 | 需要覆盖子域名时改用 DOMAIN-SUFFIX |
DOMAIN-SUFFIX | 匹配域名及其子域名 | 只想匹配单个完整域名时不要扩大范围 |
PROCESS-NAME | 按进程名分流 | 必须替换为系统实际进程名或 Android 支持的包名 |
MATCH | 处理前面没有匹配到的请求 | 通常保留在最后,不能放在自定义规则前 |
策略组的 name 是必填项,proxies 可以引用出站代理或其他策略组。因此,规则末尾写了一个不存在的名称,即使规则格式本身正确,也可能无法按预期选择出站。proxy-groups configuration|mihomo docs
常见需求一行规则速查
下面的规则只展示语法和使用方向,不代表示例域名一定属于某种地区或服务。复制前先确认策略组名称、应用进程名和网段都符合自己的环境。
| 需求 | 示例规则 | 注意事项 |
|---|---|---|
| 局域网直连 | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | 需要覆盖其他私有网段时,另加 10.0.0.0/8 或 172.16.0.0/12 |
| 指定网站直连 | DOMAIN-SUFFIX,intranet.example.com,DIRECT | 会覆盖该域名及其子域名 |
| 指定网站交给代理组 | DOMAIN-SUFFIX,service.example.com,PROXY | PROXY 必须是真实存在的策略组 |
| 指定应用代理 | PROCESS-NAME,app.exe,PROXY | Windows 需替换实际 exe 名;Android 可使用支持的包名形式 |
| 拒绝广告关键词 | DOMAIN-KEYWORD,ads,REJECT | 匹配范围较宽,误拦截时改为 DOMAIN 或 DOMAIN-SUFFIX |
| 最终兜底 | MATCH,Final | 放在 rules 最后一行 |
DOMAIN 匹配完整域名;DOMAIN-SUFFIX 匹配域名后缀,例如 example.com 可以匹配 www.example.com,但不会匹配 content-example.com;DOMAIN-KEYWORD 按关键词匹配,范围更宽。Route Rules|mihomo docs
GEOSITE 适合调用 Geosite 中的域名分类,GEOIP 按目标 IP 的国家代码匹配,IP-CIDR 按 IP 网段匹配,RULE-SET 则调用外部或本地规则集。使用这些规则时,要确认对应 GEO 数据或 rule-provider 已存在,不能只复制规则行。Route Rules|mihomo docs Rule-Providers|mihomo docs
Clash Verge Rev 中怎样添加规则,避免订阅更新覆盖
如果你使用 Clash Verge Rev,官方文档给出的操作是:打开配置列表,右键订阅配置文件,选择“编辑规则”,再添加自定义规则。文档还区分了前置规则和后置规则:前置规则优先级更高,适合需要覆盖订阅默认规则的自定义分流;后置规则会在订阅规则之后执行。菜单名称可能随客户端版本变化,找不到相同文字时以当前版本界面为准。Clash Verge 自定义规则配置|Clash Verge Rev Docs
- 先复制或备份当前配置,避免误改后无法恢复。
- 在配置列表中定位正在使用的订阅配置文件。
- 右键打开“编辑规则”,确认规则编辑位置是前置还是后置。
- 把需要优先命中的 DOMAIN、IP-CIDR 或 PROCESS-NAME 规则放到前置区域。
- 确认自定义规则末尾的策略组名称与当前配置中的
proxy-groups.name完全相同。 - 保存并重新载入配置,打开连接日志测试目标网站或应用。
如果客户端没有“编辑规则”入口,或订阅更新后仍然覆盖手工修改,不要直接反复编辑下载文件。可以优先查看当前客户端是否提供覆写、扩展配置、规则集或脚本功能;这些功能的名称和合并方式必须以当前客户端文档为准,未核实的界面不要照搬其他客户端教程。
使用规则集时,需要先在 rule-providers 中定义名称、类型、地址、行为和格式,再在 rules 中用 RULE-SET,规则集名称,策略组 调用。官方文档列出的 provider 类型包括 http、file 和 inline,行为包括 domain、ipcidr 和 classical,填写时要与实际文件格式对应。Rule-Providers|mihomo docs
规则不生效:按流量入口、命中、策略组、DNS/TUN 排查
| 现象 | 优先检查层 | 可照做的判断方法 |
|---|---|---|
| 连接日志完全没有新请求 | 流量入口 | 访问测试域名后仍无日志,检查系统代理、代理端口或 TUN 权限 |
| 日志出现请求但命中 MATCH | 规则匹配 | 检查域名类型、规则顺序,并确认自定义规则在 MATCH 前 |
| 命中代理规则但没有连接 | 策略组 | 确认策略组存在、已选择节点且节点支持当前请求类型 |
| 浏览器正常,某个应用不走规则 | 系统代理或 TUN | 先用系统代理验证,再检查 TUN 是否接管该应用流量 |
| 域名规则看似正确但连接异常 | DNS | 检查 DNS 模式、解析结果及是否存在 DNS 劫持或解析循环 |
- 先确认入口。打开客户端连接日志,访问一个明确的测试域名。如果没有任何新连接,先不要改规则,检查系统代理是否指向客户端端口,或 TUN 是否已启用并获得系统权限。
- 再确认命中。如果日志中有请求,查看规则类型、匹配内容和目标策略。通过 API 时,使用运行中的控制地址访问
GET /rules;官方 API 文档列出了规则的索引、类型、匹配内容、目标策略以及可选的统计字段。APIs|mihomo docs - 再确认策略组。如果规则命中了,但没有建立连接,检查目标策略组是否为空、当前选择的节点是否可用,以及规则中的名称是否与策略组名称完全一致。
- 最后检查 DNS 和 TUN。DNS 的
enhanced-mode可使用fake-ip或redir-host;TUN 还涉及auto-route、dns-hijack、系统权限和网络接口。不要把“日志显示规则命中”直接等同于“目标连接一定成功”。DNS configuration|mihomo docs Tun|mihomo docs
推荐使用最小化验证:暂时只保留一条明确的 DOMAIN,test.example.com,PROXY 和最后的 MATCH,DIRECT,其中域名和策略组必须替换。若仍无日志,问题更可能在入口;若有日志但命中 MATCH,优先检查规则内容和顺序;若命中 PROXY 但连接失败,继续检查策略组、节点和 DNS。
DNS、TUN 与规则设置的边界
规则匹配和 DNS 解析是两个不同层面。mihomo 文档列出了 enhanced-mode、respect-rules、nameserver-policy 等 DNS 字段,其中 enhanced-mode 的可选值为 fake-ip 和 redir-host。修改 DNS 后,应分别测试域名解析、连接日志和实际访问,不要仅凭页面能打开就判断规则完全正确。DNS configuration|mihomo docs
TUN 的作用是接管更多系统流量,但不同系统、权限和应用的处理方式可能不同。官方示例包含 enable、auto-route、dns-hijack 和 strict-route 等字段;启用 TUN 后,如果某个应用仍无日志,应先确认 TUN 权限、自动路由和应用是否被排除,而不是继续堆叠规则。Tun|mihomo docs
参考资料与适用范围说明
本文只讲 Clash Meta/Mihomo 规则设置、订阅配置边界和连接排查,不提供未经核实的客户端版本、节点价格、服务状态或测速结论。不同客户端可能只支持部分字段,遇到解析错误时,应先根据当前客户端和内核版本检查字段是否可用。
核心依据包括 mihomo 官方的运行模式、规则、策略组、规则集、DNS、TUN 与 API 文档,以及 Clash Verge Rev 文档中的自定义规则操作说明。
常见问题
Clash Meta 设置规则时,Rule、Global、Direct 怎么选?
日常需要按域名或应用分流时选择 Rule;Global 会把流量交给全局代理策略;Direct 则是全局直连。若目标是测试自定义 rules,先使用 Rule,否则规则可能不会按预期参与匹配。
为什么规则写对了,还是命中 MATCH?
先确认测试请求确实进入当前内核,再检查 DOMAIN、DOMAIN-SUFFIX 或 PROCESS-NAME 的匹配内容。还要确认自定义规则位于 MATCH 之前,并且没有编辑了未实际启用的配置文件。
DOMAIN 和 DOMAIN-SUFFIX 有什么区别?
DOMAIN 匹配完整域名,例如 login.example.com;DOMAIN-SUFFIX 匹配域名及其子域名,例如 example.com 可以匹配 www.example.com,但不会匹配 content-example.com。
规则末尾的策略组名称必须和什么一致?
它必须与当前配置中 proxy-groups 的 name 完全一致,也可以是有效的出站代理名称。大小写、空格和符号都可能影响引用结果,建议直接复制客户端显示的名称。
订阅更新后,自定义规则为什么消失?
直接编辑订阅生成的 YAML 时,下一次更新可能重新写入配置。优先使用客户端提供的编辑规则、前置规则、覆写、规则集或脚本功能;如果当前客户端没有这些入口,就备份后在每次更新后重新检查 rules。
Mihomo API 的 /rules 能看什么?
官方 API 文档说明,GET /rules 可返回规则索引、规则类型、匹配内容和目标策略;部分响应还可能包含命中次数、最近命中时间等额外字段,具体以当前运行内核返回结果为准。
开启 TUN 后,某个应用仍然不走规则怎么办?
先确认 TUN 已启用并获得系统权限,再检查 auto-route、dns-hijack、应用排除项和系统网络接口。随后打开连接日志确认该应用请求是否进入内核;没有日志时,优先处理流量入口,不要先改规则顺序。