📚 本文是 科学上网完全指南(2026最新版) 系列教程之一。Clash 的完整入门(客户端选择、订阅导入、TUN 模式)见总览页。这篇只聊「规则」:怎么理解它的工作机制、怎么写自己的分流、怎么用现成规则集,最后有一份可以直接抄的模板。

Clash 和 VPN 最大的区别就是规则分流(自定义规则):每条流量先过一遍规则表,命中哪条就按哪条走。同样开一个网页,国内站点直连不占代理带宽,海外站点自动走代理,广告域名在规则层就被扔掉了。规则写得好不好,日常上网体感差别不小。

一、规则怎么工作:自上而下,先命中先赢

Clash 的 rules 是一个数组,内核从第一条开始逐条比对,第一条命中的规则生效,后面的不再看。所以规则顺序非常关键:

  • 放在前面的规则优先级高。想强制某域名走代理,就把它放在宽松规则之前。
  • MATCH 是兜底规则,匹配所有剩余流量,必须放在最后一行,否则它后面的规则永远没机会执行。
  • 太宽泛的规则放太前,会让后面的精细规则失效。比如把 GEOIP,CN,DIRECT 放在最前面,那所有国内 IP 的流量(包括你想强制代理的)都会直连。

怎么确认流量到底命中了哪条规则?打开客户端的 Connections(连接) 面板,每一条连接都会显示它命中的规则名。规则排查基本就从这里看起。

二、规则类型全解

规则类型 匹配对象 示例
DOMAIN 精确域名 DOMAIN,example.com,PROXY
DOMAIN-SUFFIX 域名后缀(含子域名) DOMAIN-SUFFIX,google.com,PROXY
DOMAIN-KEYWORD 域名包含关键词 DOMAIN-KEYWORD,google,PROXY
DOMAIN-REGEX 域名正则匹配 DOMAIN-REGEX,^.+\.googlevideo\.com$,PROXY
IP-CIDR IP 段(IPv4) IP-CIDR,192.168.0.0/16,DIRECT
IP-CIDR6 IP 段(IPv6) IP-CIDR6,2001:db8::/32,DIRECT
SRC-IP-CIDR 来源 IP 段 SRC-IP-CIDR,192.168.1.0/24,DIRECT
SRC-PORT 来源端口 SRC-PORT,7890,PROXY
DEST-PORT 目标端口 DEST-PORT,443,PROXY
PROCESS-NAME 进程名 PROCESS-NAME,chrome.exe,PROXY
PROCESS-PATH 进程完整路径 PROCESS-PATH,/usr/bin/docker,DIRECT
NETWORK 网络类型 NETWORK,udp,DIRECT
GEOIP IP 归属地 GEOIP,CN,DIRECT
GEOSITE 域名分类数据库 GEOSITE,google,PROXY
RULE-SET 引用外部规则集 RULE-SET,reject,REJECT
MATCH 兜底(匹配所有) MATCH,PROXY
AND / OR / NOT 逻辑组合 AND,((GEOSITE,youtube)),PROXY

其中 PROCESS-NAMEPROCESS-PATH 需要开启 find-process-mode 才能生效(Mihomo 默认支持)。AND/OR/NOT 是 Mihomo 的增强逻辑规则,完整语法以 Mihomo 官方文档 为准,适合复杂场景,普通用户用到 GEOSITE + GEOIP + MATCH 三件套就够了。

三、GEOIP 和 GEOSITE:地区分流的两件套

GEOIP 按 IP 归属地匹配,一个典型用法:GEOIP,CN,DIRECT 让国内 IP 直连(访问百度、淘宝、银行等不走代理),GEOIP,private,DIRECT 让内网 IP 直连(访问路由器、NAS)。

GEOSITE 按域名分类数据库匹配,比 GEOIP 更精细。常用分类:

  • GEOSITE,cn — 国内网站域名集合,直连
  • GEOSITE,google / GEOSITE,telegram — 特定服务域名集合,走代理
  • GEOSITE,ads — 广告域名合集,REJECT 掉
  • GEOSITE,category-games — 游戏平台域名

两者常搭配成一套”国内直连、国外代理”的标准分流:

rules:
- GEOSITE,cn,DIRECT # 国内域名直连
- GEOIP,CN,DIRECT # 国内 IP 直连
- GEOIP,private,DIRECT # 内网 IP 直连
- MATCH,PROXY # 其余全部走代理

geosite 和 geoip 的数据源在 Mihomo 里通过 geodata-modegeox-url 配置,默认使用 MetaCubeX 维护的数据库,建议开启自动更新:

geodata-mode: true            # true 用 .dat 格式,false 用 mmdb(更精准)
geo-auto-update: true
geo-update-interval: 24 # 每 24 小时自动更新
geox-url:
geoip: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat"
geosite: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb"

四、rule-providers:把规则放到配置文件外面

规则一多,配置就会变得又长又乱,而且订阅更新时容易丢。rule-providers 就是为这个场景准备的:规则可以放在外部文件或远程 URL,客户端定时拉取更新。

先声明规则源,再在 rules 里用 RULE-SET 引用:

rule-providers:
reject:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400 # 24 小时更新一次
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400

rules:
- RULE-SET,reject,REJECT
- RULE-SET,proxy,PROXY
- RULE-SET,direct,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY

几个要注意的点:

  • behavior 有三种:domain(纯域名列表)、ipcidr(纯 IP 段列表)、classical(完整规则语法,一行一条规则)。从 URL 拉取公开规则集时,先看它的格式再选对应 behavior。
  • type 可以填 http(远程)或 file(本地文件)。本地规则文件写法:behavior 为 domain 时每行一个域名(+.openai.com 表示包含子域名);classical 时每行一条完整规则。
  • 社区常用的现成规则集:Loyalsoldier/clash-rules(reject/proxy/direct,大多数订阅转换工具的默认来源)、MetaCubeX/meta-rules-dat(Mihomo 官方 GeoIP/GeoSite 数据库)。

