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,api.example.com,Proxy只对这个域名生效,子域名不受影响。 - DOMAIN-SUFFIX:匹配域名及其所有子域名,例如
DOMAIN-SUFFIX,youtube.com,Proxy会同时覆盖www.youtube.com、m.youtube.com等。这是日常使用频率最高的规则类型。 - DOMAIN-KEYWORD:只要域名包含指定关键字就命中,例如
DOMAIN-KEYWORD,google,Proxy会匹配到所有含 google 字样的域名,匹配范围最宽,也最容易误伤,建议谨慎使用并放在规则列表靠后位置。
三者的粒度关系是 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
优先级机制与常见误区
理解优先级要牢记两点:
- 规则按书写顺序从上到下逐条比对,第一条命中的规则生效,后续规则不再参与判断。
- 范围越宽的规则类型放得越靠前,越容易"抢先"命中原本该由后面精确规则处理的流量,造成分流结果与预期不符。
常见的排序错误包括:把 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 的客户端才能生效,建议从下载页获取最新版本并按教程完成基础配置。