先区分:地址归属、域名分类与分流规则

遇到国内网站走了代理,或某个服务没有按预期分流时,不宜直接把原因归为“数据库旧了”。mihomo 的一次规则判断涉及三件事:连接保留了什么域名或目标 IP、数据库把目标归入哪个集合、配置中的哪条规则先匹配。更新数据库只改变第二项,不会自动修正规则顺序或策略组选择。

本文配置面向 mihomo,也就是 Clash Meta 后续使用的内核名称。桌面客户端只是管理配置与内核的界面;名称中带有 Clash,并不代表它支持相同的字段。应用前先在客户端的“关于”、内核信息或启动日志中确认实际运行的是 mihomo,再备份当前配置。

数据或配置匹配对象主要用途
GeoIPIPv4、IPv6 地址所属的网络集合按国家、地区或特定地址集合分流
GeoSite域名及其分类条目按网站类别、服务或地区域名集合分流
rules从上到下排列的判断条件将命中的连接交给 DIRECT、REJECT 或策略组
rule-providers独立规则集文件按规则集各自的 URL 与周期更新,不由 geox-url 管理

例如,GEOSITE,cn,DIRECT 使用域名集合;GEOIP,CN,DIRECT 使用目标地址的归属集合。两者不是同一份“中国网站名单”。网站可能使用海外 CDN,也可能让多个地区的域名共用同一个地址,因此不能只靠 GeoIP 推断网站业务归属。

数据文件与来源:先确定加载哪一种格式

GeoIP 的 DAT 与 MMDB 路径

mihomo 可以用不同格式处理 GeoIP。设置 geodata-mode: true 时,GeoIP 使用 geoip.dat;关闭该模式时,常用的是 Country.mmdb。GeoSite 则使用 geosite.dat。因此,只替换 MMDB 文件,不会更新 DAT 模式下实际参与匹配的 GeoIP 数据。

geox-url 中的键也要与格式对应:geoip 指向 GeoIP DAT,geosite 指向 GeoSite DAT,mmdb 指向相应的 MMDB 数据。不能把文本域名列表的地址填进 geosite,也不能把 MMDB 文件改名为 geoip.dat 后使用。

常见来源与选择标准

  • Loyalsoldier/v2ray-rules-dat:提供 GeoIP、GeoSite DAT 发布文件,适合需要常见地区与域名分类的配置。下文固定使用这一来源,便于排查变量。
  • MetaCubeX/meta-rules-dat:提供面向相关内核生态的数据产物。选用时应核对仓库说明、发布分支和实际文件格式,不要混用不同产物的下载地址。
  • 客户端预置数据:适合首次启动,但预置文件的时间不等于应用安装时间;后续更新方式取决于客户端和内核配置。

不同来源可能使用同名分类,却包含不同条目。尤其是 private、geolocation-!cn 和带属性的域名分类,必须以所选数据源的说明为准。某个类别存在于一份 GeoSite 数据中,不代表所有发布文件都提供它。

自动更新配置:geox-url 与 24 小时周期

下面是可合并到现有配置顶层的片段,使用 DAT 模式,并以 24 小时为更新间隔。它不是完整订阅文件,不包含节点、端口与策略组。若原配置已经存在同名键,应修改原键,不要在文件末尾再追加一套重复字段。

geodata-mode: true
geo-auto-update: true
geo-update-interval: 24

geox-url:
  geoip: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
  geosite: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
  • geodata-mode: true:让 GeoIP 使用 DAT;它不是“同时开启所有分流”的开关。
  • geo-auto-update: true:启用内核的 Geo 数据自动更新。
  • geo-update-interval: 24:单位为小时,不是秒,也不是每天固定在零点执行。
  • geox-url:指定数据下载来源;它不会同步更新订阅节点,也不会改写 rules。

本例没有配置 mmdb,因为选择的是 DAT 模式。若现有配置里还有 MMDB 来源,可以保留,但不要把它的更新时间当成当前 GeoIP DAT 已更新的证据。AS 号数据库属于另一类用途,也不需要为了使用 GEOIP 与 GEOSITE 而一并启用。

客户端中应该改在哪里

  1. 先导出或复制正在使用的配置,并记下当前配置名称。
  2. 查找客户端提供的“覆写”“合并配置”或配置编辑功能,将上述字段作用到最终配置。不同客户端菜单不一致,不应把某一条菜单路径当成 mihomo 的统一入口。
  3. 重新加载配置;若客户端提示相关全局参数需要重启内核,则重启内核后检查启动日志。
  4. 查看最终运行配置,确认三个顶层字段与两个数据 URL 没有被订阅内容或全局设置覆盖。

直接修改订阅下载后的缓存文件,常会在下一次更新订阅时被覆盖。需要长期保留的本地设置,应放到客户端支持的持久化覆写层。订阅更新周期、Geo 数据更新周期和规则提供者的 interval 是三套独立机制。

GEOIP 与 GEOSITE 写法:先域名,后地址兜底

下面示例假设现有配置已经定义了名为“节点选择”的策略组。该名称必须与实际组名逐字一致;如果实际叫“代理”,应对应修改规则目标。示例覆盖局域网、国内域名、国内地址与最终兜底四个层次,不包含广告拦截等额外分类。

rules:
  - GEOSITE,private,DIRECT
  - GEOIP,private,DIRECT,no-resolve
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,节点选择

按顺序理解五条规则

  1. GEOSITE,private,DIRECT:匹配所选 GeoSite 数据中定义的私有域名集合。它不保证覆盖所有企业内网域名,自定义内部域名仍需单独补充规则。
  2. GEOIP,private,DIRECT,no-resolve:对已有目标 IP 尝试匹配私有地址集合,避免仅为这一条规则主动解析域名。
  3. GEOSITE,cn,DIRECT:优先按域名分类处理,减少把域名判断完全交给地址归属的情况。
  4. GEOIP,CN,DIRECT,no-resolve:在目标 IP 已知时,用国内地址集合兜底。
  5. MATCH,节点选择:将此前均未匹配的连接交给指定策略组。