五、三个常见场景

场景一:国内直连、国外代理(基础分流)

刚拿到订阅时的默认规则通常已经是这个效果。如果订阅的规则不合适,可以用第三节那套 GEOSITE,cn + GEOIP,CN + MATCH 兜底,简单可靠。

场景二:广告拦截

不想装额外软件,用规则就能挡掉大部分广告:

rules:
- RULE-SET,reject,REJECT # 现成广告域名名单
- GEOSITE,ads,REJECT # geosite 广告分类
- ...其他规则...

注意 REJECT 规则要放在代理规则之前,否则广告域名先被代理规则接走了。

场景三:特定服务走特定节点

让 ChatGPT、Netflix 这类服务走指定的节点组,而不是跟其他流量混在一起:

proxy-groups:
- name: "🤖 AI 服务"
type: select
proxies: ["节点A", "节点B", "🚀 节点选择"]

rules:
- GEOSITE,openai,🤖 AI 服务
- GEOSITE,netflix,🎬 流媒体
- GEOIP,CN,DIRECT
- MATCH,🚀 节点选择

这样 ChatGPT 固定走你选的 AI 节点,其他流量走自动选择,互不干扰。

六、在机场订阅上叠加自己的规则

机场订阅是托管配置,直接改的话,下次订阅自动更新就把改动冲掉了。推荐做法是叠加而不是修改

  • Clash Verge Rev:用「全局扩展配置」里的 Merge 功能,写一段要追加的 rules,客户端会把它合并到订阅配置上。这是最省事的方式。
  • 其他客户端:看是否支持”本地配置覆盖”或”片段”功能;没有的话,可以把订阅转换后另存为本地配置再手动加规则,代价是失去自动更新。

叠加时记住一个原则:你的自定义例外要放在订阅原有规则的前面(Merge 的规则默认插在最前)。不然内网、支付这些必须直连的流量,可能被订阅自己的规则先接走了。

七、常见问题

Clash 自定义规则怎么添加?

编辑配置文件的 rules 段即可。每条规则一行,格式是”类型,匹配条件,去向”,例如 DOMAIN-SUFFIX,google.com,PROXY。规则自上而下匹配,第一条命中的生效,最后用 MATCH 兜底。不熟悉 YAML 的话,建议用 Clash Verge Rev 的全局扩展配置(Merge)或本地覆盖功能叠加规则,不要直接改订阅文件。

Clash 的 rule-provider 是什么?

rule-provider 是把规则放到配置文件外面的一种机制,可以引用本地文件或远程 URL(如 GitHub 上的规则集),并定时自动更新。它有三种 behavior:domain(域名列表)、ipcidr(IP 段列表)、classical(完整规则语法)。常用资源如 Loyalsoldier/clash-rules 的 reject、proxy、direct 规则集。

GEOIP 和 GEOSITE 有什么区别?

GEOIP 按 IP 归属地匹配,如 GEOIP,CN,DIRECT 让国内 IP 直连;GEOSITE 按域名分类数据库匹配,如 GEOSITE,google,PROXY 让 Google 域名走代理。GEOIP 管的是 IP 段,GEOSITE 管的是域名分类,两者常搭配使用:国内域名直连 + 国内 IP 直连 + 其余走代理。

Clash 怎么屏蔽广告?

用 REJECT 去向即可,例如 GEOSITE,ads,REJECT 或引用现成广告域名规则集 RULE-SET,reject,REJECT。Loyalsoldier/clash-rules 的 reject.txt 收录了常见广告和追踪域名,通过 rule-provider 拉取后自动更新,比手动维护名单省心得多。

机场订阅会被我自定义的规则覆盖吗?

不会。机场订阅是托管配置,定期自动拉取会覆盖你直接改的内容。推荐做法是用客户端的本地扩展功能(Clash Verge Rev 的全局扩展配置 / Merge)或订阅转换工具的规则叠加,把你的规则插在订阅规则之前,这样订阅更新后你的自定义规则依然生效。

规则不生效?先看这三个地方:

  • 顺序。宽泛规则放在精细规则前面,后者永远轮不到。用 Connections 面板确认实际命中的规则。
  • 名称。rules 里引用的策略组名称必须和 proxy-groups 定义完全一致,区分大小写,emoji 也要一样。
  • 缩进。配置里不能用 Tab 缩进,冒号后面必须有空格。YAML 报错时第一反应检查缩进。

规则能防 DNS 泄露吗?

规则只负责分流,DNS 污染要靠 DNS 配置解决。如果开了 fake-ip 模式个别 App 出问题,可以把域名加进 fake-ip-filter

规则集拉取失败怎么办?

rule-provider 的 URL 无法访问时,该规则集会被跳过,流量落到后面规则。检查网络连通性、URL 是否失效(GitHub 直连不稳可以换 jsdelivr CDN 镜像),或者换成 type: file 手动维护本地规则。

还想更精细?

Mihomo 还支持脚本规则(Script Rules)和子规则(Sub-Rules),可以在主规则命中后继续做二级分流,适合复杂路由场景,新手阶段用不上。

DIRECT / PROXY / REJECT 这些去向词、规则模式和全局模式的区别,在 Clash 机场专用名词解释字典 里都有。协议层面还不熟的话,先看 2026 Clash 机场各种协议差别介绍与选择指南。Clash 和 Mihomo 的关系见 Mihomo 是什么?Mihomo 和 Clash 有什么区别,需要接管全局流量再翻 Clash TUN 模式完全指南