规则引擎的模型非常简单:请求到达后,从 rules 的第一行开始逐条比较,
命中第一条匹配的规则就立即决定策略,后面的规则不再参与。
规则的匹配流程
一条规则的格式是 匹配器,值,策略,部分匹配器还有可选参数:
# 匹配器 值 策略
- DOMAIN-SUFFIX, github.com, 🚀 节点选择
- IP-CIDR, 10.0.0.0/8, DIRECT, no-resolve
- MATCH, 🐟 漏网之鱼
策略可以是节点名、代理组名,或者三个内置策略之一:
| 策略 | 含义 |
|---|---|
DIRECT | 直连,不经过任何代理 |
REJECT | 拒绝连接,常用于广告拦截 |
REJECT-DROP | 静默丢弃,不返回响应 |
域名类匹配器
域名规则在发出 DNS 请求之前就能命中,效率最高,应优先使用。
DOMAIN,—— 精确匹配完整域名;DOMAIN-SUFFIX,—— 匹配域名后缀,会同时命中子域,最常用;DOMAIN-KEYWORD,—— 关键词匹配,范围最宽但最容易误伤,谨慎使用;DOMAIN-REGEX,—— 正则匹配,适合复杂场景,有一定性能开销。
rules:
# 精确匹配:只影响 api.example.com
- DOMAIN,api.example.com,🚀 节点选择
# 后缀匹配:会命中 a.b.example.com 等所有子域
- DOMAIN-SUFFIX,example.com,🚀 节点选择
# 关键词匹配:任何包含该词的域名都会被命中
- DOMAIN-KEYWORD,ads,REJECT
IP 类匹配器
IP-CIDR,/IP-CIDR6,—— 按目标网段匹配;GEOIP,CN—— 按 IP 所属国家/地区匹配,依赖Country.mmdb;SRC-IP-CIDR,—— 按来源地址匹配,适合区分内网设备;IP-ASN,—— 按自治系统号匹配,可一次性覆盖某云厂商的地址段。
务必加上 no-resolve:对于 IP 类的规则,如果目标是一个域名,引擎会为了比对而先做一次 DNS 解析,这会显著增加延迟。加上 no-resolve 表示只对纯 IP 请求生效,不做额外解析。
rules:
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOIP,LAN,DIRECT,no-resolve
- GEOIP,CN,DIRECT
进程与规则集
桌面端支持按进程名或进程路径分流,特别适合「只代理某个客户端」的场景:
rules:
- PROCESS-NAME,chrome.exe,🚀 节点选择
- PROCESS-NAME,Telegram,🚀 节点选择
- PROCESS-PATH,C:\\Games\\client.exe,DIRECT
RULE-SET 用于引用外部规则集文件,可以把成百上千条规则外置,既保持配置整洁,
又能独立更新:
rule-providers:
reject:
type: http
behavior: domain
url: "https://example.com/ruleset/reject.yaml"
path: ./ruleset/reject.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- GEOIP,CN,DIRECT
- MATCH,🚀 节点选择
推荐的规则顺序
把下面这个顺序记下来,绝大多数配置问题都能避免:
- 广告与隐私拦截 —— 优先级最高,尽早拦截;
- 本地与内网地址 ——
localhost、127.0.0.0/8、私网网段,必须直连; - 需要代理的域名 —— 精确域名优先于后缀;
- 需要直连的域名与地区 —— 国内网站、
GEOIP,CN; - 兜底规则 ——
MATCH放最后一行。
常见错误是把
GEOIP,CN,DIRECT放得太靠前,导致国内 CDN 域名被直接放行,而它实际解析到的是海外 IP,结果是访问缓慢却找不到原因。
如何调试规则命中
把日志等级调到 debug,日志会打印每条连接最终命中的规则:
log-level: debug
# 观察日志中的这一行
# [TCP] example.com:443 match DOMAIN-SUFFIX example.com using 🚀 节点选择
也可以通过控制接口查询当前连接与规则列表,配合面板查看实时命中情况。
规则写完之后,下一步是让代理组具备自动选优能力:代理组与负载均衡策略。
配置
← 返回教程列表