规则
Chute 根据自定义规则将请求转发到另一个代理服务器或直接连接到目标主机。
优先级
规则按照配置文件中出现的顺序从上到下依次匹配。换句话说,列表顶部的规则优先级高于后面的规则。
组成
每条规则由 3 个部分组成:规则类型、流量匹配器(FINAL 规则除外)和代理策略:TYPE, VALUE, POLICY。例如:DOMAIN-SUFFIX,apple.com, DIRECT IP-CIDR,192.168.0.0/16,ProxyA
代理策略必须是某个策略名称,包括代理、策略组、DIRECT 或 REJECT。规则必须以一条 FINAL 规则结尾,用于定义默认行为。
示例:
[Rule]
DOMAIN-SUFFIX,company.com,ProxyA
DOMAIN-KEYWORD,google,DIRECT
GEOIP,US,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT
FINAL,ProxyB
规则类型
基于域名的规则
| 类型 | 语法 | 匹配条件 |
|---|---|---|
| DOMAIN | DOMAIN,www.apple.com,Proxy |
精确域名匹配 |
| DOMAIN-SUFFIX | DOMAIN-SUFFIX,apple.com,Proxy |
域名后缀匹配 |
| DOMAIN-KEYWORD | DOMAIN-KEYWORD,google,Proxy |
域名包含关键字 |
| DOMAIN-WILDCARD | DOMAIN-WILDCARD,*.apple.com,Proxy |
通配符域名匹配 |
| DOMAIN-REGEX | DOMAIN-REGEX,^mail\..+\.com$,Proxy |
域名正则匹配 |
| DOMAIN-SET | DOMAIN-SET,my-set,DIRECT |
来自文件/URL 的命名域名集 |
基于 IP 的规则
| 类型 | 语法 | 匹配条件 |
|---|---|---|
| IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT |
IP 地址在 CIDR 范围内 |
| IP-CIDR6 | IP-CIDR6,2001:db8::/32,DIRECT |
IPv6 地址在 CIDR 范围内 |
| GEOIP | GEOIP,US,DIRECT |
GeoIP 数据库中的国家代码 |
| IP-ASN | IP-ASN,13335,DIRECT |
IP 地址属于指定 ASN |
HTTP 层级规则
| 类型 | 语法 | 匹配条件 |
|---|---|---|
| USER-AGENT | USER-AGENT,Instagram*,DIRECT |
User-Agent 头部 |
| URL-REGEX | URL-REGEX,^http://google\.com,DIRECT |
URL 匹配正则 |
| PROTOCOL | PROTOCOL,HTTPS,Proxy |
检测到的协议(HTTP/HTTPS/TLS/SSH 等) |
进程规则(仅 Mac)
| 类型 | 语法 | 匹配条件 |
|---|---|---|
| PROCESS-NAME | PROCESS-NAME,Telegram,Proxy |
进程名(通配符匹配) |
| PROCESS-PATH | PROCESS-PATH,/Applications/Safari.app,Proxy |
完整进程路径 |
| PROCESS-NAME-REGEX | PROCESS-NAME-REGEX,^Safari$,DIRECT |
进程名(正则匹配) |
端口和来源规则
| 类型 | 语法 | 匹配条件 |
|---|---|---|
| DEST-PORT | DEST-PORT,80,DIRECT |
目标端口 |
| SRC-IP | SRC-IP,192.168.20.100,DIRECT |
来源 IP 地址 |
| SRC-PORT | SRC-PORT,52345,DIRECT |
来源端口 |
| IN-PORT | IN-PORT,6152,DIRECT |
Chute 上的入站代理端口 |
高级匹配规则
| 类型 | 语法 | 匹配条件 |
|---|---|---|
| SUBNET | SUBNET,TYPE:WIFI,Proxy |
网络子网属性(TYPE、BSSID、SSID、ROUTER) |
| HOSTNAME-TYPE | HOSTNAME-TYPE,AAAA,Proxy |
DNS 记录类型(A/AAAA 等) |
| IN-TYPE | IN-TYPE,SOCKS5,Proxy |
入站连接类型(HTTP/SOCKS5/TUN) |
| IN-USER | IN-USER,user1,Proxy |
入站认证用户名 |
| IN-NAME | IN-NAME,my-proxy,Proxy |
入站代理服务器名称 |
逻辑组合规则
| 类型 | 语法 | 匹配条件 |
|---|---|---|
| AND | AND,((DOMAIN,example.com),(DEST-PORT,443)),Proxy |
所有子规则均匹配 |
| OR | OR,((DOMAIN,example.com),(DOMAIN,test.com)),Proxy |
任一子规则匹配 |
| NOT | NOT,((DOMAIN,example.com)),Proxy |
子规则不匹配 |
特殊规则
| 类型 | 语法 | 匹配条件 |
|---|---|---|
| RULE-SET | RULE-SET,SYSTEM,DIRECT |
来自文件、URL 或内置集合的规则集 |
| SCRIPT | SCRIPT,MyRuleScript,PROXY |
基于 JavaScript 的自定义规则匹配 |
| FINAL | FINAL,ProxyB |
无其他规则匹配时的默认行为(必须放在最后) |
选项
no-resolve
当遇到 GEOIP、IP-CIDR 或 IP-ASN 规则时,Chute 会发送 DNS 查询来检查请求的主机名是否为域名。您可以选择 no-resolve 选项来对域名的请求跳过此规则。
GEOIP,US,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
注意:如果某些域名无法被本地 DNS 服务器解析,请确保匹配该域名的规则之前没有 IP 类型的规则。否则规则匹配将因 DNS 错误而失败。您也可以使用
no-resolve来解决此问题。
force-remote-dns
强制通过远程代理服务器进行 DNS 解析,而非使用本地 DNS。
DOMAIN-SUFFIX,google.com,Proxy,force-remote-dns
extended-matching
将基于域名的规则匹配扩展到也检查 HTTP Host 头部,而不仅仅是连接主机名。当 SNI 或 CONNECT 目标与 Host 头部不同时,此选项非常有用。
DOMAIN-SUFFIX,example.com,Proxy,extended-matching
requires-resolve
对于 SCRIPT 规则,确保在执行脚本之前 DNS 解析已完成。这保证了 $request.dnsResult 在脚本中可用。
SCRIPT,MyRuleScript,PROXY,requires-resolve
域名集
Chute 支持从外部文件或 URL 定义命名域名集,可与 DOMAIN-SET 规则类型一起使用。域名集文件中每行包含一条规则声明(不含策略部分)。