Clash 国内外流量分流配置:规则顺序与策略组实战

围绕常见地区分流需求说明规则匹配顺序、策略组组织方式及调整后如何确认实际走向。

Routing model

先理解国内外分流的判断模型

Clash 的分流不是简单判断“当前网站在国内还是国外”,而是用配置文件中的规则依次检查每一条连接。规则可能根据域名、域名后缀、IP 地址、目标端口、进程名称或外部规则集进行匹配;命中后,再把连接交给指定策略组、代理节点或内置动作。常见的 DIRECTPROXYREJECT 分别代表直接连接、交给名为 PROXY 的策略组处理,以及拒绝连接。

因此,“国内直连、其他流量代理”只是目标,不是一条足以覆盖全部情况的单独规则。实际配置通常要先处理局域网与明确例外,再判断指定域名、地区域名和目标 IP,最后用兜底规则接住没有命中的连接。某个站点使用海外域名但在本地部署服务器,或者使用国内域名却依赖境外接口时,仅按地区数据库判断都可能得到不符合预期的结果,需要增加更具体的域名规则。

还要区分“规则命中的策略”与“最终使用的节点”。例如规则把连接交给 国外流量 策略组,而该组可能继续引用 自动选择香港节点 等下级组。日志中看到规则命中“国外流量”并不意味着它就是最终出口,仍需查看策略组当前选项以及连接详情中的链路。

规则或动作 作用 适合放置的位置
DOMAIN 精确匹配一个完整域名 通用域名规则之前
DOMAIN-SUFFIX 匹配某个域名及其子域名 地区与 IP 规则之前
RULE-SET 引用规则提供器中的规则集合 按规则集具体程度排列
GEOIP 按目标 IP 所属地区匹配 域名类规则之后
MATCH 接收此前没有命中的连接 规则列表最后

Rule order

规则自上而下匹配,具体规则应优先

mihomo 处理连接时会从 rules 顶部向下检查,第一条符合条件的规则决定该连接的策略,后面的规则不再参与。规则内容正确但位置错误,是地区分流中最常见的配置问题。例如先写了一个覆盖范围很大的国内域名规则,随后才要求其中某个域名走代理,那么后面的例外永远不会生效。

比较稳妥的排列方式是从“最明确”逐步过渡到“最宽泛”。局域网、回环地址与家庭设备域名通常需要直连;必须代理或必须直连的业务域名属于人工例外;广告或跟踪域名是否拒绝应根据页面功能谨慎决定;之后才是成组的地区域名、地区 IP 与最终兜底。不同订阅提供的规则名称并不统一,但排序原则一致。

  1. 本地网络与私有地址:路由器管理页、NAS、打印机和局域网服务通常使用 DIRECT,避免绕到远端节点。
  2. 人工指定例外:把必须代理、必须直连或需要特定出口的完整域名与域名后缀放在通用规则前。
  3. 业务规则集:按服务类别引用维护中的规则集,例如开发平台、流媒体或即时通信服务。
  4. 国内域名与 IP:域名类地区规则优先于 GEOIP,减少仅依据解析 IP 带来的偏差。
  5. 最终兜底:使用 MATCH 指向默认策略组,确保未分类连接有明确去向。

如果目标是“已知国内资源直连,其余默认代理”,兜底应指向代理策略组,而不是再次使用地区判断。反过来,如果只希望少量服务经过代理,应先列出这些服务,最后以 MATCH,DIRECT 收尾。两种模式没有绝对优劣,差别在于默认行为和维护成本。

Proxy groups

用策略组隔离规则意图与节点选择

把每条海外规则直接绑定到具体节点,看似简单,但节点名称一旦随订阅更新发生变化,大量规则就会失效。更可维护的方法是让规则指向稳定的策略组名称,再由策略组组织节点、自动测试组或其他策略组。规则负责表达“这类流量如何处理”,策略组负责决定“当前由哪个出口执行”。

一个实用的结构通常包含总入口、地区选择和自动测试三层。总入口可命名为 国外流量,类型使用 select,允许手动选择自动组、某个地区组或 DIRECT。地区组可以引用订阅中的对应节点,也可以通过 proxy-providers 与筛选条件动态获得节点。自动组常用 url-test 定期探测候选节点,按探测结果选择延迟较低的出口。

url-test 的结果只反映探测地址在当时的响应情况,不等同于所有网站的实际速度。跨区域链路、目标站限制和节点负载都会影响体验。对登录地点敏感、需要固定地区或需要稳定出口的业务,手动地区组通常比频繁切换的自动组更可控。

proxy-groups:
  - name: 国外流量
    type: select
    proxies:
      - 自动选择
      - 香港节点
      - 日本节点
      - DIRECT

  - name: 自动选择
    type: url-test
    proxies:
      - HK-01
      - JP-01
      - SG-01
    url: https://www.gstatic.com/generate_204
    interval: 300

  - name: 国内流量
    type: select
    proxies:
      - DIRECT
      - 国外流量

