GeoIP 与 GeoSite:分别匹配地址和域名

Clash 分流是否准确,取决于规则顺序,也取决于规则引用的数据。GeoIP 将 IP 地址段归入国家或地区等集合;GeoSite 将域名归入站点、服务或地区类别。两者提供匹配依据,不提供代理节点,也不会替用户决定某个类别必须直连还是走代理。

例如,GEOIP,CN,DIRECT 表示目的 IP 命中数据库中的 CN 集合后选择直连;GEOSITE,cn,DIRECT 表示域名命中数据库中的 cn 类别后选择直连。网站使用海外 CDN、跨区域部署或共享地址时,两种判断可能得出不同结果。这不是数据库必然损坏,而是分类对象不同。

项目GeoIPGeoSite
主要输入目的 IPv4 或 IPv6 地址连接关联的域名
常见文件geoip.dat、Country.mmdbgeosite.dat
规则示例GEOIP,CN,DIRECTGEOSITE,cn,DIRECT
常见偏差地址归属与服务用途不同新域名尚未收录或分类有差异

数据来源不等于固定标准

GeoSite 常见于 v2fly/domain-list-community 及其衍生构建;GeoIP 则可能来自不同地址数据项目的转换结果。MetaCubeX/meta-rules-dat 提供适合 mihomo 使用的构建产物。即使文件名相同,不同来源的类别、收录范围和更新节奏也可能不同。使用 geolocation-!cn 之类标签前,应确认当前数据源确实包含该类别,不能把其他规则库的标签直接搬过来。

配置前提:确认使用 mihomo 内核

下文的 geodata-mode、geox-url 和自动更新配置以 mihomo 为对象。Clash 是客户端生态中常见的称呼,但界面相近不代表内核能力完全一致。旧版 Clash 内核不一定支持这些字段;客户端自身版本号也不能代替内核版本信息。

  1. 在客户端的关于、内核信息或启动日志中记录实际内核名称与完整版本号,确认标识为 mihomo。
  2. 确认当前启用的是哪一份订阅配置,以及是否配置了覆写、合并或脚本处理。
  3. 备份当前有效配置;优先在客户端提供的持久覆写入口加入全局字段,避免订阅更新时覆盖修改。
  4. 将运行模式设为规则模式。全局模式和直连模式不按下面的分流规则选择出口。

geox-url 与自动更新:可直接合并的配置

以下片段应放在 YAML 顶层,与 rules、dns 平级,而不是放进某个策略组。示例开启 DAT 格式 GeoIP,并使用 MetaCubeX 的发布文件。它只包含数据库设置,不是一份带节点的完整订阅。

geodata-mode: true
geodata-loader: memconservative

geo-auto-update: true
geo-update-interval: 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"
  • geodata-mode: true:让 GEOIP 使用 DAT 数据模式;设为 false 时使用 MMDB 模式。这个开关不是 GEOSITE 的总开关。
  • geodata-loader: memconservative:选择节省内存的 geodata 加载器;它不负责设置更新周期,也不会转换下载文件的格式。
  • geo-auto-update: true:开启内核的 GEO 数据自动更新功能,需要实际运行的内核支持该字段。
  • geo-update-interval: 24:更新间隔为 24 小时,不是 24 分钟,也不是每天固定在零点执行。
  • geox-url:分别指定各类文件的下载地址。MMDB 与 DAT 不能仅靠改扩展名互换。

示例保留 mmdb 地址,便于以后切换模式,但这不表示每次运行都会同时使用所有文件。下载与加载哪些资源,取决于有效配置、规则引用及内核实现。已有缓存时,单纯更改 URL 也不应被当成“已完成更新”的证据,需要执行更新并核对日志。

下载地址应指向实际文件

自定义地址必须返回相应格式的二进制文件,而不是仓库首页、登录页面或下载说明页。GitHub 发布链接可能发生重定向,因此网络策略既要允许访问初始地址,也要能访问最终文件所在的主机。遇到超时,应先检查日志中的目标与错误,再决定是否更换可信数据源。

数据库下载也存在启动依赖:内核尚未取得分流所需数据时,依赖这些数据的规则可能无法正常加载。首次部署宜先确保下载地址可达,必要时使用客户端的手动更新功能,或离线放入数据库,再加载包含 GEO 规则的配置。不要假定下载请求一定会经过当前选中的代理节点。

GEOIP、GEOSITE 规则:类别与策略组必须同时存在

规则由上到下匹配,首个命中项决定策略。下面片段把局域网地址放在前面,再处理国内域名和已分类的海外域名,随后检查国内 IP,最后兜底。它假定现有配置中已经有名为 代理出口 的策略组;使用前应替换为配置中的实际组名。

rules:
  - 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
  - IP-CIDR6,fe80::/10,DIRECT,no-resolve
  - GEOSITE,cn,DIRECT
  - GEOSITE,geolocation-!cn,代理出口
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,代理出口

