分流实战 预计阅读 13 分钟

Clash 规则分流配置实战:本地与境外流量的 YAML 写法

围绕常见区域分流需求,逐段说明策略组、规则顺序、兜底规则和配置验证方法。

先确定本地直连、境外代理的分流模型

Clash 的规则模式并不是同时执行全部规则,而是从上到下检查连接信息,命中第一条符合条件的规则后立即停止继续匹配。配置本地与境外流量时,真正决定结果的是三部分:规则能识别什么、命中后交给哪个策略组,以及没有命中时由哪条规则兜底。

一个容易维护的基础模型通常分成四层。第一层处理局域网地址、回环地址和本机服务,避免访问路由器、打印机、网络存储或开发环境时绕到代理。第二层放置需要明确指定行为的域名,例如公司内部域名、下载站或特定应用接口。第三层使用域名集合和 IP 地理数据处理较大范围的区域流量。第四层使用 MATCH 接住此前没有识别的连接。

  1. 局域网与私有地址:交给 DIRECT,保持本地设备之间的正常通信。
  2. 显式域名规则:根据实际需求直连、代理或拒绝,优先级高于区域规则。
  3. 本地区域流量:可通过域名规则集、GEOIP 或 mihomo 的 GEOSITE 判断。
  4. 未匹配流量:通常交给境外策略组,而不是直接写死某一个节点。

这里的“本地”要区分两个概念:一是局域网内的私有地址,二是希望直连的本地区域互联网流量。前者可以通过固定网段稳定识别;后者可能只有域名,也可能最终连接到 CDN 地址,因此需要把域名判断和 IP 判断组合使用。

策略组负责选择路径,规则只负责把流量送过去

规则末尾的目标字段既可以是 DIRECTREJECT,也可以是策略组名称。长期使用时,建议让境外流量指向策略组,而不是直接指向某个代理节点。节点名称可能随订阅更新发生变化,策略组名称则可以保持稳定,规则层不必反复改动。

下面的片段展示三个常用策略组。“境外流量”作为用户可见入口,允许手动选择自动测试组或直连;“自动选择”定期测试候选节点;“漏网流量”负责承接没有命中区域规则的连接。示例假设订阅中已经存在名为 airport 的代理提供器,实际使用时应改成当前配置里的 provider 名称。

proxy-groups:
  - name: 境外流量
    type: select
    proxies:
      - 自动选择
      - DIRECT

  - name: 自动选择
    type: url-test
    use:
      - airport
    url: https://www.gstatic.com/generate_204
    interval: 300
    tolerance: 80

  - name: 漏网流量
    type: select
    proxies:
      - 境外流量
      - DIRECT

select 组不会自动替用户改变当前选择,适合需要稳定控制路径的场景。url-test 会按测试结果在候选节点中选择响应较快的节点,但测试延迟只代表测试地址的响应情况,并不等于所有网站的实际下载速度。移动网络频繁变化时,可以适当延长 interval,减少重复测试。

如果节点直接写在 proxies 列表中,节点名称必须与订阅配置完全一致,包括空格和大小写。使用 use 时,名称必须对应 proxy-providers 下的键。两种来源可以按客户端和内核能力选择,但不能把 provider 名称误写到普通节点列表里。

规则顺序:具体条件在前,区域判断与兜底在后

Clash 采用首条命中机制,因此同一个域名可能同时符合多种规则。例如 files.example.cn 既符合完整域名规则,也符合 DOMAIN-SUFFIX,example.cn,最终采用哪条取决于谁排在前面。配置时可以按“例外规则、应用规则、域名区域规则、IP 区域规则、最终兜底”的顺序组织。

顺序 规则类型 用途
1 DOMAIN 处理单个完整域名的例外路径
2 DOMAIN-SUFFIX 处理同一主域名及其子域名
3 DOMAIN-KEYWORD 补充关键词匹配,使用时控制范围
4 GEOSITE 或域名规则集 按维护好的域名集合进行区域归类
5 IP-CIDRGEOIP 连接目标已经解析为 IP 时进行判断
6 MATCH 承接所有此前未匹配的连接

DOMAIN-KEYWORD 的覆盖范围较宽。例如关键词过短时,可能命中名称相似但用途完全不同的域名。能够使用完整域名或后缀表达时,应优先选择更精确的规则。进程规则也应谨慎使用:PROCESS-NAME 依赖操作系统和内核取得进程信息,在部分平台、容器环境或仅启用普通系统代理时,进程识别结果可能不一致。

MATCH 必须位于规则列表末尾。若把它放在中间,后面的规则永远没有机会执行。对于“本地区域直连,其余流量代理”的目标,末尾通常写成 MATCH,漏网流量,这样新域名、缺少地理数据的地址以及无法归类的连接仍有明确去向。

