Clash 中文网搜索

Clash 规则详解:分流规则写法、全部规则类型与匹配顺序

Clash 中文网编辑部 · 更新于 2026/10/22

Clash 的 rules 决定每个连接走哪个代理组。规则格式为 类型,匹配内容,策略[,参数],从上到下逐条匹配,命中第一条即停止。 因此具体的规则要写在前面,MATCH 兜底规则必须写在最后。

规则格式

rules:
  - DOMAIN-SUFFIX,google.com,节点选择
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,节点选择
部分 说明 示例
类型 按什么条件匹配 DOMAIN-SUFFIX
匹配内容 域名、IP 段、进程名等 google.com
策略 命中后交给谁 代理组名、节点名、DIRECT、REJECT
参数(可选) 附加选项 no-resolve、src

匹配顺序:从上到下,命中即停

这是理解规则最重要的一点。看这个例子:

rules:
  - GEOSITE,cn,DIRECT
  - DOMAIN-SUFFIX,baidu.com,节点选择
  - MATCH,节点选择

访问 baidu.com 时,第一条 GEOSITE,cn 已经命中(百度属于 cn 分类),直接走 DIRECT,第二条永远不会生效。想让百度走代理,必须把第二条移到第一条前面。

所以:

  • 越具体的规则越靠前(单个域名 > 某类网站 > 某个国家 > 兜底);
  • 自定义规则一般放在最前面(客户端的“前置规则”就是这个意思);
  • MATCH 永远放在最后,它之后的规则都不会被匹配。

内置策略

策略 效果
DIRECT 直接连接,不走代理
REJECT 拒绝连接(立即返回失败),常用于广告拦截
REJECT-DROP 静默丢弃,不返回任何响应
PASS 跳过这条规则,继续匹配下一条

域名类规则

类型 示例 匹配范围
DOMAIN DOMAIN,www.google.com,节点选择 仅 www.google.com
DOMAIN-SUFFIX DOMAIN-SUFFIX,google.com,节点选择 google.com 及所有子域名
DOMAIN-KEYWORD DOMAIN-KEYWORD,google,节点选择 包含 google 的所有域名
DOMAIN-REGEX DOMAIN-REGEX,^ad\d+\.example\.com$,REJECT 正则匹配
DOMAIN-WILDCARD DOMAIN-WILDCARD,*.example.*,DIRECT 通配符,支持 * 和 ?
GEOSITE GEOSITE,youtube,节点选择 域名数据库中的分类,见 GeoSite

DOMAIN-SUFFIX 的边界

DOMAIN-SUFFIX,google.com 匹配 google.com、www.google.com、mail.google.com,但不匹配 notgoogle.com——它按“点”分隔的完整后缀匹配,不是字符串结尾匹配。

DOMAIN-KEYWORD 要慎用

DOMAIN-KEYWORD,google 会匹配 google.com,也会匹配 googleapis.cn、mygoogle-shop.com 等,容易误伤。能用 DOMAIN-SUFFIX 就不用 KEYWORD。

IP 类规则

类型 示例 说明
IP-CIDR IP-CIDR,192.168.0.0/16,DIRECT,no-resolve IPv4 段
IP-CIDR6 IP-CIDR6,fd00::/8,DIRECT,no-resolve IPv6 段
IP-SUFFIX IP-SUFFIX,8.8.8.8/24,DIRECT 按 IP 后缀位匹配
GEOIP GEOIP,CN,DIRECT IP 所属国家
IP-ASN IP-ASN,13335,节点选择 IP 所属自治域(如 Cloudflare 为 13335)
SRC-IP-CIDR SRC-IP-CIDR,192.168.1.50/32,DIRECT 按来源设备匹配(局域网共享时有用)
SRC-GEOIP / SRC-IP-ASN SRC-GEOIP,CN,DIRECT 按来源 IP 的国家 / ASN

no-resolve 的作用

当请求的目标是域名时,IP 类规则需要先做 DNS 解析,才能知道这个域名对应的 IP 是否在范围内。这带来两个问题:

  1. 多一次 DNS 查询,变慢;
  2. 如果解析发给了本地 DNS,可能造成 DNS 泄漏。

加上 no-resolve 表示:遇到域名请求时,直接跳过这条规则,不去解析;只有目标本身就是 IP 时才匹配。建议 IP 类规则一律加上 no-resolve,尤其是放在域名规则之前的。

端口、进程与网络类型

类型 示例 说明
DST-PORT DST-PORT,22,DIRECT 目标端口,支持范围 6000-7000
SRC-PORT SRC-PORT,7777,DIRECT 来源端口
IN-PORT IN-PORT,7891,DIRECT 从哪个入站端口进入
IN-TYPE IN-TYPE,SOCKS5,DIRECT 入站类型(HTTP、SOCKS、TUN 等)
PROCESS-NAME PROCESS-NAME,steam.exe,DIRECT 按程序名;安卓上可匹配包名
PROCESS-PATH PROCESS-PATH,/usr/bin/curl,节点选择 按程序完整路径
PROCESS-NAME-REGEX PROCESS-NAME-REGEX,(?i)telegram.*,节点选择 正则匹配程序名
NETWORK NETWORK,udp,DIRECT TCP 或 UDP
UID UID,1000,DIRECT Linux 用户 ID

