手写几百条 DOMAIN-SUFFIX 规则不现实,也没法跟上网站变化。rule-providers 让你引用外部维护的规则列表,定期自动更新。
基本结构
分两步:先定义 provider,再在 rules 里引用。
rule-providers:
cn-domain:
type: http
behavior: domain
format: text
url: "https://example.com/rules/cn-domain.txt"
path: ./ruleset/cn-domain.txt
interval: 86400
proxy: DIRECT
rules:
- RULE-SET,cn-domain,DIRECT
- MATCH,PROXY字段逐个说
| 字段 | 取值 | 说明 |
|---|---|---|
type | http / file / inline | 远程、本地文件、或直接内联 |
behavior | domain / ipcidr / classical | 必须和文件内容匹配 |
format | text / yaml / mrs | 文件格式 |
url | 规则文件地址 | type 为 http 时必填 |
path | 本地缓存路径 | 相对于配置目录 |
interval | 秒 | 更新间隔,86400 = 一天 |
proxy | 策略名 | 用哪条线路去下载规则文件 |
behavior:三种类型不能混用
这是最容易出错的地方——behavior 写错了不会报错,规则只是静默失效。
domain
文件内容长这样:
google.com
+.youtube.com
www.github.com+. 前缀等价于 DOMAIN-SUFFIX(含所有子域名),不带前缀是精确匹配。
ipcidr
1.0.1.0/24
8.8.8.8/32
2001:4860::/32classical
DOMAIN-SUFFIX,google.com
DOMAIN-KEYWORD,youtube
IP-CIDR,8.8.8.8/32,no-resolve
PROCESS-NAME,Telegram.exe注意:classical 文件里不写策略名,策略由引用它的那条 RULE-SET 决定。
format:text、yaml 与 mrs
text:纯文本,每行一条,# 开头是注释。最常见。
yaml:
payload:
- google.com
- "+.youtube.com"mrs:Mihomo 特有的二进制格式,体积小、加载快。只支持 domain 和 ipcidr 两种 behavior,不支持 classical。
规则集很大(几万条以上)时优先用 mrs 版本,如果规则源提供的话。
interval:更新间隔怎么设
| 规则集类型 | 建议 interval |
|---|---|
| 国内域名/IP 列表 | 86400(一天) |
| 广告拦截列表 | 86400 |
| 流媒体解锁列表 | 43200(半天) |
| 自己维护的小列表 | 3600 或更长 |
设太短没意义——这些列表一天也更新不了几次,反而给规则托管方增加压力。
完整实战配置
一套覆盖常见需求的规则集组合:
rule-providers:
# 广告拦截
reject:
type: http
behavior: domain
format: text
url: "https://example.com/reject.txt"
path: ./ruleset/reject.txt
interval: 86400
proxy: DIRECT
# 国内域名直连
direct:
type: http
behavior: domain
format: text
url: "https://example.com/direct.txt"
path: ./ruleset/direct.txt
interval: 86400
proxy: DIRECT
# 需要代理的域名
proxy:
type: http
behavior: domain
format: text
url: "https://example.com/proxy.txt"
path: ./ruleset/proxy.txt
interval: 86400
proxy: DIRECT
# 国内 IP 段
cncidr:
type: http
behavior: ipcidr
format: text
url: "https://example.com/cncidr.txt"
path: ./ruleset/cncidr.txt
interval: 86400
proxy: DIRECT
# 本机/内网
lancidr:
type: http
behavior: ipcidr
format: text
url: "https://example.com/lancidr.txt"
path: ./ruleset/lancidr.txt
interval: 86400
proxy: DIRECT
rules:
- RULE-SET,lancidr,DIRECT,no-resolve
- RULE-SET,reject,REJECT
- RULE-SET,proxy,🚀 节点选择
- RULE-SET,direct,DIRECT
- RULE-SET,cncidr,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,🐟 漏网之鱼注意顺序:内网 → 拦截 → 代理 → 直连 → IP 段 → 地理兜底 → MATCH。
代理列表放在直连列表前面,是因为有些域名会同时出现在两个列表里,代理优先更符合预期。
inline:直接内联小规则集
不想为几条规则单独建文件:
rule-providers:
my-work:
type: inline
behavior: domain
payload:
- "+.mycompany.com"
- "+.internal.corp"
- "gitlab.internal"file:使用本地文件
自己维护的规则放本地:
rule-providers:
personal:
type: file
behavior: classical
path: ./ruleset/personal.list配合 interval 可以让内核定期重读文件(部分版本支持)。改完文件后重载配置最稳妥。
规则集不生效时怎么查
看缓存文件
path 指定的文件就在配置目录下,直接打开看:
- 文件不存在 → 下载失败,检查 url 和 proxy 设置
- 文件内容是 HTML → url 返回的是网页(比如 404 页面),地址写错了
- 文件内容正常但规则不生效 → behavior 不匹配
Windows 上配置目录一般在:
%APPDATA%\io.github.clash-verge-rev.clash-verge-rev\看日志
把日志级别切到 debug,搜索 provider 名称,能看到下载和加载的完整过程:
INFO Start initial provider cn-domain
INFO Provider cn-domain loaded, 12043 rules看到 loaded, N rules 说明加载成功了。如果 N 是 0,就是 behavior 或格式问题。
性能考虑
如果你的规则集加起来超过十万条,且设备性能有限(软路由、老手机),考虑:
- 换用 mrs 格式
- 删掉用不到的规则集(比如你不看的流媒体平台)
- 用
GEOSITE代替部分域名列表(内核内置数据库,无需额外下载)
小结
- behavior 必须和文件内容对应,写错了静默失效
- IP 类规则集引用时加 no-resolve
- 给 provider 加
proxy字段,避免更新失败 - 规则集顺序:内网 → 拦截 → 代理 → 直连 → IP → GEOIP → MATCH
- 不生效时先看 path 里的缓存文件长什么样
下一篇是实战:公司内网 + 国内直连 + 海外代理的三方共存配置。
相关文档
十几种规则类型的语法、匹配逻辑与性能开销对照表,讲清楚 no-resolve 的作用、规则顺序为什么决定一切,以及怎么用连接页反查命中了哪条规则。
按进程分流的完整写法:find-process-mode 怎么开、进程名怎么查、PROCESS-NAME 与 PROCESS-PATH 的区别、性能开销,以及为什么规则写了不生效。