Clash 规则分流实战:按域名与 GeoIP 实现精细化流量走向

以中国大陆网站直连、其他地区网站走代理的典型场景为例,讲解 DOMAIN-SUFFIX、GEOIP、RULE-SET 等规则类型的写法、匹配顺序与优先级,附完整可用的规则片段。

规则分流是 Clash 区别于普通代理工具的核心能力。配置文件里的 rules 段决定每一条网络请求最终走哪个代理组,判断依据可以是域名、IP 归属地、进程名或端口。写得好的规则集能做到国内网站直连、国外网站走代理、特定服务走专线,全程无需手动切换。本文按实战顺序拆解规则类型、书写格式与优先级机制,并给出一份可直接套用的规则片段。

DOC-01

规则匹配的基本结构

Clash 配置文件里的每条规则遵循统一格式:

规则类型,匹配内容,目标策略

例如:

rules:
  - DOMAIN-SUFFIX,google.com,Proxy
  - DOMAIN-SUFFIX,baidu.com,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,Proxy

三个字段分工明确:第一段是规则类型,决定用什么维度匹配;第二段是具体匹配值,依类型而变(域名、IP 段、进程名等);第三段是命中后交给哪个策略组或动作,可以是自定义的代理组名,也可以是 DIRECT(直连)、REJECT(拒绝)这类内置动作。

规则从上到下逐条比对,命中第一条就停止,后面的规则不再检查。这意味着顺序本身就是优先级,写反顺序会让精心设计的规则形同虚设。

DOC-02

DOMAIN 系列:按域名分流

域名类规则是最常用的一类,细分为几种写法,匹配范围逐级放宽:

三者的粒度关系是 DOMAIN 最精确、DOMAIN-SUFFIX 覆盖子域、DOMAIN-KEYWORD 最宽泛。实际配置里,DOMAIN-SUFFIX 覆盖了绝大多数需求,DOMAIN-KEYWORD 通常只用于处理域名结构不规律的服务。

注记

域名规则只能识别域名,无法识别通过 IP 直接访问的连接。如果目标网站没有走域名解析(例如客户端内置了固定 IP),需要改用 IP-CIDR 或 GEOIP 规则才能命中。

DOC-03

GEOIP:按 IP 归属地判断

GEOIP 规则依据目标 IP 所属的国家或地区代码进行匹配,是实现"国内直连、国外代理"这类整体策略的关键工具。写法示例:

rules:
  - GEOIP,CN,DIRECT

这条规则的含义是:任何解析结果落在中国大陆 IP 段的连接,一律直连,不经过代理。GEOIP 规则通常放在整条规则列表的靠后位置,作为域名规则未能覆盖的补充判断——先用 DOMAIN-SUFFIX 精确处理已知站点,再用 GEOIP 兜底处理其余按 IP 归属地就能正确分类的流量。

GEOIP 规则依赖内置或外部加载的 IP 地理库,mihomo 内核对该库的更新机制与匹配性能做了优化,判断速度快于早期版本。使用时注意 IP 库需要保持更新,否则可能出现归属地判断滞后的情况,尤其是新分配的 IP 段。

DOC-04

IP-CIDR 与 RULE-SET:更精细或更批量的匹配

IP-CIDR 用于匹配特定 IP 段,格式为 CIDR 网段表示法:

rules:
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT

这类规则常用于内网地址段直连,避免局域网访问被错误地送进代理隧道。IPv6 场景对应写法为 IP-CIDR6

RULE-SET 则是引用外部规则集文件,把大量域名或 IP 规则打包成一个文件,配置里只需一行引用:

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

rules:
  - RULE-SET,reject,REJECT
  - RULE-SET,direct,DIRECT
  - RULE-SET,proxy,Proxy

RULE-SET 的价值在于免去手动维护成百上千条域名规则的工作,规则集作者更新上游列表后,客户端按 interval 设定的周期自动拉取最新内容。behavior 字段说明规则集内容的类型:domain 表示域名列表,ipcidr 表示 IP 段列表,classical 表示混合了完整规则格式的列表。三种行为对应的规则集文件内部格式不同,引用时需要与实际文件类型一致,否则会解析失败。

