规则类型及其作用
概览
在 chimera_client 中,规则决定由哪个出站组处理某条流量。规则按自上而下、首条命中优先的方式求值,这与 Clash-rs 和 Mihomo 的行为一致。
规则求值模型
常见的输入信号包括:
- 域名指示信息(SNI / Host),
- 解析后的目标 IP,
- 目标端口 / 源端口,
- 进程身份(平台支持时),
- GeoIP / GeoSite 数据集,
- 以及外部 rule-provider 集合。
常见动作:将流量路由到策略组,例如 DIRECT、REJECT、Proxy 或 Auto。
常见域名规则
DOMAIN
精确主机名匹配。
rules:
- DOMAIN,api.github.com,Proxy
DOMAIN-SUFFIX
后缀匹配(包含子域名)。
rules:
- DOMAIN-SUFFIX,google.com,Proxy
DOMAIN-KEYWORD
基于子串的域名匹配。需谨慎使用以避免过度匹配。
rules:
- DOMAIN-KEYWORD,openai,Proxy
IP 与网络规则
IP-CIDR
IPv4 目标前缀匹配。
rules:
- IP-CIDR,1.1.1.0/24,DIRECT
IP-CIDR6
IPv6 目标前缀匹配。
rules:
- IP-CIDR6,2606:4700::/32,DIRECT
SRC-IP-CIDR
源子网匹配(对路由器 / 网关场景很有用)。
rules:
- SRC-IP-CIDR,192.168.50.0/24,GameProxy
GEOIP
国家 / 地区 IP 数据库匹配。
rules:
- GEOIP,CN,DIRECT
GEOSITE
域名类别 / 列表匹配。
rules:
- GEOSITE,geolocation-!cn,Proxy
端口与进程规则
DST-PORT
基于目标端口的路由。
rules:
- DST-PORT,443,Proxy
SRC-PORT
基于源端口的路由。
rules:
- SRC-PORT,60000-60100,DIRECT
PROCESS-NAME
匹配可执行文件名。
rules:
- PROCESS-NAME,Telegram.exe,Proxy
PROCESS-PATH
匹配可执行文件完整路径。
rules:
- PROCESS-PATH,/Applications/Discord.app/Contents/MacOS/Discord,Proxy
Provider 与逻辑规则
RULE-SET
引用由远程或本地 provider 管理的规则集合。
rule-providers:
streaming:
type: http
behavior: domain
url: https://example.com/streaming.yaml
interval: 86400
path: ./ruleset/streaming.yaml
rules:
- RULE-SET,streaming,Proxy
MATCH
最终的全量兜底规则。
rules:
- MATCH,DIRECT
推荐排序
- 安全拦截和明确绕过(
REJECT、私有 / 本地DIRECT)。 - 精确业务规则(
DOMAIN、PROCESS-PATH、IP-CIDR)。 - Provider / 类别规则(
RULE-SET、GEOSITE)。 - 宽泛启发式规则(
DOMAIN-KEYWORD、GEOIP)。 - 最终的
MATCH兜底规则。
兼容性说明(clash-rs + Mihomo)
- 首条命中优先:一旦规则命中,后续规则将被忽略。
- 规则语法大体可移植,但实际行为仍依赖于 DNS 模式和入站类型。
- 进程级规则对平台敏感;应在每个目标操作系统上分别验证。
- GeoIP / GeoSite 的新鲜度会直接影响正确性。
最小混合示例
rules:
- DOMAIN,internal.example.com,DIRECT
- DOMAIN-SUFFIX,corp.example.com,DIRECT
- PROCESS-NAME,Telegram.exe,Proxy
- GEOSITE,category-ads-all,REJECT
- GEOIP,CN,DIRECT
- RULE-SET,streaming,Proxy
- MATCH,Auto
运维建议
- 保持规则意图清晰;避免在列表前部放置相互重叠的宽泛规则。
- 对规则 provider 及其刷新间隔进行版本控制。
- 在调试错配时开启连接决策日志。
- 应联合验证 DNS 策略和规则策略,尤其是在 fake-IP / TUN 场景下。