本地与境外流量的 YAML 规则写法

下面是一段偏保守的规则示例。它先直连回环地址和常见私有网段,再处理指定域名,随后尝试按本地区域域名与 IP 数据直连,剩余流量交给策略组。该片段适用于 Clash Meta(mihomo)常见配置;若使用较早的原版 Clash 内核,应检查客户端是否支持 GEOSITE,必要时将其替换为兼容的 rule-provider 域名规则集。

rules:
  - DOMAIN,router.local,DIRECT
  - DOMAIN-SUFFIX,local,DIRECT
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR6,::1/128,DIRECT,no-resolve
  - IP-CIDR6,fc00::/7,DIRECT,no-resolve

  - DOMAIN-SUFFIX,example.cn,DIRECT
  - DOMAIN,api.example.net,境外流量

  - GEOSITE,CN,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,漏网流量

no-resolve 为什么常放在 IP 规则末尾

当规则匹配进行到 IP 类型时,如果当前连接只有域名,部分实现可以发起解析以取得目标 IP。添加 no-resolve 表示这条规则不为了匹配而额外触发 DNS 解析。这样能减少规则阶段产生的查询,也能避免因解析路径不同而增加等待时间。

不过,no-resolve 并不代表 Clash 完全忽略 DNS。连接本身仍需要按当前 DNS 模式完成域名处理。它只约束对应 IP 规则的匹配行为。在 Fake-IP 模式下,域名通常先映射到保留地址,内核仍可保留域名信息并执行域名规则;真正建立连接时再按配置解析目标地址。

GEOIP,CN,DIRECT 能否覆盖所有本地区域网站

不能把 GEOIP 当作唯一判断依据。网站可能使用全球 CDN、云服务或跨区域调度,同一域名在不同网络下可能返回不同地址。某些本地服务也可能使用境外地址,境外服务同样可能在本地区域部署节点。因此,域名规则一般应排在 GEOIP 前面:已知服务优先按域名分类,剩余连接再使用 IP 地理数据补充判断。

地理数据库需要随内核或客户端更新。数据库过旧时,新分配的地址段可能被归入错误区域。遇到“同一网站在不同设备上走不同策略”的情况,除了比较 YAML,还应比较 GeoIP、GeoSite 数据版本以及 DNS 返回结果。

使用 rule-provider 管理大量域名

规则数量增加后,不建议把数千条域名全部堆在主配置的 rules 中。mihomo 和支持规则提供器的 Clash 客户端可以通过 rule-providers 加载独立规则文件,再在规则列表中用 RULE-SET 引用。主配置只保留优先级,规则文件负责维护具体条目。

rule-providers:
  regional-direct:
    type: http
    behavior: domain
    format: yaml
    path: ./ruleset/regional-direct.yaml
    url: https://rules.example.net/regional-direct.yaml
    interval: 86400

rules:
  - RULE-SET,regional-direct,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,漏网流量

behavior: domain 适合只包含域名类条目的规则集;包含完整规则语法时通常使用 classical;纯 IP 网段则可使用 ipcidr。规则文件内容必须与 behavior 对应,否则可能加载失败或出现条目无法匹配。远程规则集还要设置本地 path,让客户端能够缓存下载结果。

DNS、系统代理与 TUN 模式对分流结果的影响

规则写对之后,实际连接路径仍会受到接管方式影响。启用系统代理时,通常只有遵循系统代理设置的应用进入 Clash;部分游戏、命令行工具、虚拟机或自行建立连接的程序可能绕过系统代理。启用 TUN 模式后,内核可以接管更广范围的 IP 流量,因此同一套规则看起来会“命中更多连接”。

TUN 模式不是区域规则的替代品。它解决的是流量如何进入内核,规则解决的是进入后走哪条路径。若应用流量根本没有经过 Clash,调整 GEOIPMATCH 或策略组都不会改变结果。排查时应先在连接面板确认目标连接是否出现,再查看它命中了哪条规则。

DNS 同样会改变观察结果。使用 redir-host 时,规则判断可能更依赖真实解析地址;使用 Fake-IP 时,内核可以较早保留域名上下文,域名规则通常更容易生效。对于局域网设备名、打印机域名、企业内部解析和某些依赖真实 IP 的应用,可以把对应域名加入 Fake-IP 排除项,再根据实际需求补充直连规则。