no-resolve 的含义是“不为这条 IP 规则主动触发域名解析”,不是“这一连接永远不使用 DNS”。如果连接本身已经带有真实目标 IP,IP 规则仍可参与判断;如果没有可用 IP,这条规则可能无法命中,连接便继续向后匹配。是否保留该参数,要结合 DNS 设置、接入方式与分流目标决定。

mihomo 规则按顺序匹配。一条较早的宽泛规则已经命中,后面的精细分类就不会再接管。将 MATCH 放在前面会遮住后续规则;将所有境外服务都交给一个较早的分类,也可能遮住后面的单域名例外。例外规则通常应放在对应的宽泛规则之前。

如何确认更新成功:区分下载、加载与命中

“文件下载完成”只说明更新链路走过了一步。完整验证还需要确认内核成功解析数据,以及目标连接确实命中了预期规则。建议按下面三个层次逐项检查,不要只看文件日期或网站能否打开。

第一层:确认正在使用的文件

从客户端提供的“打开配置目录”或内核启动参数中确认工作目录。不要假设它一定是下载文件夹或应用安装目录。DAT 模式重点检查 geoip.dat 与 geosite.dat;MMDB 模式则关注实际加载的 MMDB 文件。操作系统可能隐藏扩展名,应避免出现 geosite.dat.dat 这样的文件名。

第二层:确认配置与数据可以解析

使用独立 mihomo 命令行时,可以在复制好的测试目录中执行下面的配置检查。示例目录 ./geo-check 需要提前创建,并放入准备测试的配置及数据文件;不要直接用测试命令覆盖正在运行的目录。

mihomo -t -d ./geo-check -f ./geo-check/config.yaml

检查失败时,先阅读首个错误。YAML 缩进错误、策略组不存在、GeoSite 类别缺失和数据解析失败,需要分别处理。配置检查通过也不等于所有流量都按预期分流,它只是下一步连接验证的前提。

第三层:重新建立连接并查看规则

  1. 切换到规则模式,确认不是全局模式或直连模式。
  2. 关闭目标网站的旧连接,再打开目标页面;必要时关闭该应用后重新启动。
  3. 在客户端连接面板中查看域名、目标 IP、命中规则与最终策略链。
  4. 分别测试一个预期直连的目标和一个预期进入“节点选择”的目标,记录两组结果。

例如,连接面板若显示命中 GeoSite(cn),策略为 DIRECT,才与国内域名规则的预期一致。具体显示格式因客户端而异,不能要求日志必须出现完全相同的字符串。已有长连接不会因为数据库更新就自动按新规则重新建立,验证时应使用新连接。

更新失败与分流异常:按现象处理

现象优先检查处理方向
下载连接超时数据来源域名能否访问、DNS 与当前网络状态先恢复下载链路,保留原有可用数据,不急于清空目录
提示分类不存在类别拼写、数据来源、加载的是哪份文件核对来源提供的分类,或改为该来源实际支持的规则
提示数据解析失败是否误下载网页、文件格式是否对应重新获取正确发布文件,避免使用仓库网页地址代替文件地址
文件更新了,分流没变化规则顺序、最终配置、旧连接重载后建立新连接,检查实际命中项,而不是只看出口 IP
每次更新订阅后设置消失修改是否仅发生在订阅缓存中将长期设置迁移到客户端持久化覆写层

首次启动下载不了,怎么办

如果配置需要 Geo 数据才能启动,而当前网络又无法访问数据来源,就可能形成初始化依赖。可在能够访问来源的网络中取得对应文件,将其放到实际内核工作目录,再重新启动。手动替换前先停止内核并备份旧文件;文件成功加载后,再处理后续自动更新链路。

不要为了让启动通过,直接删掉所有 GEOIP、GEOSITE 规则却保留原先的兜底行为而不检查结果。删除规则可能让原本直连的连接全部落入代理组,或让例外服务失去分流。临时调整也应记录改动,恢复后重新验证。

TUN 开启后,是否需要另一套数据库

不需要。TUN 改变的是流量接管方式,不会自动换用另一套 GeoIP、GeoSite 数据。同一内核通常仍读取同一工作目录中的数据。开启 TUN 后结果不同,应优先检查域名是否保留、DNS 请求走向、Fake-IP 映射和目标连接信息,而不是先下载另一份数据库。

对于只有 IP 的连接,GeoSite 没有可以匹配的域名;嗅探在部分协议与条件下可能补充域名,但不能保证对所有流量有效。需要理解接管、DNS 与规则之间的关系时,可继续查阅技术参考,或在术语表中核对 Fake-IP 与 TUN 的定义。

维护顺序:固定来源,保留回退,验证新连接

  • 固定来源:记录所选数据仓库、格式与配置字段,避免只记住一个镜像地址。
  • 合理周期:日常可先采用 24 小时,数据变化通常不需要分钟级轮询;电脑休眠或内核停止期间也不会持续执行更新。
  • 保留回退:切换来源或手动替换前,保存当前配置和可用数据,出现问题后一起恢复。
  • 检查真实结果:更新后至少确认一次加载状态,并用新连接核对域名、命中规则和策略链。

Geo 数据维护的重点不是让文件日期尽可能新,而是让数据格式、分类名称与规则目标保持一致。先确认内核和加载模式,再配置更新来源,最后通过连接面板验证,通常比反复替换数据库更容易定位问题。