GEOIP、mmdb、GeoSite、geosite 各是什么

Clash GEOIP 规则(以及依赖 IP 的策略匹配)吃的是二进制 IP 地理归属库,在社区发行里常以 mmdb(MaxMind DB 格式)或历史兼容文件名出现。内核用它来回答「这个 IP 归哪个国家/哪个 ASN」——所以它直接影响「国内直连」「CN」之类基于 IP 的结论。

GeoSite 则是域名维度的离线清单:把常见服务商、CDN、地区相关域名编成「标签」(例如 geolocation-!cn、流媒体、广告等)。在 Clash Premium / Mihomo(Meta)系里你看到 GEO-SITE(或等价规则写法)指的就是这份集合,通常分发为二进制 geosite.dat(文件名随分发渠道略有出入,核心是「二进制域名集」这件事)。

两句话总结:mmdb 回答「IP 是哪个国家/地区」geosite 回答「这个域名在哪个桶里」国内直连体验是否顺滑,很大程度上取决于这两条数据是否与当下 CDN/IP 演进同步,以及是否与你在 Clash Meta DNS 配置(nameserver、fallback、fake-ip-filter) 里写的解析链路一致——例如 Fake-IP 下若解析结果被嗅探回填,再配合陈旧的 GEOIP,日志里看起来像「走错策略」就不稀奇。

什么时候该怀疑是「地理库旧了」而非规则写法

下面几类更可复制的症状,值得你优先把时间花在替换 mmdb / geosite,而不是重写整页规则:

与「规则分流」顺序的关系:一条过宽的 MATCH 或提前命中的 FINAL 仍然会抢在所有 GEOIP 之前放行;请先确认没有把「MATCH 放行」写成排障绊脚石,再上地理库。规则分流的总原则见前文链到的那篇分流最佳实践摘录即可。

文件一般放在哪(桌面端与小提示)

不同桌面 GUI对「内核工作目录」「资源打包目录」的实现不一样,下面这些路径语义上正确,具体文件夹名请以你安装的客户端为准:常见是在配置文件同级的 .「资料目录」下放 Country.mmdbgeoip.metadb 风格的文件,或由客户端提供「内置更新」一键拉取。mmdb体积通常可到数十 MB(视发行打包策略),拷贝前注意磁盘配额与哈希校验。

若你从上游项目获取独立的 geoip/geosite 发行包(或自行使用维护脚本),常见做法是:停核 → 覆盖同名二进制 → 再启动内核——这样可避免「热替换后内存里仍是旧mmap」的假更新。部分客户端提供「清空本地 rule provider/remote resource 缓存」,当 mmdb/geosite与远程规则同一天更新时也可顺手清一次以避免版本错配。订阅刷新报错与远端 404 则属于另一条排障链路,可走 订阅更新失败与缓存清理 ,与单纯的地理库二进制并不完全同一类故障。

网关/软路由场景中,整条链还会叠加 DNS 劫持、旁路转发与 iptables——若你是「网关级」部署,可把 OpenClash/OpenWrt 的全局与国内直连策略与本篇二进制替换思路一起看 OpenWrt 与 OpenClash 网关与国内直连 ,避免局域网设备解析到的 CDN 与您假设的不一致却仍去改 GEOIP。

实测:替换 mmdb / geosite 并重载内核

可按下面可复制顺序操作(具体菜单名因客户端而异,“一键更新地理库”“Update Geo”类按钮本质是同一语义):

  1. 记录当前文件名:在配置文件或客户端「内核设置」页面确认 GEOIP/GEOSITE 实际指向的名称(示例:Country.mmdbgeosite.dat);若使用 geodata-mode 一类的懒加载/缓存语义,顺带记下当前模式。
  2. 停机或停核写盘:关闭 Clash 进程或断开系统代理/TUN,避免运行中 mmap 锁住旧文件而导致覆盖失败或无感。
  3. 哈希或版本对照:若上游提供校验和,对齐后再覆盖;若没有,至少记下文件时间与大小,便于回滚上一个可用副本。
  4. 放回与权限:把新版本放到与用户配置一致的工作目录,POSIX 环境下注意可读权限;若在容器内跑 Clash,要改的是挂载卷里那份而不是镜像内只读拷贝。
  5. 完全重启内核:不是只重载远端规则,而要让进程重新mmap二进制库;随后在日志里应有「加载 GEOIP」「加载 GEOSITE」或等价提示。
配置片段语义(示意,字段名以 Mihomo/客户端为准)geox-url:
  geoip: "https://example.invalid/Country.mmdb"
  geosite: "https://example.invalid/geosite.dat"

如果你在 YAML 层显式配置了拉取 URL,记得远端与本地二进制择一作主源,避免远端自动更新与手工拷贝互相打架。OpenWrt/旁路网关上则更常见整机策略组与大流量下对GEOIP-CN的依赖——此时更新意义更大,但也要同时确认局域网 DNS没有把国内域名解析到国外公共 DNS。

如何对照连接日志校验命中

更新二进制后不要只看 Ping 通了,而要在实时连接视图里对照下面几项(不同客户端用词不同,核心是「能看出策略名与国家/规则类型」的那一页):

若在日志里只看到 timeout/TLS,而说不清是规则还是链路问题,可把 超时与 TLS 的读法并排使用:先分出「是否真的走了预期策略组」,再谈节点握手。

换库后仍然不对时的两条旁路排查

双栈/IPv6:当 AAAA 记录把流量引向 IPv6 路径,而你又在规则里偏重 IPv4 的 GEOIP 结论时,会表现为看起来像「海外站不漏代理/国内走错」。可把 IPv6 双栈与直连规则一次关干净 当对照实验读一段,确认不是「另一条协议栈在逃」。

Fan-out 的远端规则集:若 GEOIP/GeoSite 全部来自远端 RULE-PROVIDER URL,远端本身若引用旧二进制或标签命名与你本地内核版本不匹配,也会让「看起来更怪」。这时先验证单条 GEOIP-CN 直连对照,再回看 Rule Provider 的更新周期与兼容性。

合规提示:请仅在你有权管理的设备与网络上更新与测试代理配置;不要利用误判分析去绕过单位或属地网络管理规定。二进制文件应从可信来源获取并校验完整性。

结语

Clash GEOIPGeoSite 解决的是离线、可重复的地理与域名分类答案;它们和业务规则一样会老化。把 mmdbgeosite 当作「与订阅同级、需要择机更新」的基础设施,往往能一次性消掉大批量「国内直连不准」的假阳性,比无限堆叠手写 DOMAIN 更可维护。

Meta/Mihomo 系与各类 GUI 在按钮名字上千差万别,但只要记住停核→覆盖二进制→重启→看连接日志四国码与规则溯源这四步,你已能独立验证地理数据更新是否真的生效。规则分流的高阶心法仍建议回到 Clash 规则分流最佳实践 :数据与顺序一起对了,链路才稳。

当你在桌面或网关两侧统一了这一套维护节奏,再配合合适的客户端与可视化日志,误判类问题大都会收敛成「可查版本号、可查文件时间戳」的工程事实。Clash 在长期维护成本上通常比散装脚本更易形成闭环。

立即免费下载 Clash,开启流畅上网新体验,在连接日志里用「策略名/国家码」一眼确认 GEOIP/GeoSite 是否与预期一致。