Clash 规则基础:rules 如何决定流量去向

许多用户把 Clash 的「规则模式」理解成开关,但真正决定每一条连接走代理还是直连的,是 YAML 配置里的 rules: 数组。Mihomo(原 Clash Meta)内核在收到连接后,会按从上到下的顺序逐条尝试匹配;一旦命中某条规则,立即执行对应动作,不再继续向下匹配。因此,规则顺序与语法细节,直接决定了 Netflix 是否走代理、公司内网是否误走节点、以及游戏 UDP 是否被错误 REJECT。

每条规则的基本格式为三列(部分类型有第四列参数):

TYPE,参数,策略组或动作[,附加选项]

第三列可以是 DIRECT(直连)、REJECT(拒绝)、REJECT-DROP(静默丢弃),也可以是 proxy-groups 里定义的任意 name,例如 Proxy自动选择Netflix。若第三列名称在策略组中不存在,该规则无效,连接可能落入兜底或报错。

rules ≠ proxy-groups:新手常混淆二者。rules 负责「分流决策」;proxy-groups 负责「在某一组里选哪个节点」。例如 DOMAIN-SUFFIX,google.com,Proxy 表示 Google 相关域名交给名为 Proxy 的策略组,而 Proxy 组内部可能是 select 手动选节点,或 url-test 自动测速。

出站模式(客户端里的「规则 / 全局 / 直连」)会改变 rules 是否生效:规则模式下完整执行 rules;全局模式下几乎所有流量强制走当前选中的策略组,rules 基本被绕过;直连模式则忽略代理规则。进阶用户应始终使用「规则」模式,并确保 MATCH 兜底合理。

DOMAIN 系列:域名匹配的四种写法

域名类规则在订阅配置中最常见,适合精确控制「哪些网站走代理、哪些广告域名被拦截」。Clash 支持四种域名匹配类型,精确度与性能各不相同,编写时应从具体到宽泛排列。

DOMAIN — 完全匹配

仅当请求的主机名与规则中的字符串完全一致时命中,不含子域名。

DOMAIN,www.google.com,Proxy
DOMAIN,localhost,DIRECT

适用场景:指定单个主机,例如某 API 网关、内网测试域名。若写成 DOMAIN,google.com,Proxy,则 www.google.commail.google.com 不会命中,需改用 DOMAIN-SUFFIX。

DOMAIN-SUFFIX — 后缀匹配(最常用)

当请求域名以指定后缀结尾时命中,包括自身与子域名。

DOMAIN-SUFFIX,google.com,Proxy
DOMAIN-SUFFIX,github.com,Proxy
DOMAIN-SUFFIX,cn,DIRECT

DOMAIN-SUFFIX,google.com,Proxy 会匹配 google.comwww.google.commail.google.com 等。注意后缀写 cn 会匹配所有以 .cn 结尾的域名,范围极大,一般更推荐配合 GEOIP,CN,DIRECT 处理国内流量。

DOMAIN-KEYWORD — 关键词匹配

当域名任意位置包含指定关键词时命中,灵活但容易误伤。

DOMAIN-KEYWORD,ads,REJECT
DOMAIN-KEYWORD,tracker,REJECT
DOMAIN-KEYWORD,netflix,Netflix

广告拦截规则集(如 reject 列表)大量使用 DOMAIN-KEYWORD。副作用是可能误匹配 innocuous 域名,生产环境建议优先使用精确的 DOMAIN-SUFFIX。

DOMAIN-REGEX — 正则匹配

使用 Go 正则语法匹配完整域名,功能最强,但性能开销较大,应少量使用并放在靠后位置。

DOMAIN-REGEX,^.*\.(google|youtube)\.com$,Proxy
编写顺序建议:同一服务的规则,先写具体的 DOMAIN,再写 DOMAIN-SUFFIX,避免宽泛规则「抢跑」。例如先 DOMAIN,api.example.com,DIRECT,再 DOMAIN-SUFFIX,example.com,Proxy
类型 匹配逻辑 典型用途
DOMAIN 主机名完全相等 单个 API、localhost
DOMAIN-SUFFIX 域名以后缀结尾 Google、GitHub、流媒体
DOMAIN-KEYWORD 域名包含关键词 广告/追踪拦截
DOMAIN-REGEX 正则表达式 复杂批量匹配(慎用)

