Clash 国内网站误走代理变慢?GeoIP cn 与规则优先级一步步修正

你是不是也遇到:规则写了「国内直连」,页面却像出了国

mode: rule 下,最常见的用户体感是:明明配置文件中有大陆列表或 GEOIP 段落,访问国内站却明显变慢、偶发证书或跳转异常,甚至同一 App 里图片与接口速度不一致。很多人第一反应是「换一个订阅」或「换一个节点」,但若连接日志里显示命中的首条规则就把请求送进了代理组,换节点只是在错误路径上调参。

这类问题与「流媒体 Sniffer 还原域名失败」「仅浏览器挂了系统代理、系统 App 仍直连」等故障表面相似,机理不同:本文聚焦大陆流量被其它规则抢先匹配、GEOIP CN 未生效、以及 fake-ip 与 DNS 分裂三类主因;若你更关心规则类型通论,可先复习 规则分流详解,再回到本页的排障顺序。

与「仅浏览器通」场景的区别:若只有 Chrome 走了代理、游戏或系统更新仍直连,多半是客户端路径未进 TUN 或未设系统代理;可对照 全局与仅浏览器代理。本文假定流量已进入 Clash,但策略落点错了

铁律:规则自上而下,命中即停

Clash 在处理一次连接时,会按 rules: 数组从上往下扫描。第一条匹配成功的规则立即决定策略,后面的 GEOIP,CN,DIRECT 或更细的域名条目不会再看。因此「国内站慢」往往不是 CN 条目缺失,而是上方有一条更宽或更早写入的规则把国内域名送到了代理

典型例子包括:一条靠前的 MATCH,PROXY 或订阅附带的超大远程规则集插在了 GEOIP 之前;或某条 DOMAIN-KEYWORD,google 类宽泛规则吞掉了国内镜像或 CDN 别名。排查时不要凭语感猜,而是以日志里的 rule → policy 为准,倒推应当插入 DIRECT 或独立「国内站」段落的位置。

GEOIP CN 与 DIRECT:写什么、不写什么

最常见的兜底写法是 GEOIP,CN,DIRECT:当连接的解析结果能映射到 GeoIP 库中的中国段时走直连。注意三点:

  • 与 IP 类规则的次序:若你对某些网段写了 IP-CIDR 且未带 no-resolve,在特定内核版本与解析路径下可能与域名规则交错触发;国内大站排障时建议先锁日志里的主机名与命中的那条规则类型,再决定是否要调整 no-resolve 或与 Sniffer 的配合。
  • 「库」与现实的时差:边缘 CDN、Anycast、或新段尚未被本地 GeoIP 库标记时,可能出现本应国内的 IP 未被 CN 命中。这时应补充精确域名直连DOMAIN-SUFFIX / DOMAIN)在 GEOIP 之上,而不是只依赖地理库。
  • DIRECT 与「全球直连」策略组:许多订阅把直连包装成名为「DIRECT」或「国内」的 select 组;只要该组当前选项真的是直连出口即可。若你误把该组选到了某个节点,日志仍会显示「进了这个组」,表现就像全线出国。

若你发现只有部分国内域慢,优先在 GEOIP 之前为该业务单独加一段(例如常见于支付、政务、校内应用),避免和泛化的「国外列表」抢顺序。

MATCH、漏网与「代理兜底」

列表最后一行的 MATCH(或等价的「全量兜底」)决定所有未被上文匹配的连接的去向。若 MATCH 指向代理组,则任何漏网域名都会出国——包括你以为「应该是国内」却未出现在任何 DOMAIN / GEOIP 中的主机名。

漏网不一定是错误:新域名、第三方统计、或分包下载的次要域名都可能落到 MATCH。但若主站国内却慢,请先在日志确认:该请求是MATCH 进代理,还是被更上面的一条 DOMAIN 规则送进了代理。前者靠补域名或规则集;后者靠把国内相关段落整体上移或收窄那条过宽的 DOMAIN 规则。

实操口诀:「谁先命中谁说了算」——要让大陆稳定直连,就把大陆明确名单放在宽泛国外规则GEOIP,CN,DIRECT 之前,最后才是 MATCH

fake-ip 与 DNS:看起来像 routing 错,其实是解析分裂

