当你完成 Clash 的基础配置后,很快就会遇到这样的需求:国内网站直连、境外网站走代理、公司内网不走代理、游戏流量单独处理、顺便把广告拦掉。这些都不是「开代理」能解决的,而是 Clash 规则引擎的核心能力。本文从规则语法讲起,带你一步步构建属于自己的分流策略。
规则引擎是如何工作的
Clash 处理每一个网络请求时,会按顺序逐条匹配 rules 列表中的规则。一旦某条规则命中,就立即执行对应的动作(走某个代理组、直连或拒绝),不再继续往下匹配。因此规则的排列顺序至关重要——越具体的规则应该放在越前面,越宽泛的规则放在越后面。
典型的规则列表结构如下:
rules:
- DOMAIN-SUFFIX,company.internal,DIRECT
- DOMAIN-SUFFIX,google.com,Proxy
- GEOIP,CN,DIRECT
- MATCH,Proxy
最后一条 MATCH 是兜底规则,必须放在列表末尾,否则后面的规则永远不会被执行。
GEOSITE、PROCESS-NAME、RULE-SET),功能比原版 Clash 更强大。本文示例均基于 Mihomo 内核语法。
常用规则类型详解
域名类规则
DOMAIN 精确匹配完整域名,DOMAIN-SUFFIX 匹配域名及其所有子域名,DOMAIN-KEYWORD 匹配域名中包含指定关键词的请求。三者从精确到模糊,使用场景不同:
DOMAIN,www.google.com,Proxy— 仅匹配 www.google.comDOMAIN-SUFFIX,google.com,Proxy— 匹配 google.com 及所有子域(如 mail.google.com)DOMAIN-KEYWORD,google,Proxy— 匹配域名中含 google 的所有请求
日常配置中,DOMAIN-SUFFIX 用得最多,既能覆盖子域又不会误匹配无关域名。只有在需要精确控制时才用 DOMAIN。
IP 类规则
IP-CIDR 和 IP-CIDR6 按 IP 地址段匹配,常用于内网直连或屏蔽特定 IP 段。例如:
- 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
这三条是 RFC 1918 定义的私有地址段,几乎所有订阅配置都会包含,确保局域网设备互访不走代理。no-resolve 表示不为此规则触发 DNS 解析,避免循环查询。
地理位置规则
GEOIP 根据 IP 归属地匹配,GEOSITE 根据域名分类数据库匹配。这是实现「国内直连、国外代理」最简洁的方式:
- GEOSITE,cn,DIRECT
- GEOSITE,google,Proxy
- GEOIP,CN,DIRECT
- GEOIP,LAN,DIRECT
GEOSITE 基于域名分类,比 GEOIP 更准确——例如一个部署在境外的 CDN 节点,GEOIP 可能误判为境外,而 GEOSITE,cn 能正确识别为国内服务。
进程与端口规则
PROCESS-NAME 按发起请求的程序名匹配,适合让特定软件走指定线路:
- PROCESS-NAME,Telegram.exe,Proxy
- PROCESS-NAME,WeChat.exe,DIRECT
- PROCESS-NAME,steam.exe,Game
DST-PORT 和 SRC-PORT 按目标或源端口匹配,较少单独使用,但在精细控制游戏 UDP 流量时很有用。
代理组:规则的目标
规则右侧的第三个参数是代理组名称或动作。除了 DIRECT(直连)、REJECT(拒绝)和 REJECT-DROP(静默丢弃)之外,其余都是你自定义的代理组。
常见的代理组类型:
- select — 手动选择,界面上显示为下拉列表,最常用
- url-test — 自动测速,选择延迟最低的节点
- fallback — 按顺序尝试,当前节点不可用时自动切换
- load-balance — 负载均衡,在多个节点间分配流量
- relay — 链式代理,流量依次经过多个节点
一个实用的多组策略示例:
proxy-groups:
- name: Proxy
type: select
proxies: [Auto, HK, JP, US, DIRECT]
- name: Auto
type: url-test
proxies: [HK, JP, US]
url: http://www.gstatic.com/generate_204
interval: 300
- name: AdBlock
type: select
proxies: [REJECT, DIRECT]
Rule-Provider:订阅第三方规则集
手动维护几百条规则不现实。Rule-Provider 允许你从远程 URL 订阅规则集,Clash 会定期拉取更新。配置格式如下:
rule-providers:
reject:
type: http
behavior: domain
url: "https://example.com/rules/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://example.com/rules/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
rules:
- RULE-SET,reject,AdBlock
- RULE-SET,direct,DIRECT
- GEOSITE,cn,DIRECT
- MATCH,Proxy
behavior 可选 domain、ipcidr 或 classical。domain 和 ipcidr 是优化过的二进制格式,匹配速度更快;classical 兼容完整 Clash 规则语法,灵活性最高。
REJECT 导致服务不可用,或指向恶意节点窃取流量。
广告拦截实战
Clash 的广告拦截原理很简单:将广告域名匹配到 REJECT 或 REJECT-DROP,请求在本地被丢弃,广告内容永远不会加载。相比浏览器插件,Clash 在系统层面拦截,能覆盖所有 App 内的广告请求。
推荐的广告拦截规则排列顺序:
- 局域网和内网 IP 直连(避免误拦本地服务)
- 广告域名规则集 →
REJECT - 国内域名 →
DIRECT - 国外域名 →
Proxy MATCH兜底
开启广告拦截后,部分网站的「反广告拦截」检测可能触发,页面会提示你关闭广告拦截器。这是正常现象,可以在规则中为特定域名添加例外:
- DOMAIN-SUFFIX,anti-adblock-example.com,DIRECT
将例外规则放在广告规则集之前,这样会优先命中直连而非被拒绝。
实战:定制你的分流策略
以下是一个适合大多数用户的完整规则框架,你可以在此基础上增减:
rules:
# 1. 本地与内网
- GEOIP,LAN,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
# 2. 广告拦截
- RULE-SET,reject,REJECT
# 3. 自定义直连(公司、银行、政务)
- DOMAIN-SUFFIX,company.com,DIRECT
- GEOSITE,cn,DIRECT
# 4. 自定义代理(特定服务走特定节点)
- DOMAIN-SUFFIX,openai.com,US
- DOMAIN-SUFFIX,netflix.com,Proxy
# 5. 国内 IP 直连
- GEOIP,CN,DIRECT
# 6. 兜底
- MATCH,Proxy
在 Clash Verge Rev 等客户端中,你可以通过「配置 → 规则」界面可视化编辑,也可以直接修改 YAML 文件。修改后点击「重新加载配置」即可生效,无需重启客户端。
规则调试:确认流量走向
写完规则后,如何验证某条流量确实按预期分流?Clash 提供了连接日志功能。在 Clash Verge Rev 中打开「连接」面板,可以实时看到每个请求匹配的域名、目标 IP、使用的规则和最终走的代理组。
调试技巧:
- 先访问目标网站,在连接日志中找到对应条目
- 查看「规则」列,确认命中了哪条规则——如果不是预期的规则,说明顺序需要调整
- 如果显示
MATCH,说明前面所有规则都未命中,需要添加更具体的规则 - 修改规则后重新加载配置,刷新页面复测
对于批量验证,可以使用 Clash 的 API 接口查询规则命中情况。进阶用户还可以通过 LOG-LEVEL 设置为 debug,在日志文件中看到完整的规则匹配过程,但日常使用时建议保持 info 级别,避免日志文件膨胀。
规则合并:覆写 vs 替换
使用订阅时,你的自定义规则如何与订阅提供的规则共存?常见有两种方式:
- 前置规则(prepend-rules) — 你的规则插入到订阅规则之前,优先级最高,适合添加直连例外或广告拦截
- 后置规则(append-rules) — 你的规则追加到订阅规则之后,适合修改兜底策略
在 Clash Verge Rev 的「配置 → 覆写」功能中,可以用 YAML 片段追加规则而无需修改完整配置文件。例如只添加广告拦截和自定义直连:
prepend-rules:
- RULE-SET,reject,REJECT
- DOMAIN-SUFFIX,mycompany.com,DIRECT
这种方式的好处是订阅更新时不会覆盖你的自定义规则,是日常维护最推荐的做法。
常见问题排查
规则修改后没有生效
确认已重新加载配置(不是仅保存文件)。部分客户端有「规则」和「配置」两个编辑入口,改错了位置不会生效。检查 YAML 缩进是否正确——YAML 对缩进极其敏感,少一个空格就会导致整段规则被忽略。
国内网站走了代理
通常是 GEOIP,CN,DIRECT 位置太靠后,被前面的 MATCH,Proxy 抢先匹配。将 GEOIP/GEOSITE 规则上移,确保兜底规则在最后。
广告拦截导致 App 功能异常
某些 App 的统计、推送、更新服务域名与广告域名在同一规则集里。为受影响的 App 添加 DOMAIN-SUFFIX 例外,或暂时将广告规则集从 REJECT 改为 DIRECT 排查具体域名。
总结
Clash 的规则系统是分流代理的灵魂。掌握 DOMAIN-SUFFIX、GEOSITE、GEOIP 三类核心规则,配合 Rule-Provider 订阅维护,就能搭建一套稳定、个性化的分流策略。广告拦截只需将广告域名指向 REJECT,在规则顺序正确的前提下即可实现系统级去广告。
规则配置没有「一次到位」——随着使用场景变化,你会不断微调。建议从订阅提供的默认规则出发,每次只添加一两条自定义规则并测试,比一次性重写全部规则要稳妥得多。