GEOIP 与 IP 类规则:按 IP 地址分流

当连接已解析出目标 IP,或规则类型本身基于 IP 时,域名规则不再适用,需要使用 IP 类规则。其中 GEOIP 是中文用户最熟悉的一条——几乎每条优质订阅都包含 GEOIP,CN,DIRECT,用于让中国大陆 IP 直连,降低延迟并节省节点流量。

GEOIP — 按 GeoIP 数据库国家/地区码

GEOIP,CN,DIRECT
GEOIP,US,Proxy
GEOIP,LAN,DIRECT

CN 表示中国大陆 IP 段;LAN 表示 RFC1918 私有地址(10.x、172.16–31.x、192.168.x 等)。GEOIP 查询依赖 Mihomo 内置的 GeoIP 数据库(或 GeoSite/GeoIP 合并数据),需定期随客户端/订阅更新,否则新分配 IP 段可能判断不准。

IP-CIDR / IP-CIDR6 — 指定网段

IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR6,2001:db8::/32,DIRECT,no-resolve

用于精确指定 IPv4/IPv6 网段。局域网直连、公司 VPN 网段、特定 CDN 节点常写在此类规则中。第四列 no-resolve 表示:若规则参数是 IP 而非域名,则跳过 DNS 解析步骤,避免无意义的解析请求,并防止 fake-ip 模式下 GEOIP 与 IP-CIDR 行为异常。

其他常见 IP / 端口规则

  • SRC-IP-CIDR,192.168.1.0/24,DIRECT — 按来源 IP 匹配,OpenWrt 透明代理场景较常见。
  • DST-PORT,443,Proxy — 按目标端口匹配,较少单独使用。
  • PROCESS-NAME,Telegram.exe,Proxy — 按进程名匹配(部分平台支持),适合桌面端精确分流。
fake-ip 与 GEOIP:启用 dns.enhanced-mode: fake-ip 时,Mihomo 可能先用虚拟 IP 建立连接,再通过域名还原真实地址。若发现 GEOIP 判断异常,检查 DNS 配置中的 fake-ip-filter,或在 IP 规则上添加 no-resolve。TUN 模式下更应在规则靠前位置写全局域网 CIDR 直连。

MATCH 兜底规则与优先级实战

MATCH 是 rules 数组的最后一道防线:当前面所有规则都未命中时,MATCH 捕获剩余全部流量。语法极简:

MATCH,Proxy
MATCH,DIRECT

绝大多数订阅在末尾使用 MATCH,Proxy,表示「未识别的国外流量默认走代理」;部分保守配置使用 MATCH,DIRECT,仅明确列出的域名/IP 才走代理。MATCH 必须放在 rules 最后,且通常只需一条——若写多条 MATCH,只有第一条会真正起作用。

理解优先级的一个典型片段如下(简化示意):

rules:
  - DOMAIN-SUFFIX,company.internal,DIRECT
  - DOMAIN-KEYWORD,ads,REJECT
  - DOMAIN-SUFFIX,youtube.com,Proxy
  - GEOIP,CN,DIRECT
  - GEOIP,LAN,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - MATCH,Proxy

访问 www.youtube.com 时,第 3 条 DOMAIN-SUFFIX 先命中,走 Proxy,不会再执行 GEOIP,CN。访问某国内小众网站若域名未命中任何 DOMAIN 规则,但 IP 属于 CN,则第 4 条 GEOIP 命中直连。若用户抱怨「国内网站走了代理」,排查步骤应为:① 查看连接日志命中的规则名;② 检查前面是否有 DOMAIN 规则误指向 Proxy;③ 确认客户端处于规则模式而非全局模式。

proxy-groups 策略组:规则第三列的「目的地」

规则只负责把流量「分拣」到某个名字;策略组定义该名字背后的行为。常见 type 如下:

type 行为 典型命名
select 手动选择节点或子组 Proxy、节点选择
url-test 定时测速,自动选延迟最低 自动选择、香港自动
fallback 按顺序尝试,失败则切换下一个 故障转移
load-balance 负载均衡(多种算法) 负载均衡组

规则与策略组配合示例:为 Netflix 单独建组,并在 rules 中引用。