DOC-05

完整规则片段:大陆直连 + 海外代理场景

以下是一份贴合"中国大陆网站直连、其他地区网站走代理"这一典型场景的规则片段,规则顺序已按匹配优先级排列,可直接套用并按需增删:

rules:
  # 局域网与内网地址,始终直连
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - IP-CIDR,172.16.0.0/12,DIRECT
  - IP-CIDR,127.0.0.0/8,DIRECT

  # 广告与追踪域名,直接拒绝
  - RULE-SET,reject,REJECT

  # 国内常用站点,精确直连
  - DOMAIN-SUFFIX,baidu.com,DIRECT
  - DOMAIN-SUFFIX,qq.com,DIRECT
  - DOMAIN-SUFFIX,taobao.com,DIRECT
  - DOMAIN-SUFFIX,jd.com,DIRECT
  - DOMAIN-SUFFIX,bilibili.com,DIRECT

  # 海外常见站点,走代理组
  - DOMAIN-SUFFIX,google.com,Proxy
  - DOMAIN-SUFFIX,youtube.com,Proxy
  - DOMAIN-SUFFIX,github.com,Proxy
  - DOMAIN-SUFFIX,twitter.com,Proxy

  # 引用外部维护的国内域名规则集,批量直连
  - RULE-SET,direct,DIRECT

  # 引用外部维护的代理域名规则集
  - RULE-SET,proxy,Proxy

  # 按 IP 归属地兜底:中国大陆直连
  - GEOIP,CN,DIRECT

  # 以上均未命中,统一交给代理组
  - MATCH,Proxy

这份片段体现了规则设计的通用思路:先处理特例(内网、广告拦截),再处理已知的高频域名,然后交给规则集批量覆盖长尾域名,最后用 GEOIP 和 MATCH 兜底,确保任何未被前面规则命中的流量都有明确去向,不会因为规则列表不完整而连接失败。

DOC-06

优先级机制与常见误区

理解优先级要牢记两点:

  1. 规则按书写顺序从上到下逐条比对,第一条命中的规则生效,后续规则不再参与判断。
  2. 范围越宽的规则类型放得越靠前,越容易"抢先"命中原本该由后面精确规则处理的流量,造成分流结果与预期不符。

常见的排序错误包括:把 DOMAIN-KEYWORD 放在规则列表最前面,导致大量非目标域名被误伤;把 GEOIP,CN,DIRECT 放在海外域名规则之前,导致某些通过 CDN 分发、IP 段落在中国大陆但实际需要代理访问的域名被错误直连;或者忘记在结尾加 MATCH 兜底规则,导致未命中任何规则的连接行为不确定。

调试规则时,建议使用客户端自带的连接日志或规则命中查看功能,逐条核对某个具体域名实际匹配到了哪条规则,再据此调整顺序,比凭经验反复猜测效率更高。

提醒

规则集的行为类型(domain/ipcidr/classical)必须与规则集文件的实际内容格式一致。混用会导致该规则集整体解析失败,进而让依赖它的所有域名判断失效,建议更换规则集来源时先核对文档说明的行为类型。

DOC-07

与代理组配合使用

规则最终指向的目标可以是代理组名,而不必是单个节点。配合 select(手动选择)、url-test(自动测速切换)、fallback(故障转移)等代理组类型,可以让规则分流与节点选择策略彼底解耦:规则只负责"这类流量该走代理还是直连",具体走哪个节点交给代理组自行决策。这种分层设计是 Clash 配置能够同时兼顾灵活性与可维护性的关键。

proxy-groups:
  - name: Proxy
    type: url-test
    proxies:
      - 节点A
      - 节点B
    url: "http://www.gstatic.com/generate_204"
    interval: 300

如上例所示,规则里写的 Proxy 对应这里定义的代理组,组内节点由 url-test 类型自动测速并选出延迟最低的一个,规则文件本身不需要关心具体节点信息,后续更换订阅或增删节点也不必改动规则段。

获取 Clash 客户端

规则分流需要搭配支持完整规则语法与 RULE-SET 的客户端才能生效,建议从下载页获取最新版本并按教程完成基础配置。

下载Clash