规则集

你可以使用来自 URL、已配置的规则提供者(Rule Provider)或配置文件内内联段的规则集合。Chute 还提供两个内置规则集。

内置规则集

SYSTEM

RULE-SET,SYSTEM,DIRECT

包含 macOS 和 iOS 自身发出的大多数请求的规则。App Store、iTunes 和其他内容服务发送的请求不包含在内。

USER-AGENT,*com.apple.mobileme.fmip1
USER-AGENT,*WeatherFoundation*
USER-AGENT,%E5%9C%B0%E5%9B%BE*
USER-AGENT,%E8%AE%BE%E7%BD%AE*
USER-AGENT,com.apple.geod*
USER-AGENT,com.apple.Maps
USER-AGENT,FindMyFriends*
USER-AGENT,FindMyiPhone*
USER-AGENT,FMDClient*
USER-AGENT,FMFD*
USER-AGENT,fmflocatord*
USER-AGENT,geod*
USER-AGENT,locationd*
USER-AGENT,Maps*
DOMAIN,api.smoot.apple.com
DOMAIN,captive.apple.com
DOMAIN,configuration.apple.com
DOMAIN,guzzoni.apple.com
DOMAIN,smp-device-content.apple.com
DOMAIN,xp.apple.com
DOMAIN-SUFFIX,ess.apple.com
DOMAIN-SUFFIX,push-apple.com.akadns.net
DOMAIN-SUFFIX,push.apple.com
DOMAIN,aod.itunes.apple.com
DOMAIN,mesu.apple.com
DOMAIN,api.smoot.apple.cn
DOMAIN,gs-loc.apple.com
DOMAIN,mvod.itunes.apple.com
DOMAIN,streamingaudio.itunes.apple.com
DOMAIN-SUFFIX,lcdn-locator.apple.com
DOMAIN-SUFFIX,lcdn-registration.apple.com
DOMAIN-SUFFIX,ls.apple.com
PROCESS-NAME,trustd

这些规则可能随 Chute 更新而更新。请参考软件中的描述以获取最新的子规则。


LAN

RULE-SET,LAN,DIRECT

包含 LAN IP 地址和 .local 后缀的规则。请注意,此规则集会触发 DNS 查询。

DOMAIN-SUFFIX,local
IP-CIDR,192.168.0.0/16
IP-CIDR,10.0.0.0/8
IP-CIDR,172.16.0.0/12
IP-CIDR,127.0.0.0/8
IP-CIDR,100.64.0.0/10
IP-CIDR,255.0.0.0/8
IP-CIDR,fc00::/7
IP-CIDR,::1/128
IP-CIDR,fe80::/10

外部规则集

来自 http(s) URL 的规则集。规则集文件应为纯文本文件,每行包含一条不含策略的规则声明。

注意:规则集文件仅支持叶子规则类型。逻辑规则(AND/OR/NOT)、SCRIPT 和 DOMAIN-SET 行都会被丢弃。由 RULE-SET,<url> 取回的文件里的 RULE-SET 行不起作用:解析器只保留内置的 SYSTEM 和 LAN 两个取值,而且连它们也从不展开,所以这一行永远不会命中。嵌套引用在 [Rule Provider] 载荷和内联 [Ruleset] 段里确实可用。裸 CIDR 行(例如 1.2.4.0/24)会被当作 IP-CIDR 规则接受。

RULE-SET,https://example.com/my-rules.txt,Proxy
RULE-SET,https://example.com/my-rules.txt,Proxy,update-interval=86400

可选的 update-interval 参数表示下载的副本最多可以存在多久(秒)。并没有定时器:副本超过这个时长之后的第一次匹配会在后台重新下载它。加载配置时,比这更新的缓存副本直接使用、不重新下载;比这更旧的缓存副本不会被使用,因此规则集要先下载完才会参与匹配。不写 update-interval 时,缓存副本会一直保留,只有在没有缓存时才下载规则集。写在 RULE-SET 行上的 no-resolve 作用于集合中的每一条基于 IP 的规则。

规则集文件示例:

DOMAIN,exampleA.com
DOMAIN,exampleB.com

如需使用本地文件,请在 [Rule Provider] 段中通过 path= 参数定义一个条目,然后按名称引用它:

[Rule Provider]
my-rules = type=file, path=/path/to/my-rules.txt, format=native

[Rule]
RULE-SET,my-rules,Proxy

规则提供者参数:type(http 或 file;http 需要 url=)、behavior(classical 表示规则声明,domain 表示域名集,ipcidr 表示裸 CIDR 列表——该值同样适用于 Clash/mihomo 提供者,其裸 CIDR 载荷会被接受;默认 classical)、format(native——或 surge——表示 Chute 规则行,mihomo-yaml 表示 Clash/mihomo rule-provider YAML 载荷,sing-box-source——或 sing-box、source——表示 source(JSON)格式的 sing-box 规则集;默认 mihomo-yaml)以及 interval(秒,默认 86400)。interval 为正数时,每次加载配置都会重新下载载荷,且比它更旧的缓存副本不会被使用;0 只在没有缓存副本时下载;负值则从不下载——RULE-SET 行上的 update-interval 也不会让它下载——因此除非存在缓存副本,否则该提供者保持不生效。Chute 运行期间,提供者只会通过指名它并带有 update-interval 的 RULE-SET 行刷新:缓存副本超过这个时长之后的第一次匹配,会从该提供者自己的来源重新获取它。[Rule Provider] 行没有承载规则的键,所以在那里写 type=inline 只会得到一个空的提供者;内联规则集请写成 [Ruleset <name>] 段。