proxy-groups:
  - name: Proxy
    type: select
    proxies: [自动选择, DIRECT, 香港-01, 新加坡-01]
  - name: Netflix
    type: select
    proxies: [美国-NF-01, 美国-NF-02, DIRECT]
  - name: 自动选择
    type: url-test
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies: [香港-01, 新加坡-01, 日本-01]

rules:
  - DOMAIN-SUFFIX,netflix.com,Netflix
  - DOMAIN-SUFFIX,nflxvideo.net,Netflix
  - GEOIP,CN,DIRECT
  - MATCH,Proxy

注意 proxies 列表里可以嵌套其他策略组名(如「自动选择」),实现「规则 → 策略组 → 子组 → 具体节点」的分层结构。编写自定义规则时,第三列字符串必须与 proxy-groups.name 大小写完全一致

Mihomo 还支持 rule-providers:从外部 YAML 文件动态加载规则(如 Loyalsoldier 的 reject / proxy 列表),适合维护大量 DOMAIN 条目而不撑爆主配置。引用方式:RULE-SET,reject,REJECT,需在 rule-providers 段声明 provider 名称与 URL。

实战:Merge 覆写与可复用模板

直接编辑远程订阅会在下次更新时被覆盖。推荐在 Clash Verge Rev、Mihomo Party 中创建 Merge 类型覆写,用 prepend-rules 在订阅规则之前插入自定义条目(优先级更高),或用 append-rules 追加(注意仍在 MATCH 之前才有效——若订阅末尾已有 MATCH,append 的内容实际上永远不会被匹配,除非订阅允许插入 MATCH 之前)。

# merge-custom-rules.yaml
prepend-rules:
  - DOMAIN-SUFFIX,mycompany.com,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - DOMAIN-SUFFIX,openai.com,Proxy
  - DOMAIN-SUFFIX,chatgpt.com,Proxy

若需追加广告拦截且订阅未内置,可配合 rule-providers(部分客户端在覆写中支持):

rule-providers:
  reject-ads:
    type: http
    behavior: domain
    url: "https://cdn.example/rules/reject.txt"
    path: ./rules/reject-ads.yaml
    interval: 86400

prepend-rules:
  - RULE-SET,reject-ads,REJECT

验证配置是否生效:开启客户端「连接」页,访问目标网站,查看每条连接右侧显示的规则类型与策略组。若显示 MATCH / Proxy 但预期应直连,说明前面缺少 GEOIP 或 DOMAIN 条目,或规则顺序需调整。

更完整的安装与订阅导入流程,可参考本站《Clash 完全使用指南》;OpenWrt 透明代理场景下的规则写法,见《Clash TUN 模式 OpenWrt 教程》。

常见问题

规则写了但不生效?

检查:① 第三列策略组名是否拼写正确;② 是否处于全局/直连模式;③ Merge 覆写是否已启用并合并到当前配置;④ YAML 缩进是否错误(须用空格,勿用 Tab)。

DOMAIN-SUFFIX 与 GEOIP 哪个优先?

谁写在前面谁优先。 并非 DOMAIN 一定优于 GEOIP——完全取决于 rules 数组中的顺序。一般把精确 DOMAIN 放前,GEOIP 放中后段,MATCH 放最后。

能否让某域名强制直连,即使它在 Proxy 组里?

可以。在 rules 里为该域名写 DOMAIN-SUFFIX,xxx.com,DIRECT,并放在可能指向 Proxy 的宽泛规则之前。规则模式以 rules 为准,与节点列表无关。

REJECT 和 REJECT-DROP 有何区别?

二者都拒绝连接;REJECT 可能向客户端返回拒绝响应,REJECT-DROP 直接丢弃,常用于广告域名以减少应用重试。广告拦截列表多用 REJECT。

相比只能「全局开/关」的一键加速器,Clash + Mihomo 的规则体系最大的优势在于透明与可控:每一条 DOMAIN、GEOIP、MATCH 都清晰可见,可通过覆写微调而不依赖封闭黑箱。配合 url-test 策略组与 TUN 模式,同一套 rules 既能照顾日常浏览分流,也能覆盖游戏与命令行场景——这是进阶用户长期留在 Clash 生态的核心原因。

立即免费下载 Clash,开启流畅上网新体验 →