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,而不是重写整页规则:
- 知名国内站大量使用多云/海外 Anycast CDN,离线库里若仍把整块段标成「CN 以外」,GEOIP 规则会在你眼前把流量送进代理——这类「误判」往往不是节点坏了。
- RULESET/RULE-PROVIDER里引用了远程geoip/geoip列表,远端已更新而你本地二进制仍在数月甚至数年前备份目录里。
- 同一套配置在另一台新机上「开箱一次即正常」,只差「应用数据目录拷了完整 geodata」这一点。
文件一般放在哪(桌面端与小提示)
不同桌面 GUI对「内核工作目录」「资源打包目录」的实现不一样,下面这些路径语义上正确,具体文件夹名请以你安装的客户端为准:常见是在配置文件同级的 .「资料目录」下放 Country.mmdb/geoip.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”类按钮本质是同一语义):
- 记录当前文件名:在配置文件或客户端「内核设置」页面确认 GEOIP/GEOSITE 实际指向的名称(示例:
Country.mmdb、geosite.dat);若使用geodata-mode一类的懒加载/缓存语义,顺带记下当前模式。 - 停机或停核写盘:关闭 Clash 进程或断开系统代理/TUN,避免运行中 mmap 锁住旧文件而导致覆盖失败或无感。
- 哈希或版本对照:若上游提供校验和,对齐后再覆盖;若没有,至少记下文件时间与大小,便于回滚上一个可用副本。
- 放回与权限:把新版本放到与用户配置一致的工作目录,POSIX 环境下注意可读权限;若在容器内跑 Clash,要改的是挂载卷里那份而不是镜像内只读拷贝。
- 完全重启内核:不是只重载远端规则,而要让进程重新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 通了,而要在实时连接视图里对照下面几项(不同客户端用词不同,核心是「能看出策略名与国家/规则类型」的那一页):
- 目标 IP 与国家码:若你已写
GEOIP,CN,DIRECT却仍然显示非 CN,应回头核对mmdb 版本是否真的被重新加载,而不是先入为主认定规则写错了。 - 域名与规则溯源:若走的是 RULESET/DOMAIN-SUFFIX 命中 GeoSite,应能看到对应标签;若只看到 IP 而未出现域名字段,再结合 Fake-IP 与 sniff 配置判断是否走了「IP 兜底」那条链。
- 异常模式交叉验证:拿一条在国内应直连的 CDN 做一次对照:若断开规则集远端更新只换本地二进制后现象立刻变好,则更坐实数据源问题。
若在日志里只看到 timeout/TLS,而说不清是规则还是链路问题,可把 超时与 TLS 的读法并排使用:先分出「是否真的走了预期策略组」,再谈节点握手。
换库后仍然不对时的两条旁路排查
双栈/IPv6:当 AAAA 记录把流量引向 IPv6 路径,而你又在规则里偏重 IPv4 的 GEOIP 结论时,会表现为看起来像「海外站不漏代理/国内走错」。可把 IPv6 双栈与直连规则一次关干净 当对照实验读一段,确认不是「另一条协议栈在逃」。
Fan-out 的远端规则集:若 GEOIP/GeoSite 全部来自远端 RULE-PROVIDER URL,远端本身若引用旧二进制或标签命名与你本地内核版本不匹配,也会让「看起来更怪」。这时先验证单条 GEOIP-CN 直连对照,再回看 Rule Provider 的更新周期与兼容性。
结语
Clash GEOIP 与 GeoSite 解决的是离线、可重复的地理与域名分类答案;它们和业务规则一样会老化。把 mmdb 与 geosite 当作「与订阅同级、需要择机更新」的基础设施,往往能一次性消掉大批量「国内直连不准」的假阳性,比无限堆叠手写 DOMAIN 更可维护。
Meta/Mihomo 系与各类 GUI 在按钮名字上千差万别,但只要记住停核→覆盖二进制→重启→看连接日志四国码与规则溯源这四步,你已能独立验证地理数据更新是否真的生效。规则分流的高阶心法仍建议回到 Clash 规则分流最佳实践 :数据与顺序一起对了,链路才稳。
当你在桌面或网关两侧统一了这一套维护节奏,再配合合适的客户端与可视化日志,误判类问题大都会收敛成「可查版本号、可查文件时间戳」的工程事实。Clash 在长期维护成本上通常比散装脚本更易形成闭环。
→ 立即免费下载 Clash,开启流畅上网新体验,在连接日志里用「策略名/国家码」一眼确认 GEOIP/GeoSite 是否与预期一致。