policy=<name> 让载荷经由该策略或策略组下载(即 mihomo 的 proxy:),例如 my-rules = type=http, url=https://example.com/rules.yaml, policy=Proxy;若是策略组,使用下载开始时它选中的策略。不写或写 policy=DIRECT 时直接下载。名称未定义时拒绝下载,而不是改为直接下载。

HTTP 控制 API 的 GET /api/rules/providers 会报告每个 [Rule Provider] 条目和 [Ruleset] 段:是否已加载、没能加载的原因,以及所有转换警告。其中的 rule_count 统计的是 [Ruleset] 段的行数,对下载的或文件形式的提供者始终为 0。RULE-SET,<url> 和 DOMAIN-SET,<url> 不在这个列表里;它们下载失败只会出现在日志中。

在 iPhone、Apple TV 与 Android 上,规则提供者的载荷——无论是下载得到的还是从文件读取的——都有体积上限,因为隧道在这些平台上可用内存很少:sing-box-source 为 400 KB,其余格式为 1 MB。超过上限的载荷不会被加载,提供者的状态里会说明原因。RULE-SET,<url> 和 DOMAIN-SET,<url> 的读取不经过内存中的转换,没有上限。桌面端没有上限,所以体积很大的公开规则集(geosite/cn 之类)只有在桌面端才能作为提供者加载。在这些平台上,规则集索引最多同时保持 24 个数据库连接打开(桌面端 128 个)。

当 mihomo-yaml 载荷无法解析、但看起来是普通的规则行列表时,会改按 native 读取,并记录一条提示。classical 的 mihomo 载荷里,每一行都不指名策略,所以值后面的内容会按参数读取:no-resolve 会保留,其他任何参数——例如 mihomo 的 src——都会被丢弃。逻辑规则和 …-REGEX 规则则把该行其余的部分当作自己的值。

内容是 JSON 对象的载荷会先按 sing-box 规则集尝试读取,所以用默认格式声明的 sing-box 规则集也能加载。在 sing-box 规则集中,所有匹配项同属一类的规则会按每个取值拆成一行。这些类别是:目标(domain、domain_suffix、domain_keyword、domain_regex、ip_cidr、geoip,以及 ip_is_private——它会变成带 no-resolve 的私有地址段)、目标端口(port、port_range)、来源地址(source_ip_cidr、source_ip_is_private)、来源端口(source_port、source_port_range),另外 protocol、network、process_name 和 process_path 各自单独成一类。clash_mode: rule 会被忽略,因为 Chute 只运行规则模式;其他任何 clash_mode 都会让该规则被丢弃。组合了不同类匹配项的规则(例如同时有域名和端口)、invert 规则和 logical 规则无法写成单行,会被跳过并列在该规则集的警告中。编译后的二进制格式无法读取。sing-box 的 .srs 提供者会被识别出来——依据是 format=srs、format=binary,或位置以 .srs 结尾——并保持不生效,其状态会提示改指向该规则集的 sing-box source(.json)版本。mihomo 的 .mrs 则不会被识别:它的载荷只是无法按文本解码,所以该规则集会以笼统的下载失败状态保持不生效。在 macOS 上,若发布者提供了并列的 source 载荷,导入器会把二进制规则集改指过去;iOS、Apple TV 与 Android 上不会。

RULE-SET 和 DOMAIN-SET 可以作为 AND/OR/NOT 逻辑规则的子规则使用——NOT,((RULE-SET,cn_ip)),Proxy 是有效的,嵌套的规则集使用与独立书写时相同的载荷过滤进行匹配。


内联规则集

[Ruleset <name>] 段把规则集直接写在配置文件里(Surge 语法)。段内每行都是一条不带策略的规则声明,与规则集文件相同;规则通过段名引用它:

[Ruleset Streaming]
DOMAIN-SUFFIX,netflix.com
IP-CIDR,198.51.100.0/24,no-resolve

[Rule]
RULE-SET,Streaming,Proxy

这个段相当于一条 type=inline、format=native 的 [Rule Provider],保存时仍写回为段。两个同名规则集会报配置错误。

内联段(与规则提供者的载荷一样)可以包含 RULE-SET,SYSTEM、RULE-SET,LAN 或 RULE-SET,<另一个内联段>,它们在规则加载时展开,最多嵌套 8 层。会形成循环的引用,以及指向 file 或 http 规则集、域名集或 DOMAIN-SET 的引用,都会被丢弃并给出警告。


域名集

域名集类似于外部规则集,但专门用于域名,并使用更紧凑的文件格式。

DOMAIN-SET,https://example.com/domains.txt,DIRECT
DOMAIN-SET,https://example.com/domains.txt,DIRECT,update-interval=86400

类型之后的第一个字段必须是 http(s) URL。域名集文件包含裸域名,每行一个(而不是规则声明):

# exact domain
example.com
# the domain and all of its subdomains
.example.org
+.example.net

以 # 或 // 开头的行为注释。

S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-29 21:57:05

本页为英文版的翻译。如内容有出入,以英文版为准。

results matching ""

    No results matching ""