dns.enhanced-mode: fake-ip 下,应用可能拿到内核分配的假地址;若系统「私人 DNS」、路由器 DoH、或浏览器内置 DoH 仍在绕过 Clash 做解析,会出现解析与传输策略不一致:连接日志里域名命中看似正确,实际握手或跳转却走了另一条路径,体感上如同「国内站仍走代理」。

建议排障步骤包括:暂时关闭系统与浏览器加密 DNS,把上游集中在 Clash 的 nameserver / nameserver-policy;检查 fake-ip-filter 是否把需要真实解析的国内域名错误地留在 fake-ip 路径;并对 IPv6 做对照试验——若代理只覆盖 IPv4,而终端仍通过公网 IPv6 直连或旁路,症状会与「规则写错」极其相似。

与 Sniffer / 流媒体专文的边界

Sniffer 与流媒体相关文章主要解决TLS 握手后还原域名、规则按域名而非仅按 IP 命中的问题,常见于视频 CDN。若你的症状是纯国内站整体慢、且日志已显示明确的国内域名仍进了代理组,优先查规则优先级与 DIRECT 段落位置,而不是先动 Sniffer。反之,若日志长期只有 IP、域名列为 unknown,再考虑 Sniffer 与 IP 规则的先后关系。

一步步修正清单(建议按顺序执行)

  1. 确认模式moderule,当前加载的 Profile 正是你编辑的那份(无静默 mixin 覆盖)。
  2. 抓一条故障连接:在面板或日志中记下主机名、命中的规则序号或规则类型、以及进入的策略组。
  3. 对照 rules 数组:从文件顶部数下来,找到第一条能解释该命中的规则——这就是你要移动或收窄的对象。
  4. 插入大陆优先段:在宽泛国外规则之前,加入明确的 DOMAIN-SUFFIX / 私有规则集,或将现有 GEOIP,CN,DIRECT 上移到合理位置。
  5. 核对 MATCH:明确漏网是否符合预期;国内业务主域名不应长期落在 MATCH 代理上。
  6. 收敛 DNS:关闭旁路 DoH,检查 fake-ip-filternameserver-policy;必要时做 IPv6 开关对比。
  7. 复测:同一站点清缓存后重复访问,确认日志中策略组与延迟体感一致。

若你尚未掌握订阅合并与多配置文件管理,可先走完 订阅导入 再叠本文,避免改的是「没生效的那份」。

YAML 骨架示例(教学用)

下列片段仅演示顺序思想:私网与局域网放行 → 明确的国内域名 → GEOIP CN → 其它分流 → MATCH。 names、远程规则集与节点名请替换为你自己的。

YAMLrules:
  - 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
  # Put explicit CN domains or RULE-SET before broad foreign lists:
  - DOMAIN-SUFFIX,cn,DIRECT
  - DOMAIN-KEYWORD,baidu,DIRECT
  # Example: your curated domestic list / provider here
  # - RULE-SET,cn-domestic,DIRECT
  # Broad foreign / subscription RULE-SET blocks (if any) should come AFTER CN clarifications
  # - RULE-SET,foreign-block,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

真实订阅往往远复杂于此;关键是把你关心的国内业务段落插进「宽规则」之前,而不是放在文件末尾心理安慰式地加两行。

常见误区速查

  • 以为加了 GEOIP CN 就万事大吉:上方任意一条域名规则已可抢先送代理。
  • MATCH 指向代理却希望「国内都直连」:漏网国内域名会全部出国。
  • 盲目堆远程规则集不看插入点:远程集合若在 GEOIP 之前且覆盖面大,会吞掉大陆站点。
  • 忽视 fake-ip 与系统 DoH:解析分裂让现象像路由错。
  • 把「全球直连」组选成了节点:表象与规则优先级无关,实为组内选择错误。

小结

国内网站误走代理、整体变慢,在工程上多数是规则优先级兜底 MATCH的问题,其次才是 DNS / fake-ip 分裂。把「自上而下第一条命中」当作唯一真相来源,用日志反推该移动哪一段 DIRECTGEOIP,CN,比反复换节点更有效。相比只能切换全局开关的客户端,Clash 的规则列表让你能精确收回大陆流量的路径。

若你希望分流在出错时也能快速对照日志、少踩优先级陷阱,→ 立即免费下载 Clash,开启流畅上网新体验

请遵守所在地法律法规与服务条款;本文仅供客户端网络配置与技术说明,不构成对任何业务合规性的法律意见。