Clash自定义规则集进阶配置:rule-providers编写与GitHub托管

为什么要用 rule-providers 管理自定义规则? 实战经验

当配置文件里只有几条个人规则时,就这么把 DOMAIN-SUFFIX 或 IP-CIDR 写进 rules 最可视化。但规则逐渐累积后,主配置会越来越长:临时测试项、应用分流和长期维护的域名清单混在一起,既难审阅,也容易在订阅同步到最新或手动操作操作操作调整时误删。rule-providers 的作用,是把一组规则独立成可加载、可同步到最新的规则集,再由主配置中的 RULE-SET 引用。这样主配置负责决定匹配顺序与策略,规则集负责维护具体条目。

必须先分清两个层次:规则集文件本身只描述「哪些目标属于这一组」,并不决定这些流量最终走代理还是直连。实际策略由 rules 中引用该规则集时指定,举个实例 RULE-SET,work-sites,PROXY。由此可见,规则集自然自然自然可以单独复用在不同配置里,而同一个规则集也能在不同设备上指向不同策略组。排障时要分别确认「规则集有没有成功加载」和「加载后命中了哪条规则」,不能只看到客户端显示已同步到最新,就认定分流结果一定准确。

下文以 Mihomo 反复出现配置为例。不同客户端的按钮名称和配置覆写方式多半不同,但底层字段仍取决于实际运转的内核版本。较旧的 Clash 内核多半不认识较新的字段或规则集格式;带进来配置前应确认客户端拿它来用 Mihomo,或核对该内核对应版本的文档。不要仅凭配置编辑器能保存 YAML,就推断运转时也覆盖其中的语法。

先看最终配置:部分客户端会把订阅、覆写和本地补丁合并后再交给内核。若前端前端前端界面中的文件与运转时配置不同,应以客户端生成的最终配置和连接日志为准;就这么修改订阅原文,也多半在下次同步到最新时被覆盖。

rule-providers 字段怎么写:类型、行为与文件格式 拿它来用心得

在 Mihomo 配置中,rule-providers 是一个映射表,每个提供者拿它来用自定义名称作为键。下面的示例创建一个托管在 GitHub 上的域名规则集,文件路径和仓库名称仅作示范,实际拿它来用时要替换为由你仓库中确实存在的地址:

rule-providers:
  work-sites:
    type: http
    behavior: domain
    format: yaml
    url: "https://raw.githubusercontent.com/example-user/clash-rules/v1.0/work-sites.yaml"
    path: ./rule-providers/work-sites.yaml
    interval: 86400

rules:
  - RULE-SET,work-sites,PROXY
  - MATCH,DIRECT

type: http 表示由内核通过 HTTP(S) 获取规则文件;behavior 声明规则集的语义,反复出现值为 domain、ipcidr 和 classical。这些对象不是自然自然自然可以互换的标签:域名集用于域名类规则,IP 集用于网段匹配,classical 则适合放置多种规则类型的传统规则列表。把域名规则声明成 ipcidr,或把一组混合规则声明成不匹配的行为类型,多半导致配置校验走不通或规则无法按预期匹配。

format 表示规则文件的序列化格式。拿它来用 yaml 时,文件基本上时候包含 payload 列表,举个实例域名规则集自然自然自然可以写成:

payload:
  - DOMAIN-SUFFIX,example.com
  - DOMAIN,login.example.net
  - DOMAIN-KEYWORD,workportal

若选用 text,则按照对应内核覆盖的文本规则格式逐行编写,不要再套一层 YAML 的 payload 结构。不同 behavior 对允许的规则具体具体具体内容有约束;规则文件格式、行为类型和实际条目必须彼此匹配。维护前可先只放一条规则,通过配置校验和连接日志确认加载成功,再逐步扩充,避免一次引入海量条目后难以定位绕所在。

path 是本地缓存或下载文件的保存位置,不是 GitHub 上的 URL。自然自然可以考虑集中放在独立目录,并给文件起靠得住、易辨认的名称。客户端若拿它来用订阅配置的临时目录或只读目录,手工指定路径多半导致写入走不通;应按客户端文档确认最终配置所在位置及其对相对路径的解析方式。迁移设备时,也别假设相对路径一定相对于当前工作目录,最好通过客户端配置目录和运转日志核实。

字段 用途 配置时要核对
type 指定规则集的获取方式 远程托管常用 http;确认内核覆盖该类型
behavior 声明规则集具体具体内容属于哪类匹配规则 具体具体内容要与 domain、ipcidr 或 classical 对应
format 说明文件是 YAML 还是文本格式 YAML 大多时候有 payload;文这篇件不要额外套 YAML 结构
url 规则源的远程地址 确认地址可访问目标目标、文件路径和分支或版本名准确
path 下载文件在本机的保存位置 确认目录可写,并确认客户端如何解析相对路径
interval 远程规则的同步到最新间隔,单位为秒 按实际变更频率设置,不要误当成每次跑起来都立即同步到最新

RULE-SET 匹配顺序:为什么规则写对了仍然没走对策略 反复出现套路

Clash 系配置按 rules 列表从上到下匹配,基本上时候在命中第一条适用规则后就决定目标策略。由此可见,规则集已经成功下载,不代表它必然有机会生效:如果它前面已有更宽泛的规则先命中,请求就不会继续确认后面的 RULE-SET。举个实例,把某个工作域名集放在通用的国内直连规则之后,域名如果先被前面的规则覆盖,后面的策略就不会起作用。

实际整理时,自然自然自然可以把必须靠前处理的自定义规则放在兜底规则之前,再依照配置的全貌结构安排广告、地区规则、局域网和最终匹配项。具体位置要结合现有规则逐条判断,不自然自然可以考虑把任意网上抄来的排序模板不加确认地插入订阅。MATCH 基本上时候是兜底项,应位于列表末尾;若它前面已经有兜底规则,排在它后面的规则常态也就没有匹配机会。