DIRECT 是内置直连策略,代理出口 则是用户定义名称,必须与策略组逐字一致。若现有组名为 PROXY,应替换两处“代理出口”。不要额外新建第二个顶层 rules 字段;应合并或替换已有规则列表,并保留订阅中确有需要的精确例外。

为什么海外域名规则放在 GEOIP 前面

假设一个海外服务的域名已被分类,但解析得到国内 CDN 地址。如果 GEOIP,CN,DIRECT 先命中,连接就可能直连。把明确的域名规则放在 IP 归属判断之前,可以优先表达服务层面的意图。不过 geolocation-!cn 只是数据库中的集合名,并不等于对所有海外网站的完整枚举,未收录连接仍要由后续规则处理。

no-resolve 不等于禁用 DNS

no-resolve 表示不要仅为了这条 IP 类规则而主动解析域名。如果连接已经有真实目的 IP,GEOIP 仍可以检查它;如果此时只有域名且尚无可用真实 IP,该条规则可能跳过,继续向下匹配。它既不是 DNS 防泄漏开关,也不是 GeoIP 自动更新开关。若需要让未分类域名在这里触发解析,可以去掉该参数,但要评估解析延迟与 DNS 路径。

更新流程:加载配置、更新文件、核对命中

数据库更新时间和订阅更新时间是两件事。订阅更新通常拉取节点与配置;GEO 数据更新则替换分类文件。客户端即使显示订阅更新成功,也不能据此判断 geosite.dat 已经更新。

  1. 检查有效配置。确认最终加载的 YAML 中,自动更新字段和 URL 没有被订阅或覆写机制覆盖。
  2. 重新加载配置。观察日志中是否出现未知字段、YAML 缩进错误、类别不存在或策略组找不到。
  3. 执行一次 GEO 数据更新。使用客户端明确标注的 GEO 数据更新入口;没有入口时按该客户端文档操作,不要把更新订阅按钮当作替代。
  4. 核对结果。记录下载成功或失败的日志、实际数据目录中的文件修改时间;修改时间只说明文件发生变化,仍需检查加载结果。
  5. 创建新连接。重新访问国内域名、已分类的海外域名和局域网地址,在连接详情中分别检查规则类型、匹配内容与最终策略。

测试应使用新连接。浏览器连接复用、应用长连接和既有会话可能继续沿用旧策略,刷新一次页面不一定重建连接。排查时可以关闭目标应用后重新打开,或仅断开对应连接,避免一次性中断所有任务。

常见故障:下载失败、类别缺失与更新后误分流

现象优先检查处理方式
下载超时或连接失败域名解析、出站路径、发布文件重定向先恢复资源地址可达性,再重试更新
数据库解析失败下载内容是否为网页、格式是否对应获取正确的 DAT 或 MMDB 文件
提示类别不存在当前数据源是否包含规则引用的类别调整类别或换用包含该类别的数据构建
规则指向的策略不存在策略组名称与大小写将规则目标改为已有策略组的准确名称
更新成功但走向不变运行模式、前置规则、现有连接切回规则模式并用新连接检查首个命中项

离线替换时先确认数据目录

不同客户端的数据目录不同,服务模式与普通用户模式也可能使用不同位置。应从客户端提供的目录入口或内核启动参数确认位置,不要直接假定文件都在安装目录。手动替换时,先停止使用该目录的内核,备份旧文件,再按预期名称放入正确格式的数据库,最后启动并查看加载日志。

如果只错分一个域名,不必立刻更换整套数据库。可以先在相关 GEO 规则之前增加一条范围明确的 DOMAIN 或 DOMAIN-SUFFIX 规则,验证策略是否符合预期,同时向数据源反馈分类问题。例外越具体,越容易在数据库后续修正时清理。

维护边界:规则集、DNS 与 TUN 分开检查

  • rule-providers 独立更新。远程规则集的 interval 通常以秒计,例如 86400 为一天;本文的 geo-update-interval: 24 则以小时计。两套机制不能混用。
  • DNS 决定可用的解析信息。GeoSite 需要连接关联到域名;在 fake-ip 场景中,关联映射有助于保留域名信息,但不能把所有仅有 IP 的连接自动变成域名连接。
  • TUN 决定接管范围。启用 TUN 可以接管更多系统流量,但不会自动纠正数据库分类,也不会改写规则优先级。
  • GEO 数据不提供节点。数据库下载成功后,代理是否可用仍取决于订阅、节点状态与策略组选择。

稳定的维护顺序是:先确认内核与有效配置,再确认数据库来源和更新结果,最后通过新连接观察匹配链路。保留明确的域名例外、按需设置 IP 兜底,并让订阅更新与本地覆写各自负责清晰的范围,才能避免下一次更新又恢复到旧行为。字段语义可对照 mihomo 通用配置文档,类别与文件范围可查阅 MetaCubeX 数据仓库。