如果客户端同时开启 IPv6,而规则仅覆盖 IPv4 私有网段,局域网 IPv6 连接可能落入最终代理策略。应根据网络环境补充 IP-CIDR6 规则,并确认所选代理节点是否具备所需的 IPv6 连接能力。完全关闭 IPv6 虽然可能暂时改变现象,但更适合作为定位步骤,而不是所有环境下的固定处理方式。

配置验证:从语法检查到规则命中记录

YAML 对缩进敏感。列表项前的空格、冒号后的空格和名称引用都可能影响加载。策略组名称含中文或空格通常可以使用,但规则目标必须与策略组名称逐字一致。修改完成后,先使用客户端的配置检查功能;命令行运行 mihomo 时,也可以针对配置目录执行测试。

mihomo -t -d /etc/mihomo

测试通过只说明配置能够解析,不代表每条规则都符合预期。建议按以下顺序验证:

  1. 重新加载配置,确认策略组已显示,代理提供器与规则集没有更新错误。
  2. 访问路由器管理地址或局域网设备,确认连接记录显示 DIRECT
  3. 访问一个明确加入域名规则的站点,检查命中规则名称与目标策略。
  4. 访问一个本地区域常用站点,分别观察域名规则和 GEOIP 规则是否生效。
  5. 访问未写入任何显式规则的境外站点,确认最终由 MATCH 送入“漏网流量”。
  6. 切换“境外流量”中的节点,再次发起连接,确认策略组选择能够影响新连接。

测试时要建立新连接。已经存在的 TCP、QUIC 或长连接可能继续沿用旧路径,切换策略组后不会立即迁移。关闭对应标签页或应用连接,再重新访问,得到的结果更可靠。浏览器还可能缓存 DNS 或复用连接,必要时可以在客户端连接面板中关闭旧连接。

日志中的规则名称比“网页能否打开”更有诊断价值。网页加载失败可能来自节点、DNS、TLS、目标服务器或网络链路;只有先确认命中规则与目标策略,才能判断问题究竟位于规则层还是代理链路。

常见分流异常与定位顺序

本地区域网站被送入代理

先查看连接记录中的目标主机和命中规则。如果直接命中 MATCH,说明前面的域名集合与 GEOIP 都没有覆盖它。可为稳定域名添加 DOMAIN-SUFFIX 规则,或更新 GeoSite、GeoIP 数据。若连接记录只显示 IP,应检查 DNS 模式、应用是否直接连接 IP,以及域名嗅探相关设置。

境外网站显示直连

检查是否存在范围过宽的直连规则,例如过短的 DOMAIN-KEYWORD、错误的域名后缀,或提前出现的 MATCH,DIRECT。还要确认策略组当前是否手动选择了 DIRECT。规则命中“境外流量”并不一定代表使用代理,因为该策略组内部仍可能选中直连。

局域网设备无法访问

确认私有网段规则位于最终兜底之前,并检查局域网实际使用的地址段。常见家庭网络多为 192.168.0.0/16,但办公网络、虚拟网络和容器可能使用 10.0.0.0/8172.16.0.0/12。如果通过设备名访问,还需要保证本地 DNS、mDNS 或搜索域未被远程解析路径干扰。

订阅更新后自定义规则消失

直接编辑订阅生成的主配置时,客户端更新订阅通常会重新写入文件。应把自定义内容迁移到客户端支持的覆写、Merge 或脚本配置中;也可以把稳定规则放入自行维护的 rule-provider。更新顺序建议保持为:先更新订阅节点,再加载覆写,最后更新规则集并执行配置检查。

规则正确但应用没有连接记录

这通常不是规则排序问题,而是流量没有进入 Clash。检查系统代理是否开启、应用是否遵循代理设置、终端是否配置了代理环境变量,以及 TUN 模式是否成功启动。使用 TUN 时还应检查路由冲突、权限、其他 VPN 软件和虚拟网卡状态。先让连接出现在面板里,再分析它命中的规则。

可维护配置的最终检查清单

  • 局域网和回环地址规则位于区域规则之前。
  • 具体域名规则位于宽泛关键词与 GEOIP 规则之前。
  • 规则引用固定策略组,而不是容易变化的节点名称。
  • MATCH 只出现于规则列表末尾,并指向明确的兜底策略。
  • 域名规则集、IP 规则集的 behavior 与内容格式一致。
  • IPv4、IPv6、DNS 模式和流量接管方式与当前网络环境一致。
  • 订阅内容与个人覆写分离,更新后能够重新执行语法和命中测试。

区域分流没有一份适用于所有网络的永久规则。更可靠的方法是先建立清晰的四层结构,再用连接记录补充少量例外。只要策略组命名稳定、规则顺序可读、兜底行为明确,即使订阅节点和地理数据更新,配置也能保持较低的维护成本。

下载Clash