上例中的节点名称必须与 proxies 中实际存在的名称一致。如果节点来自代理提供器,组内应使用对应的 use 配置,而不是照抄不存在的节点名称。配置引用关系有严格要求:规则引用的策略组、策略组引用的节点或下级组,都必须已经在配置中定义。Clash Verge Rev 导入订阅后生成的组名可能不同,修改前应先查看当前配置结构。

YAML practice

从例外到兜底的分流配置实战

下面的规则片段展示一种常见思路:本地地址直接连接,指定开发服务经过代理,明确的国内业务直接连接,然后使用地区数据覆盖一般情况,最后把未识别流量交给国外策略组。它是结构示例,不应直接覆盖现有订阅,因为实际配置还要包含端口、DNS、节点、策略组以及可能存在的规则提供器定义。

rules:
  - DOMAIN,router.lan,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

  - DOMAIN-SUFFIX,github.com,国外流量
  - DOMAIN-SUFFIX,githubusercontent.com,国外流量

  - DOMAIN-SUFFIX,gov.cn,DIRECT
  - DOMAIN-SUFFIX,example.cn,DIRECT

  - GEOSITE,CN,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,国外流量

GEOSITE 属于 mihomo 支持的地理站点规则,依赖相应地理数据文件。不同配置使用的数据加载方式和规则集可能不同;如果当前配置没有可用的 GeoSite 数据,应使用已经定义好的 RULE-SET,或者维护必要的域名规则,不要只增加一行无法加载的数据引用。GEOIP 则根据目标 IP 判断地区,适合补充域名规则没有覆盖的连接。

no-resolve 用于告诉内核:检查这条 IP 类规则时,不要为了获取目标 IP 主动触发额外的域名解析。它适合放在部分 IP-CIDRGEOIP 规则末尾,但不代表禁用整个客户端的 DNS 功能。如果连接上下文已经带有目标 IP,规则仍可正常判断。

使用外部规则提供器时,可以把规则主体与更新来源分开。规则提供器需要定义行为类型、格式、保存路径与更新间隔,随后才可在 rules 中通过 RULE-SET 引用。下面展示逻辑关系,地址和文件名应替换为实际维护来源提供的有效内容。

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

rules:
  - RULE-SET,local-direct,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,国外流量

规则集的 behavior 必须与文件内容匹配。domain 用于域名类载荷,ipcidr 用于网段类载荷,classical 可容纳带规则类型的经典规则。格式不匹配可能导致规则提供器更新失败或载荷无法解析。远程规则集还应有稳定的更新来源;如果来源暂时不可达,客户端通常会继续使用已保存的本地文件,但首次获取失败时可能没有可用缓存。

DNS and TUN

DNS、系统代理与 TUN 如何影响结果

规则本身决定连接去向,但客户端能否接收到连接、域名能否正确还原,以及解析请求走向哪里,会影响最终观察结果。系统代理只覆盖遵循操作系统代理设置的应用;某些游戏、命令行工具、虚拟机程序或自行实现网络栈的软件可能绕过系统代理。此时规则写得再完整,未进入 mihomo 的流量也不会出现在连接列表中。

TUN 模式通过虚拟网络接口接管更广泛的 TCP 与 UDP 流量,适合需要覆盖不读取系统代理设置的程序。启用 TUN 并不会改变规则从上到下匹配的原则,它只是扩大可进入规则引擎的流量范围。TUN 还可能受到系统权限、路由表、其他 VPN 软件与安全工具影响,因此应在系统代理模式验证基础分流后,再按需求启用。

DNS 配置尤其容易造成“规则看起来正确,结果却不一致”。在 fake-ip 模式下,客户端可先返回保留地址,并在内部保留域名与连接的映射,使后续规则仍有机会按域名匹配。部分局域网服务、设备发现或不兼容虚拟地址的程序可能需要加入 fake-ip-filter。在 redir-host 等模式下,解析过程和连接建立方式不同,但同样需要保证 DNS 查询没有被其他程序完全绕开。

如果域名先在系统外部解析成 IP,内核接收到的连接可能缺少可用于域名规则的上下文,最终只能落到 IP 类规则或 MATCH。因此排查域名规则不命中时,应同时观察连接详情里的目标主机、解析结果和命中规则,而不是只检查 YAML 拼写。

Verification

调整后如何确认真实流量走向

验证分流不能只看网页是否打开。直连和代理都可能访问成功,但延迟、出口位置与命中规则不同。可靠的检查方式是把配置加载状态、连接详情、规则命中、策略组选择和外部出口结果结合起来,并且每次只调整一类条件。

第一步:确认配置已成功加载

