Clash 规则集(Rule Set)是客户端实现流量分流的核心机制,它决定了哪些流量走代理、哪些流量直连,以及如何处理域名解析。许多用户在使用 Clash 核心(如 Clash.Meta/Mihomo)时,常遇到规则不生效、域名解析错误(DNS 泄漏)或规则冲突导致连接失败的问题。
本文针对“Clash规则集配置”这一需求,详细拆解 YAML 配置文件中的规则集模块,解释 `payload`、`type`、`interval` 等关键参数的作用,并提供一套可复用的配置逻辑,帮助你建立稳定、高效的分流体系。
规则集模块的核心参数解析
在 Clash 的配置文件中,规则集通常定义在顶层的 `rule-providers` 字段下。理解这些参数是正确配置的前提。
| 参数名 | 类型 | 说明 | 配置建议 |
|---|---|---|---|
| `type` | string | 规则集的来源类型。常见值包括 `http`、`file`、`inline`。 | `http` 用于远程订阅更新;`file` 用于本地文件;`inline` 用于直接写入配置。 |
| `path` | string | 规则集存储的文件路径。 | 使用相对路径(如 `./rules/xxx.yaml`)或绝对路径。若为 `http` 类型,此路径为下载后的存储位置。 |
| `url` | string | 仅当 `type` 为 `http` 时必填。提供规则的远程 URL。 | 确保 URL 可公开访问且返回标准的 YAML 格式数据。 |
| `interval` | int | 仅当 `type` 为 `http` 时必填。自动更新的时间间隔(秒)。 | 建议设置为 3600 到 86400 之间,避免过于频繁请求导致被封或服务器压力过大。 |
| `behavior` | string | 规则匹配的行为模式。常见值:`classical`、`ipcidr`、`domain`、`geosite`、`geoip`。 | `classical` 为经典正则/精确匹配;`domain` 用于域名匹配;`geosite`/`geoip` 用于地理位置匹配。 |
| `format` | string | 仅当 `type` 为 `http` 时可选。指定下载内容的格式。 | 通常为 `yaml` 或 `text`。若远程源返回的是纯文本域名列表,需设为 `text`。 |
为什么需要区分这些参数?
如果 `type` 配置错误,客户端将无法拉取规则;如果 `interval` 设置过短,可能导致远程源拒绝服务;如果 `behavior` 不匹配规则内容的格式(例如用 `domain` 去匹配 IP 段),规则将完全失效。
🔥 推荐:适合 Clash 用户的稳定节点方案
如果你正在使用 Clash,建议优先选择订阅更新稳定、节点延迟较低、规则配置清晰的方案,避免免费节点失效和速度波动。
如何编写正确的规则集文件
规则集文件本身也是一个 YAML 文件,其内容结构取决于 `behavior` 参数的设定。常见的规则集类型包括域名集、IP 集和地理位置集。
1. 域名规则集(Domain)
域名规则集用于匹配主机名。在 `behavior` 为 `domain` 或 `classical` 时,文件内容应包含域名列表。
“`yaml
payload:
• DOMAIN-SUFFIX,google.com
• DOMAIN-KEYWORD,github
• DOMAIN,apple.com
• REGEX,^
“`
* `DOMAIN-SUFFIX`:匹配后缀。例如 `google.com` 会匹配 `google.com`、`www.google.com`、`mail.google.com`,但不会匹配 `notgoogle.com`。
* `DOMAIN-KEYWORD`:匹配包含特定关键词的域名。
* `REGEX`:使用正则表达式匹配域名,灵活性最高但性能开销较大,建议谨慎使用。
2. IP 规则集(IPCIDR / GeoIP)
IP 规则集用于匹配目标 IP 地址。通常用于绕过国内 IP 或屏蔽特定广告 IP。
“`yaml
payload:
• IP-CIDR,192.168.0.0/16,no-resolve
• IP-CIDR,10.0.0.0/8,no-resolve
• GEOIP,CN,no-resolve
“`
* `IP-CIDR`:标准 CIDR 格式,如 `1.1.1.1/32`。
* `GEOIP`:基于地理位置数据库的匹配,通常依赖客户端内置的 GeoIP 数据库。
* `no-resolve`:关键参数。当规则中包含 IP 时,必须加上 `no-resolve`。这告诉客户端不要对目标 IP 进行 DNS 查询,直接建立连接。如果遗漏此参数,客户端会尝试解析一个 IP 地址,导致错误。
3. 地理位置规则集(GeoSite / GeoIP)
对于使用 `geosite` 或 `geoip` 行为的规则集,通常不需要手动编写 `payload`,而是由客户端根据 `url` 拉取并解析。但如果你使用 `inline` 类型,需要知道其格式通常由第三方数据库工具生成,格式较为特殊,不建议新手手动编写。
在 Clash 配置中引用规则集
定义好 `rule-providers` 后,需要在 `rules` 字段中引用它们。引用规则集时,只需使用 `{name}` 语法,无需展开具体内容。
“`yaml
rule-providers:
anti-ad:
type: http
url: “”
interval: 86400
behavior: classical
format: yaml
path: ./providers/anti-ad.yaml
domestic-geo:
type: http
url: “”
interval: 7200
behavior: geoip
format: yaml
path: ./providers/domestic-geo.yaml
rules:
• RULE-SET,anti-ad,REJECT
• RULE-SET,domestic-geo,DIRECT
• MATCH,PROXY
“`
配置逻辑解析:
• 定义提供者:首先通过 `rule-providers` 定义数据源。`anti-ad` 使用经典行为(支持正则和域名),`domestic-geo` 使用 GeoIP 行为。
• 引用规则:在 `rules` 中,`RULE-SET,anti-ad,REJECT` 表示将 `anti-ad` 提供者中的所有规则展开,并应用 `REJECT`(拒绝连接)动作。
• 顺序重要性:规则从上到下匹配,一旦匹配成功即停止。因此,更具体、更优先的规则应放在前面。
常见配置错误与排查方法
即使配置看似正确,规则集也可能不生效。以下是常见问题及其原因。
| 问题现象 | 可能原因 | 排查与解决方法 |
|---|---|---|
| 规则集显示加载成功,但规则不生效 | 1. `behavior` 与规则内容不匹配。 2. 规则优先级低于其他通用规则。 |
1. 检查规则集文件内容格式是否与 `behavior` 一致(如 IP 规则是否包含 `no-resolve`)。 2. 调整 `rules` 中的顺序,将 `RULE-SET` 放在更具体的规则之前或之后,视需求而定。 |
| 客户端启动报错 `invalid rule provider` | 1. 远程 URL 返回非 YAML 格式。 2. YAML 语法错误(缩进、特殊字符)。 |
1. 在浏览器中打开 `url`,确认返回内容是否为合法的 YAML。 2. 使用 YAML 验证工具检查 `path` 指向的本地文件语法。 |
| 域名解析泄漏(DNS Leak) | 1. 规则中缺少 `DNS` 相关规则。 2. `no-resolve` 缺失。 |
1. 确保对需要代理的域名添加了 `DNS-SET` 或 `RULE-SET` 并关联了正确的 DNS 策略。 2. 检查所有 IP 类规则是否都添加了 `no-resolve`。 |
| 规则更新失败 | 1. 远程 URL 不可访问。 2. `interval` 设置为 0 或极小值。 |
1. 检查网络是否能访问远程 URL。 2. 将 `interval` 设置为合理值(如 3600 秒以上)。 |
高级技巧:优化规则集性能与稳定性
1. 使用本地缓存减少延迟
通过设置 `path` 参数,Clash 会将远程规则集下载到本地文件。后续更新时,客户端会对比本地文件与远程文件的时间戳或内容哈希,仅在有变化时重新加载。这大大减少了启动时间和网络依赖。
2. 合并与精简规则集
过多的规则集会增加内存占用和匹配时间。
* 合并同类项:将多个功能相似的规则集(如多个广告拦截列表)合并为一个,减少 `rule-providers` 的数量。
* 去除冗余:定期清理规则集中重复或过期的条目。
3. 使用 `inline` 规则集处理少量规则
对于不需要频繁更新、数量极少的规则(如几个特定域名),建议使用 `inline` 类型,直接写在 `rules` 字段中,而不是创建独立的规则集文件。这样可以简化配置结构。
“`yaml
rules:
• DOMAIN-SUFFIX,example.com,PROXY
• IP-CIDR,1.1.1.1/32,DIRECT,no-resolve
• MATCH,PROXY
“`
验证规则集配置是否生效
配置完成后,务必进行验证,确保分流逻辑符合预期。
• 检查日志:在 Clash 客户端的日志界面,开启“调试”或“详细”日志模式。观察是否有 `rule match` 或 `rule set match` 的记录,确认规则是否被触发。
• 测试 DNS 解析:使用在线 DNS 泄漏检测工具,或直接在客户端中查看特定域名的解析 IP。如果域名应走代理,解析 IP 应为代理服务器的 IP 或远程 DNS 返回的结果;如果应直连,解析 IP 应为本地 DNS 返回的国内 IP。
• 实际访问测试:访问规则集定义的目标网站或服务,确认连接状态(代理、直连或拒绝)与预期一致。
通过正确配置规则集,你可以实现精细化的流量控制,提升网络体验并保障隐私安全。记住,规则集的维护是一个持续的过程,需根据网络环境和服务变化定期调整。