规则决定每一个连接的去向。这篇是一张速查表,配上每种类型的实际用法。
规则的基本形式
rules:
- 类型,匹配内容,策略[,附加参数]比如:
- DOMAIN-SUFFIX,google.com,🚀 节点选择
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- MATCH,🐟 漏网之鱼从上往下逐条匹配,第一条命中即生效,后面的不再检查。这条规律是理解一切规则行为的基础。
完整类型表
| 类型 | 匹配对象 | 示例 | 说明 |
|---|---|---|---|
DOMAIN | 完整域名 | DOMAIN,www.google.com,PROXY | 精确匹配,最快 |
DOMAIN-SUFFIX | 域名后缀 | DOMAIN-SUFFIX,google.com,PROXY | 含所有子域名,最常用 |
DOMAIN-KEYWORD | 域名包含关键词 | DOMAIN-KEYWORD,google,PROXY | 范围大,慎用 |
DOMAIN-REGEX | 正则匹配域名 | DOMAIN-REGEX,^api\\..*\\.com$,PROXY | Mihomo 支持 |
GEOSITE | 域名地理集合 | GEOSITE,youtube,PROXY | 依赖 geosite 数据库 |
IP-CIDR | IPv4 网段 | IP-CIDR,10.0.0.0/8,DIRECT,no-resolve | 注意 no-resolve |
IP-CIDR6 | IPv6 网段 | IP-CIDR6,::1/128,DIRECT,no-resolve | 同上 |
IP-SUFFIX | IP 后缀 | IP-SUFFIX,8.8.8.8/24,PROXY | Mihomo 支持 |
IP-ASN | 自治域号 | IP-ASN,13335,PROXY | 按运营商/云厂商分流 |
GEOIP | IP 所属国家 | GEOIP,CN,DIRECT | 依赖 geoip 数据库 |
SRC-IP-CIDR | 来源 IP | SRC-IP-CIDR,192.168.1.100/32,DIRECT | 按局域网设备分流 |
SRC-PORT | 来源端口 | SRC-PORT,8080,DIRECT | 少用 |
DST-PORT | 目标端口 | DST-PORT,22,DIRECT | 按服务类型分流 |
PROCESS-NAME | 进程名 | PROCESS-NAME,Telegram.exe,PROXY | 按程序分流 |
PROCESS-PATH | 进程完整路径 | PROCESS-PATH,/usr/bin/curl,PROXY | 更精确 |
RULE-SET | 引用规则集 | RULE-SET,cn-domain,DIRECT | 配合 rule-providers |
AND / OR / NOT | 逻辑组合 | 见下文 | Mihomo 支持 |
MATCH | 兜底 | MATCH,PROXY | 必须放最后一条 |
三个最常用的域名规则怎么选
no-resolve 到底是什么
这是 IP 类规则里最容易搞错的参数。
一个连接过来时,如果目标是域名,内核为了匹配 IP-CIDR 规则,必须先把域名解析成 IP。加上 no-resolve 的意思是:如果目标还是域名(没解析过),就跳过这条规则,别为它专门去做一次 DNS 查询。
什么时候该加:放在规则列表最前面的内网 IP 段规则,一律加上。
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR6,fc00::/7,DIRECT,no-resolve什么时候不加:GEOIP,CN,DIRECT 这种放在最后的兜底规则不要加 no-resolve,否则域名类流量根本匹配不到它。
规则顺序的三条铁律
铁律一:MATCH 必须在最后。它匹配一切,放在中间会让后面所有规则失效。
铁律二:GEOIP,CN 要放在具体域名规则之后。很多境外服务在国内有 CDN 节点,解析出来是国内 IP。GEOIP 放太前面会把它们全判成直连。
铁律三:越具体的规则越靠前。先写 DOMAIN,再写 DOMAIN-SUFFIX,最后写 DOMAIN-KEYWORD。
逻辑组合规则(Mihomo)
需要「同时满足多个条件」时:
# 只有 Telegram 这个进程访问某个 IP 段时才走代理
- AND,((PROCESS-NAME,Telegram.exe),(IP-CIDR,91.108.4.0/22)),PROXY
# 目标是 22 端口,且不是内网
- AND,((DST-PORT,22),(NOT,((GEOIP,CN)))),PROXY
# 满足任一即可
- OR,((DOMAIN-SUFFIX,openai.com),(DOMAIN-SUFFIX,anthropic.com)),🤖 AI 服务语法上要注意括号层级,很容易写漏。能用简单规则表达的就别用逻辑组合——可读性和性能都更好。
性能:哪些规则贵
实践建议:
- 高频命中的规则往前放,减少平均比对次数
- 用
RULE-SET代替几百条手写域名规则 PROCESS-NAME只在确实需要时用,且尽量往后放- 避免大量
DOMAIN-REGEX
怎么知道一条连接命中了哪条规则
打开 Clash Verge 的 连接 页,「规则」列直接显示命中的规则。
这是排查分流问题最快的办法:
修正示例——某个域名被 GEOIP,CN 判成了直连,但你想让它走代理:
# 全局扩展配置里
prepend-rules:
- DOMAIN-SUFFIX,example.com,🚀 节点选择prepend-rules 会插到规则列表最前面,优先级最高,且不会被订阅更新覆盖。
常用规则片段
内网直连(必备)
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,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,100.64.0.0/10,DIRECT,no-resolve
- IP-CIDR6,::1/128,DIRECT,no-resolve
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
- DOMAIN-SUFFIX,local,DIRECT
- DOMAIN-SUFFIX,lan,DIRECT避免 QUIC 影响(某些环境下 UDP 443 表现不好)
- AND,((NETWORK,UDP),(DST-PORT,443)),REJECT局域网某台设备强制直连
- SRC-IP-CIDR,192.168.1.50/32,DIRECTBT / PT 流量不走代理(避免违反服务商条款)
- DST-PORT,6881-6889,DIRECT
- PROCESS-NAME,qbittorrent.exe,DIRECT
- PROCESS-NAME,transmission-daemon,DIRECT小结
- DOMAIN-SUFFIX 是主力,KEYWORD 慎用
- 前置 IP 规则一律加 no-resolve,fake-ip 模式下更是必须
- 顺序:内网 → 拦截 → 域名 → 规则集 → GEOIP → MATCH
- 排查用连接页的「规则」列,修正用
prepend-rules
下一篇讲怎么把规则托管到外部:rule-providers 远程规则集。
相关文档
用外部规则集替代几百条手写规则。讲清楚 domain/ipcidr/classical 三种 behavior 的差异、text 与 yaml 格式、更新间隔怎么设,以及规则集不生效时怎么查。
按进程分流的完整写法:find-process-mode 怎么开、进程名怎么查、PROCESS-NAME 与 PROCESS-PATH 的区别、性能开销,以及为什么规则写了不生效。