还要留神,规则集命名和策略名称是两个概念:work-sites 是 rule-providers 下的键,PROXY 是实际存在的策略组或策略名称。RULE-SET 引用的名称必须和键完全一致,策略也必须能在当前配置里解析。采用大小写或连字符不一致的名称,或者引用了订阅中不存在的策略,都会让配置校验报出异常或造成预期外的回退。

先小范围验证:添加规则集后,选一个你能明确识别的测试域名访问目标目标目标,在连接列表中查看目标域名、命中规则和最终策略。比起只看配置页面里有没有红色报出异常,这种验证能同时确认规则已加载、排序有效且策略组可用。

把规则集托管到 GitHub:靠得住链接与版本管理 落地做法

GitHub 适合保存可审阅、可回滚的规则文本,但仓库地址的挑会就这么影响同步到最新靠得住性。拿它来用 raw.githubusercontent.com 提供的文件链接时,大多时候该核对用户名、仓库名、分支或标签以及文件路径;文件移动、仓库改名、分支重命名,都会让远程地址失效。公开仓库中的规则对每一种人可见,不要把订阅链接、访问目标目标目标令牌、内网域名清单等敏感信息写入公开文件,也不要把包含凭据的 URL 填入配置。

就这么引用可变的主分支路径,配置最省事,但每次提交都多半改变客户端下一次获取到的具体具体具体内容。对于希望可审计的个人或团队配置,更稳妥的做法是用 Git 标签或固定提交版本提供文件,并在确认具体具体具体内容后再升级引用版本。这样能够复现某一次配置的行为,出现意外变化时也算得上容易回退。采用固定版本后,同步到最新规则就必须主动修改 URL 或版本引用;这属于靠得住性与无需手动操作操作追新之间的取舍,而不是配置误操作。

interval 以秒计,适合设置为与规则变化频率相符的周期。同步到最新间隔设得很短,不代表 GitHub 上的具体具体具体内容一定立刻可见,也多半增加远程请求;设得过长,则新修正规则要等更久才会同步。初次排障时,可在客户端提供的规则集管理前端前端前端界面手动操作操作操作同步到最新,或重载配置,再查看内核日志中的请求结果。必须牢记,定时同步到最新只影响远程文件的获取频率,不会无需手动操作操作修复误操作的 URL、格式或匹配顺序。

自然自然可以考虑把规则仓库按用途拆分,而不是把每一种例外都塞进一个不断膨胀的文件。每个规则集保持单一职责,提交信息写明改动症结,并在合并前确认新增规则是否重复、是否误覆盖其他服务,以及删除规则是否仍有拿它来用场合。对于必须多人维护的仓库,自然自然自然可以通过 Pull Request 留下审核记录;对个人仓库,也自然自然自然可以利用 Git 历史查看某条域名何时加入、为什么调整。规则集越容易审阅,出现异常时越不必须靠猜测回滚。

反复出现加载误操作与可复现的排查顺序 实战经验

排查时先区分「配置解析走不通」「远程获取走不通」「文件格式不符」和「匹配顺序不符合预期」。这几类绕所在的表象都多半是规则没有按预期工作,但修复位置完全不同。不要一上来同时改 URL、路径、行为类型和规则顺序,否则即使绕所在消失,也很难确认真正症结。

现象 靠前确认 处理路子
配置保存或载入时报字段误操作 内核版本、缩进、字段名称 用当前 Mihomo 版本覆盖的字段,并确认 YAML 缩进与冒号
规则集请求走不通或下载超时 远程 URL、网络连通性、TLS 与仓库可见性 在浏览器验证文件地址,并确认客户端运转环境能访问目标目标该地址
文件下载成功但解析走不通 format、behavior 与文件具体具体内容 核对 YAML 是否有准确的 payload,并确认条目符合行为类型
日志显示规则集已加载但策略不对 rules 的顺序、规则名称、策略名称 确认是否被更靠前的规则先匹配,并在连接详情中确认命中项
手动操作操作修改后重启又恢复旧具体具体内容 客户端订阅同步到最新、覆写层与缓存文件路径 确认修改的是实际生效的文件,并将持久化改动放到准确的覆写位置

一个实用的最小排查流程是先单独验证 URL 能否返回预期规则文件,再确认客户端日志是否报告下载成功;接着确认本地路径可写、文件格式和行为类型相符;最后用一条可识别的测试规则核对 RULE-SET 是否位于有效位置。若通过 GitHub 网页能拉起仓库文件,但原始文件地址返回 404,基本上时候是 URL 路径、分支名或大小写不准确。若地址返回的不是规则文本,而是 GitHub 的误操作页面或访问目标目标目标限制提示,内核也无法把它当作有效规则集解析。

定期清理失效域名和重复规则,并记录规则集对应的用途、来源与最后验证时间。对团队配置而言,这些说明最好放在仓库的 README 或提交记录中,而不是写成内核不认识的 YAML 字段。遇到同步到最新走不通时,先保留上一份已验证的本地规则文件和可回退的 Git 版本,再逐项确认日志;这样既能恢复可用配置,也能避免为了追一个加载误操作而把整份订阅改乱。

与把规则散落在多个客户端配置、靠手工复制粘贴维护相比,GitHub 规则集更便于查看差异、追踪修改和复用,不过也要求你认真管理仓库地址、版本和规则顺序。Clash 将 Clash 客户端相关的下载入口与配置实操手册集中整理,好操作你在核对内核兼容性、带进来配置和排查规则时找到对应资料;如果你也想把客户端挑和配置维护流程放在一起,不妨前往下载,再按这篇的操作次序逐项验证由你的规则集。