分流规则怎么设?Clash 规则模式、规则集与策略组入门
分流规则要解决的问题只有一个:每条连接,该走代理还是直连。结论先给:日常用规则模式,国内站直连,国外站走代理,对出口敏感的 AI 工具域名固定走一个节点。实现靠三块积木:策略组、规则、规则集。这篇把三块积木讲清,给一份示意配置,再列出最常见的翻车点。
本文写的是 Clash 系(Mihomo 内核)的写法。其他客户端有自己的路由界面,思路相通,语法不能直接搬。文中的配置全部是示意:域名、地址、名称都是占位,用来讲结构,不能原样复制。字段含义以 Mihomo 项目的官方说明为准,入口见 Mihomo 官方仓库。
先分清三种模式:规则模式、全局、直连
配置里有一个叫 mode 的字段,客户端通常在类似“代理”的页面顶部提供切换:
| 模式 | 含义 | 什么时候用 |
|---|---|---|
| 规则 | 逐条匹配规则,命中哪条就按哪条的去向走 | 日常默认,Clash分流 的主战场 |
| 全局 | 不看规则,所有流量走选定的节点 | 临时排错、对照 |
| 直连 | 不看规则,所有流量都不走代理 | 判断问题是不是出在代理上 |
后面讲的所有东西,都只在规则模式下生效。两种模式的概念对照,看术语页 全局模式与规则模式。
三块积木怎么配合:策略组、规则、规则集
节点来自订阅,是最底层的原料。节点之上是三层:
1. 策略组:把一批节点包装成一个“选项”。常见类型:
| 类型 | 行为 | 适合 |
|---|---|---|
| select | 手动选一个,选哪个就用哪个 | 要固定出口的服务 |
| url-test | 定时测速,自动选延迟较低的 | 普通网页浏览 |
| fallback | 按顺序用第一个可用节点,失效才切换 | 想要稳定顺序时 |
2. 规则:一行一条,格式是“类型,匹配内容,去向”,自上而下匹配,命中就停。最常见的几种:
| 规则类型 | 匹配什么 |
|---|---|
| DOMAIN | 完全一致的域名 |
| DOMAIN-SUFFIX | 域名后缀,连同所有子域名 |
| DOMAIN-KEYWORD | 域名里包含某个关键词 |
| IP-CIDR | 一段 IP 地址 |
| GEOIP | 按 IP 归属地匹配 |
| RULE-SET | 引用一份外部规则清单 |
| MATCH | 兜底,前面都没命中就走它 |
3. 规则集:把成百上千条规则放进一份外部清单,在规则里用一行 RULE-SET 引用。好处是清单可以自动更新,不用你手写几千行。注意清单的类型要和内容对应,声明为域名类就得是域名清单,声明为 IP 类就得是 IP 清单,对不上就是空规则。
Clash分流示意配置:国内直连、国外代理、AI 域名固定节点
下面这份只讲结构。名称、域名、地址全是占位,节点名要换成你订阅里真实存在的名字:
mode: rule # 示意配置:只说明结构,不能原样复制使用
proxy-groups:
# 日常出口:手动选择,可以包含自动测速组和直连
- name: 默认代理
type: select
proxies: [自动选择, 节点A, 节点B, DIRECT]
# 自动测速:适合普通网页
- name: 自动选择
type: url-test
proxies: [节点A, 节点B]
url: https://example.com/health # 占位测速地址
interval: 300
# AI 工具专用:只放一个固定节点,避免出口地区来回跳
- name: AI专用
type: select
proxies: [节点A]
rule-providers:
# 一份托管在别处的域名清单,地址是占位
cn-direct:
type: http
behavior: domain
format: yaml
url: https://example.com/rules/cn-direct.yaml
path: ./ruleset/cn-direct.yaml
interval: 86400
rules:
# 自上而下匹配,命中即停止,具体的放前面,宽泛的放后面
- DOMAIN-SUFFIX,ai.example.com,AI专用 # 占位的 AI 服务域名
- DOMAIN-SUFFIX,example.org,DIRECT # 占位:你想固定直连的站点
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve # 局域网地址直连
- RULE-SET,cn-direct,DIRECT # 批量直连
- GEOIP,CN,DIRECT # 按 IP 归属地:国内直连
- MATCH,默认代理 # 兜底:其余走代理
读这份配置抓三个点:
- 顺序就是优先级。AI 域名的规则必须排在规则集和 GEOIP 前面,否则会被更宽泛的规则先拿走;
- AI 专用组里只放一个节点,类型用手动选择。自动测速会在节点之间切换,出口地区一变,对出口敏感的服务就容易报错。为什么要固定、怎么选节点地区,看 AI开发环境网络;
- MATCH 永远放最后,它之后写的规则不会被执行。
进阶:一条连接是怎么被规则一条条比下来的,no-resolve 又是什么
前面只说了“自上而下,命中即停”,这里往里再走一层,解释为什么示意配置里有一条规则后面挂着 no-resolve。
每来一条新连接,内核会拿着目标去和规则逐条比对。目标有两种形态:一种是域名,一种是 IP。域名类规则(DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD)直接拿域名比,不需要任何解析。IP 类规则(IP-CIDR、GEOIP)必须知道对方的 IP 才能比。如果连接请求里只有域名,内核可能得先把域名解析成 IP,才能判断这条 IP 规则是否命中。
这一步解析不是没有代价的:它会多出一次域名查询,查询走哪条路,又会牵扯到 DNS 的设置。no-resolve 的作用,就是告诉内核:遇到只有域名的请求,别为了这条 IP 规则去解析,直接跳过它。 所以局域网网段这类纯 IP 规则,通常会加上它。
由此得到三条朴素的排布原则:
- 域名类规则放前面,IP 类和 GEOIP 放后面,让大多数连接在不需要解析的阶段就命中;
- IP 类规则一般加 no-resolve,除非你明确需要先解析再判断;
- MATCH 兜底放最后,前面所有规则都比完才轮到它。
不同 DNS 模式下,解析与匹配的先后行为会有差异,这一块比较细,建议配合 DNS泄漏检测 一起看,具体字段含义以 Mihomo 官方说明为准。
在客户端里改规则,怎么不被订阅更新覆盖
订阅每次更新,都会用机场返回的内容覆盖生成的配置文件,你直接在里面改的规则会消失。正确做法是用客户端类似“扩展配置”或“覆写”的功能,把自己的内容叠加在订阅之上。写法示意如下,字段名以所用客户端的说明为准:
prepend-rules: # 示意:覆写里把自己的规则放到订阅规则前面
- DOMAIN-SUFFIX,ai.example.com,AI专用
引用的策略组必须真实存在。订阅里没有 AI专用 这个组,就要在覆写里一并新增,或者改成引用订阅里已有的组名。
改完怎么验证:到类似“连接”的页面,访问一次目标网站,看新出现的那条连接命中的是哪条规则、走了哪个组。比盯着配置猜靠谱得多。订阅怎么导入、怎么选中配置,看 Clash Verge导入订阅教程。
按场景对号入座:5 种常见需求,规则该怎么落地
如果你想让某个下载工具或游戏平台直连,省点流量:先到类似“连接”的页面,确认它实际访问的域名,再写一条后缀匹配的直连规则,放在宽泛规则之前。要提醒的是,这个软件如果根本不走系统代理,规则就拦不到它,那是 TUN模式设置 才能解决的事。
如果你有两种需求,比如开发用一个地区、其他服务用另一个地区:建两个只放一个节点的手动选择组,各自指向不同的节点,再分别写规则。节点名一定要换成你订阅里真实存在的名字,别照抄示意。
如果公司或学校的内网打不开了:多半是内网地址被代理了。先向单位确认内网网段或域名后缀,各写一条直连规则放在最前面。涉及单位网络,按单位的规定办。
如果你只想让少数网站走代理,其余全部直连:思路反过来写,把兜底 MATCH 指向直连,只为需要代理的域名逐条写规则指向代理组。这种“名单式”的写法干净,代价是漏写一个站点它就打不开,需要你持续维护。
如果你不想自己写,只想用订阅自带的规则:完全可以。保持规则模式,遇到个别站点不对,再用覆写加一条,别一上来就大改。除了常见的客户端,基于同一内核的 Mihomo Party 也有自己的扩展入口,名字和位置各客户端不同。
分流规则常见错误:七条自查清单
| 现象 | 常见原因 | 怎么办 |
|---|---|---|
| 新加的规则不生效 | 前面有更宽泛的规则先命中;改的是订阅文件被覆盖;配置没重载 | 把规则前移,改用覆写,重新加载配置 |
| 提示找不到策略组 | 规则里写的名字与组名不完全一致,空格、大小写、全半角都算 | 复制粘贴组名,别手敲 |
| 规则集一直是空的 | 清单地址本身要走代理才能下载,或类型与内容对不上 | 先确保有可用节点,再核对类型 |
| 国内网站反而变慢 | 国内域名误走了代理,直连规则放得太靠后,地理数据过旧 | 把直连规则前移,更新地理数据 |
| AI 站点出口来回跳 | 指向了自动测速组 | 改成只放固定节点的手动组 |
| 局域网设备打不开 | 内网地址被代理了 | 加一条内网 IP 段直连,放在前面 |
| 改完没有变化 | 已建立的连接沿用旧路径 | 在连接页面关掉旧连接再试 |
还有一个不太显眼的因素:规则靠域名匹配,但设备如果先在本地把域名解析成了 IP,规则就只能靠 IP 判断。DNS 的配置会影响分流是否按预期工作,见 DNS泄漏检测。命令行和游戏这类不走系统代理的软件,规则再对也不会被执行,那是 TUN模式设置 要解决的问题。
写分流规则时最容易信错的 5 个说法
误区 1:规则越多越好,把网上几千条全抄进来。 为什么不对:规则多不等于分流准,反而让排错变难,出了问题你不知道是哪一条在起作用。正确做法:订阅自带规则够用就先用,只为你真正遇到的问题加规则,一次一条。
误区 2:GEOIP,CN 放在最前面,一条就把国内站搞定。 为什么不对:它依赖地理数据库,数据过旧时会误判;放得太靠前,还会盖住后面更精确的规则。正确做法:具体域名规则在前,GEOIP 放在偏后的位置,再由 MATCH 兜底。
误区 3:规则命中了,就说明节点没问题。 为什么不对:规则只决定“这条连接走哪个组”,不管那个组里的节点好不好用。规则对、节点坏,网页照样打不开。正确做法:连接页面确认命中之后,再单独检查节点,排查思路见 已连接但无法上网。
误区 4:订阅更新了,规则集也就跟着更新了。 为什么不对:规则集有自己的更新间隔,和订阅更新是两件事。示意配置里的 interval 就是规则集自己的刷新周期。正确做法:规则集看起来过时,就单独更新规则集,别指望订阅更新顺带解决。
误区 5:随手导入网上现成的规则集,反正别人也在用。 为什么不对:清单里写什么,你的流量就按什么走,来源不明的清单可能把你想直连的流量送去代理,也可能把某些流量导向你不想要的出口。正确做法:只用你能看清维护者和更新记录的来源,导入前打开清单看一眼里面写了什么。
规则相关的 6 个词,一句话对照
读规则相关的文档,下面这些词反复出现。点进术语页能看到更完整的解释。
- 策略组:把一批节点包装成一个可选项的容器,规则里的“去向”多半就指向某个策略组。
- 规则集:一份托管在别处的规则清单,在配置里用一行引用就能批量匹配,并按自己的间隔更新。
- 节点:订阅里的一条条服务器配置,策略组的原料,规则本身并不产生节点。
- 落地节点:流量最终出口的服务器,目标网站看到的是它的 IP 和地区,这也是对出口敏感的服务要固定节点的原因。
- TUN模式:用虚拟网卡接管整台设备的流量,不遵守系统代理的软件也能被规则管到。
- 全局模式与规则模式:全局不看规则,规则模式逐条决定去向,本文所有内容只在后者生效。
今天就做:三步把分流规则改对
- 先在规则模式下确认默认配置能用,再动手改,改之前备份一份覆写内容;
- 一次只加一条规则,到连接页面验证命中,再加下一条,别一口气改十条然后找不出哪条坏了;
- 不要从陌生来源导入规则集,清单里写什么,你的流量就按什么走。挑机场先看资料,去 机场推荐排行榜 对照,规则调得再漂亮,也替代不了线路本身。
配置字段和客户端界面会随版本变化,一切以项目官方说明为准。使用代理服务请遵守所在地法律法规,机场牛不提供法律意见。
分流规则常见问题
规则模式和全局模式有什么区别?
规则模式按规则逐条判断每条连接的去向,国内站直连、国外站走代理,日常使用选它。全局模式不看规则,所有流量都走你选定的节点,适合临时排错或对照。长期开全局,国内流量也会绕出去,既浪费流量又可能变慢。
规则集是什么,一定要用吗?
规则集是一份托管在别处的规则清单,在配置里用一行引用就能批量匹配成百上千个域名或地址,并且能自动更新。不一定要用,订阅自带的规则通常够日常使用。想自己维护大批域名,或者想把自定义清单复用到多台设备,规则集才有价值。
策略组里 select、url-test、fallback 怎么选?
select 是手动选,出口固定,适合对出口地区敏感的服务。url-test 会定时测速并自动选延迟较低的节点,适合普通网页。fallback 按顺序使用第一个可用节点,前一个失效才切换,适合想要稳定顺序的场景。三者可以嵌套使用。
改了规则为什么没生效?
先排查四点:规则是不是被排在前面的宽泛规则抢先命中了;改的是不是订阅生成的文件,订阅一更新就被覆盖;配置有没有重新加载;已经建立的连接会继续沿用旧路径,需要在连接页面里关掉旧连接再试。
能不能让某些网站固定走某个国家的节点?
可以。做法是新建一个只放目标节点的策略组,类型选手动选择,再写一条规则把这些域名指向该组。要点是不要用自动测速组,否则出口会在节点之间来回切换,对出口地区敏感的服务容易出问题。