保存 YAML 后查看客户端提示与内核日志,确认没有缩进、字段类型、重复名称或规则提供器解析错误。YAML 使用空格表达层级,Tab 字符和错误缩进都可能导致加载失败。如果客户端仍在使用旧配置,后续测试不会反映刚才的改动。

第二步:清理旧连接再测试

浏览器会复用 HTTP/2、HTTP/3 与长连接,应用也可能保留连接池。修改规则后,已经建立的连接通常不会自动按新规则重新选择出口。应关闭目标连接、重新打开应用或在客户端中结束对应连接,再发起新的访问。DNS 缓存也可能影响对比,必要时等待缓存失效或按系统方式刷新。

第三步:查看连接详情与命中链路

在 Clash Verge Rev 的连接页面定位目标域名,检查命中的规则类型、规则载荷、策略组和最终节点。若预期命中 DOMAIN-SUFFIX 却显示 MATCH,说明域名没有进入该规则、规则顺序被提前截获,或连接只保留了 IP 信息。若命中的策略组正确但节点错误,应转到代理组页面检查当前选项,而不是修改规则。

第四步:分别验证直连与代理出口

选择一个明确配置为直连的目标和一个明确配置为代理的目标进行对照。必要时使用可信的出口地址查询服务确认公网出口,但要注意不同查询服务可能使用不同网络、缓存和 IP 地理数据库。地区标签只能作为辅助证据,最关键的仍是客户端显示的命中规则与链路。

  • 直连目标应显示 DIRECT,或先命中某个策略组且该组当前选择 DIRECT
  • 代理目标应显示预期策略组,并沿链路落到实际节点。
  • 拒绝规则应表现为连接被拦截,同时要确认没有破坏页面所需的接口或静态资源。
  • UDP、QUIC 与 TCP 可能形成不同连接,排查时应留意协议类型。

Troubleshooting

分流结果异常时的排查顺序

国内网站仍然经过代理

先检查是否存在位于国内规则之前的宽泛代理规则,例如覆盖整个顶级域或某个大型规则集。随后确认国内策略组当前是否真的选择了 DIRECT。如果规则只配置了 GEOIP,CN,DIRECT,而目标使用境外 CDN 地址,它可能无法命中;可为稳定业务增加明确的域名直连规则。

海外服务偶尔变成直连

检查目标是否包含多个业务域名。现代网站通常同时访问登录、接口、图片、视频和统计域名,只为主域名配置代理不能覆盖全部请求。可以从连接列表收集实际域名,再添加必要的域名后缀或使用维护良好的服务规则集。不要把观察到的每个临时 CDN 主机都写成精确规则,优先识别稳定的域名边界。

规则显示正确但服务无法使用

命中代理规则只说明连接被交给相应策略,不代表节点一定可达。继续检查策略组是否选中有效节点、节点是否支持所需 UDP 流量、DNS 是否正常、目标服务是否限制出口地区,以及系统时间是否准确。也可以临时切换同组中的另一个节点进行对照,以区分规则问题与节点链路问题。

开启 TUN 后局域网设备失联

确认私有网段规则位于前部并指向 DIRECT,同时检查 TUN 的自动路由、严格路由设置以及系统中其他虚拟网卡。局域网设备若通过主机名访问,还应保证本地域名解析或搜索域没有被远程 DNS 替代。先用设备 IP 测试可以帮助区分路由问题和本地域名解析问题。

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

直接编辑订阅生成的配置,可能在下一次订阅更新时被新内容覆盖。Clash Verge Rev 可通过配置合并、脚本或覆写能力保留本地调整,具体入口取决于当前版本和配置管理方式。实施前先备份可用配置,把自定义策略组与规则保持为独立、易检查的片段,并在订阅更新后确认引用名称仍然存在。

Checklist

一套可持续维护的分流检查表

稳定的国内外分流依赖清晰的默认策略和少量必要例外,而不是无限堆叠规则。完成配置后,可按下面的检查表复核:

  • 局域网和私有地址规则位于前部,并明确使用 DIRECT
  • 必须代理或必须直连的业务域名位于地区通用规则之前。
  • 规则引用的策略组名称与配置定义完全一致。
  • 策略组引用的节点、下级组或代理提供器均实际存在。
  • 地区域名规则优先于地区 IP 规则,MATCH 位于末尾。
  • 外部规则集的行为类型、文件格式和载荷内容相互匹配。
  • 修改后结束旧连接,并从连接页面确认规则、策略组和最终节点。
  • 系统代理无法覆盖目标程序时,再评估是否需要 TUN 模式。
  • 订阅更新后复查自定义覆写,避免策略组引用因名称变化而中断。

配置的核心不是追求规则数量,而是让每条连接都能沿着可解释的路径落到明确策略。先用少量规则建立“本地直连、指定例外、地区判断、最终兜底”的骨架,再根据连接记录补充真实需求,通常比直接导入多个重叠规则集更容易维护和排错。

下载Clash