使用教程 精选 Clash 入门 VPN 区别 新手指南

Clash 自定义 Rule Providers 进阶配置与 GitHub 托管实践

2026年10月7日 更新于 2026年10月7日 约 12 分钟阅读

前言:为什么把规则拆成 Rule Providers?

如果规则数量不多,把域名和 IP 规则直接写进主配置的 rules 列表,确实简单直观。但当规则不断增加,或者你需要在多台设备、多个配置之间复用同一套规则时,主配置就会越来越难维护:更新一项规则要修改多个文件,规则来源也不容易追踪,误删或顺序错误还可能影响其他分流。

Rule Providers(规则提供者)允许 Clash 或 Mihomo 从单独的本地文件或远程地址加载一组规则,再通过 RULE-SET 在主规则中引用。你可以把规则集托管在 GitHub,每次维护时只更新规则文件,客户端则根据配置定期拉取。需要注意,Rule Providers 负责提供“匹配条件”,并不决定匹配后走哪个节点;代理策略仍由 rules 中的目标策略或规则动作确定。

适用场景

适合维护广告拦截、个人域名白名单、应用专用分流等可复用规则集。若规则只有几条且不需要独立更新,直接写入主配置通常更容易排查。

1认识 rule-providers 的关键字段

Rule Providers 在配置中的顶层键名是 rule-providers,其下每个名称都是一个规则集标识符。名称需要简洁、稳定,并与 RULE-SET 引用完全一致。下面是 Mihomo 常见的远程 YAML 规则集写法:

rule-providers: personal-sites: type: http behavior: domain format: yaml url: https://raw.githubusercontent.com/your-name/clash-rules/main/personal-sites.yaml path: ./ruleset/personal-sites.yaml interval: 86400 proxy: DIRECT rules: - RULE-SET,personal-sites,Proxy - MATCH,DIRECT
  • type:http 表示通过 URL 下载规则文件;file 表示从本地文件读取。远程规则需要网络可达,本地规则则需要确认客户端实际使用的配置目录中存在对应文件。
  • behavior:描述规则集的匹配类型。domain 用于域名类条目,ipcidr 用于 IP 网段,classical 用于包含完整 Clash 规则的规则集,例如 DOMAIN-SUFFIX 或 IP-CIDR。
  • format:文本 YAML 可指定 yaml;Mihomo 支持的二进制规则集通常使用 mrs。规则内容格式必须与实际文件一致,不能只把文件扩展名改成 .mrs 就当作二进制格式。
  • url 与 path:url 是远程文件地址,path 是下载后的本地缓存路径。建议为每个规则集使用独立文件名,便于查看缓存和定位错误。
  • interval:远程更新间隔以秒为单位。示例中的 86400 表示一天;若规则很少变动,可适当延长间隔,减少重复请求。
  • proxy:用于指定获取规则文件时采用的策略。是否配置以及可用写法取决于内核版本和客户端封装;如果当前内核不识别该字段,应先对照该版本的配置文档,而不是盲目复制。

兼容性提示

不同 Clash 分支和版本对字段、规则格式的支持并不完全相同。尤其是旧版内核可能不支持 Mihomo 的部分扩展;导入前应查看客户端当前实际运行的内核,而不能只依据客户端名称判断。

2设计规则文件并正确引用

编写规则文件前,先确定其 behavior。若规则集只存放域名,使用 domain 通常更清晰;若需要混合多种完整规则类型,则选择 classical。规则文件本身也要符合相应格式,不能把主配置中的整个 rules 列表不加调整地复制进一个域名型规则集。

域名型规则集示例

以下文件适用于 behavior: domain 和文本 YAML 格式。payload 中仅放域名条目,不需要在每行前面添加 DOMAIN-SUFFIX:

payload: - example.com - example.net - api.example.org

传统规则型规则集示例

如果希望一个规则集包含域名后缀、关键词或 IP 网段等完整规则,可使用 behavior: classical。每一项要按照 Clash 规则格式书写:

payload: - DOMAIN-SUFFIX,example.com - DOMAIN-KEYWORD,example-api - IP-CIDR,203.0.113.0/24,no-resolve

随后在主配置的 rules 中引用规则集名称,并在末尾指定命中的策略。例如 RULE-SET,personal-sites,Proxy 表示匹配该规则集后交给名为 Proxy 的策略组。目标名称必须确实存在于配置的代理或策略组中,否则可能在载入配置时出现验证错误。

规则的排列顺序非常重要:Clash 会按 rules 列表从上到下检查,先匹配到的规则会优先生效。因此,细分的规则集通常应放在更宽泛的域名、地理 IP 或最终兜底规则之前。若规则集放在 MATCH 之后,它就不会有机会参与匹配。