进程规则的注意事项

  • 需要内核能识别连接所属进程:find-process-mode 不能为 off;
  • TUN 模式下识别最完整;系统代理模式下部分连接无法识别;
  • Windows 写 xxx.exe 完整文件名;macOS 写进程名(如 Telegram);安卓写包名(如 org.telegram.messenger);
  • 准确的进程名可以在客户端连接页的「进程」列查看。

规则集与逻辑规则

RULE-SET

rules:
  - RULE-SET,reject,REJECT
  - RULE-SET,cn-ip,DIRECT,no-resolve

引用 rule-providers 中定义的规则集合,适合大量规则。写法见 规则集合教程。

AND / OR / NOT

逻辑规则可以组合多个条件:

rules:
  # 同时满足:UDP 且目标端口 443 → 拦截(阻止 QUIC,让 YouTube 走 TCP)
  - AND,((NETWORK,udp),(DST-PORT,443)),REJECT
  # 满足其一:目标端口 80 或 443 → 代理
  - OR,((DST-PORT,80),(DST-PORT,443)),节点选择
  # 取反:不是中国 IP → 代理
  - NOT,((GEOIP,CN)),节点选择

注意括号:整个条件列表外层一对括号,每个条件再各一对括号。

SUB-RULE(子规则)

子规则可以把一组规则“打包”,满足条件时进入子规则继续匹配:

sub-rules:
  game-rules:
    - DST-PORT,3074,游戏节点
    - NETWORK,udp,游戏节点
    - MATCH,DIRECT

rules:
  - SUB-RULE,(PROCESS-NAME,game.exe),game-rules
  - MATCH,节点选择

当连接来自 game.exe 时,进入 game-rules 继续匹配。适合为特定程序设置一整套独立规则。

MATCH

  - MATCH,节点选择

匹配所有剩余流量,必须放在最后。

一份推荐的规则顺序

rules:
  # 1. 局域网与私有地址直连
  - GEOSITE,private,DIRECT
  - GEOIP,private,DIRECT,no-resolve
  # 2. 广告拦截
  - GEOSITE,category-ads-all,REJECT
  # 3. 你自己的特殊需求(最具体的放前面)
  - DOMAIN-SUFFIX,corp.example.com,DIRECT
  - PROCESS-NAME,qbittorrent.exe,DIRECT
  - GEOSITE,openai,AI 服务
  # 4. 特定服务
  - GEOSITE,telegram,节点选择
  - GEOSITE,youtube,流媒体
  # 5. 国内直连
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  # 6. 其余走代理
  - MATCH,节点选择

在客户端中添加规则

订阅中的规则会在更新时被覆盖,自定义规则应通过客户端的覆写功能添加:

客户端 方法
Clash Verge Rev 编辑规则(前置规则)
FlClash 进阶配置 → 附加规则
Clash Party 订阅右键「编辑规则」或 覆写(+rules)
Clash Nyanpasu 配置转换
自己维护配置 直接写在 rules 中

想查看某个网站命中了哪条规则,可以用 Clash Verge Rev 的 连接页。

常见错误

错误 后果 解决
规则放在 MATCH 之后 永远不会匹配 移到 MATCH 之前,或用前置规则
被更前面的规则先匹配 规则不生效 调整顺序
策略名称不一致(emoji、空格、全半角) 内核报错或加载失败 从代理页复制准确的组名
IP 规则不加 no-resolve 多余的 DNS 查询、可能泄漏 加上 no-resolve
滥用 DOMAIN-KEYWORD 误伤其他网站 改用 DOMAIN-SUFFIX
英文逗号写成中文逗号 规则无法解析 使用英文逗号

相关教程

常见问题

规则是怎么匹配的?

从上到下逐条匹配,命中第一条后立即停止,所以越具体的规则应该放得越靠前,MATCH 必须放在最后。

规则的策略可以填什么?

代理组名称、节点名称,或内置策略 DIRECT(直连)、REJECT(拦截)、REJECT-DROP(静默丢弃)、PASS(跳过此条继续匹配)。

DOMAIN-SUFFIX 和 DOMAIN-KEYWORD 有什么区别?

DOMAIN-SUFFIX,google.com 匹配 google.com 及其所有子域名;DOMAIN-KEYWORD,google 匹配任何包含 google 的域名,范围更大、更容易误伤。

规则太多会变慢吗?

少量的 DOMAIN-SUFFIX 规则几乎没有影响;上万条规则建议使用 RULE-SET(尤其是 mrs 格式)或 GEOSITE,它们使用高效的数据结构匹配。

为什么我加的规则不生效?

最常见的原因是被更前面的规则先匹配了,或者策略名称与代理组名不完全一致。在客户端的连接页查看该连接实际命中的规则即可定位。