3将规则安全托管到 GitHub

GitHub 仓库适合保存纯文本规则文件和变更记录。创建仓库后,可以在仓库中建立例如 rules/personal-sites.yaml 的文件,将规则内容提交到默认分支。读取原始文件时,使用 raw.githubusercontent.com 地址,而不是仓库网页的普通浏览地址。地址中需要包含用户名、仓库名、分支名和文件路径,例如:

https://raw.githubusercontent.com/your-name/clash-rules/main/rules/personal-sites.yaml
  1. 先用浏览器验证链接:打开完整的 Raw 地址,确认页面直接返回 YAML 文本,而不是 GitHub 仓库页面、登录提示、404 或 HTML 错误内容。
  2. 使用稳定的分支和路径:不要频繁重命名文件或切换分支,否则配置中的 URL 会失效。若要调整目录结构,建议先提交新文件,再更新配置,最后移除旧文件。
  3. 保持仓库公开内容可分享:公共规则集不要写入订阅链接、账号凭据、私有域名清单或其他敏感信息。公开仓库中的文件可能被任何人访问和复制。
  4. 控制更新频率:规则有实质变化时再提交,不必为了刷新而频繁推送。配置中的 interval 也不宜设置得过短,以免产生无意义的请求。
  5. 先做语法检查再提交:检查缩进、冒号、逗号和规则类型,尤其留意 YAML 缩进必须一致。一次只改动少量内容,发生问题时更容易回退到上一个可用版本。

推荐的维护方式

把不同用途拆成清晰的文件,例如 ads.yaml、work.yaml 和 personal.yaml,并在提交说明中记录变更原因。规则集名称、GitHub 文件名和配置引用保持一致,可以显著降低长期维护成本。

GitHub Raw 服务并非专门为所有网络环境提供稳定保证。若客户端无法访问该地址,可先确认浏览器能否打开、DNS 是否正常,以及配置中的代理路径是否有效;对于需要长期稳定运行的环境,也可以考虑自有静态文件托管服务,并在验证内容与访问权限后替换 URL。不要为了临时解决下载问题,把未经验证的第三方规则地址直接加入配置。

4更新机制与常见故障排查

远程规则集通常由内核读取本地缓存,并按 interval 设定的周期尝试更新。不同客户端的更新按钮、缓存位置和错误提示可能不同:有些客户端可以在配置或规则提供者页面手动更新,有些则需要重新载入配置。手动更新失败时,先区分问题发生在“下载文件”还是“解析规则”,两者的排查方向并不相同。

  • 提示下载失败或超时:在浏览器中测试 Raw URL;再检查网络是否能访问 GitHub、系统时间是否正确,以及是否存在 DNS 或证书错误。若客户端本身的流量未经过可访问 GitHub 的策略,先确认获取规则文件时的网络路径。
  • 提示 404:核对用户名、仓库名、分支、目录和文件名的大小写。GitHub 路径区分大小写,文件移动后旧链接不会自动跳转到新 Raw 地址。
  • 提示 YAML 解析失败:打开远程文件检查返回内容是否为 YAML。常见原因包括缩进错误、使用了不匹配的 payload 结构、Raw URL 实际返回了错误页面,以及配置的 format 与文件格式不一致。
  • 配置能载入但规则不生效:确认 RULE-SET 中的名称与 rule-providers 键名完全相同,检查规则是否位于兜底规则之前,并确认匹配目标策略存在。还可以在客户端连接记录或规则命中信息中查看请求最终采用的规则。
  • 更新后行为异常:先恢复上一版规则文件或暂时禁用该规则集,再逐条核对最近的提交。不要同时更改规则内容、策略组和 DNS 设置,否则很难判断是哪项改动造成影响。
  • 本地缓存路径报错:检查路径是否符合当前客户端的配置目录结构,并确认应用有权限创建或写入该目录。桌面客户端可能把配置复制到自己的运行目录,不能假设相对路径总是相对于你编辑文件时所在的位置。

建议先用一条容易验证的测试域名确认整条链路:规则文件能够访问、Provider 能成功加载、主规则能匹配、目标策略能够选择。确认无误后再逐步扩充规则集。Clash Verge、Clash Verge Rev、Clash for Windows、ClashX、Clash for Android 等客户端在界面和内核版本上存在差异,遇到无法识别字段时,应查看客户端的内核信息和运行日志,再按该内核支持的格式调整。

上线前检查清单

确认 Raw URL 可访问、behavior 与文件内容匹配、规则集名称引用一致、缓存路径可写、分流规则顺序正确,并且目标策略存在。完成这些检查后,再把规则集用于日常配置。

立即免费下载 Clash,开启流畅上网新体验 →