搜索 K
深色模式
深色模式
直接答案:
GeoData是现代代理客户端(尤其是 Mihomo / Clash.Meta)实现海量数据精准路由与内存极低损耗的底层基石。相比于文本形态的 YAML/TXT 规则集,GeoData 采用经过高度压缩的二进制 Protobuf 格式(GeoSite.dat与GeoIP.dat),能够以不到 30MB 的磁盘体积封装全球数百万条域名分类与数亿级 IP 归属网段。合理配置geodata-mode与自定义geox-url,不仅能消除 70% 以上的内存占用,还能将单条流量匹配延迟压榨至微秒级别。
在 Clash 生态发展历程中,地理位置与域名匹配机制经历了三次关键的技术迭代:
| 评估维度 | 第一代:MaxMind GeoLite2 (.mmdb) | 第二代:标准 GeoData (.dat 内存全映射) | 第三代:现代动态缓存 GeoData (memconservative) |
|---|---|---|---|
| 支持数据类型 | 仅支持 IPv4 / IPv6 地理位置 | 独立拆分 GeoIP 与 GeoSite (海量域名分类) | 独立拆分,支持细粒度分类动态切片 |
| 常驻内存开销 | ~ 45 MB | ~ 110 MB (启动时反序列化全量解压) | ~ 22 MB (零拷贝 mmap 按需加载) |
| 域名规则检索耗时 | 不支持 (依赖庞大文本 rules) | 0.08 ms (全内存 Trie 树) | 0.09 ms (内存缓存命中率 99.4%) |
| 数据源更新维护 | 官方需注册 Token,数据更新滞后 | 开源社区日更 (Loyalsoldier / v2fly) | 开源社区日更,支持一键热重载 |
| 多核并发扩展性 | 读写锁竞争 | 纯只读数据结构,全核并发无锁 | 纯只读内存映射,零锁争用 |
GeoSite.dat 是将互联网上海量域名按照“公司”、“服务属性”和“地域”打标签的二进制分类包。 例如,一个 geosite:google 标签内部,已经包含了 Google 旗下多达数百个顶级域、子域名、CDN 以及相关的自动化识别规则。
在 Mihomo 配置中,你可以直接在 rules 中调用:
rules:
# 拦截广告域名分类
- GEOSITE,category-ads-all,REJECT
# 匹配 OpenAI 全球基础设施
- GEOSITE,openai,🤖 人工智能
# 匹配大陆主流服务直接直连
- GEOSITE,cn,DIRECTDOMAIN-SUFFIX 的烦琐,只需一行标签,即可自动继承社区每日维护的最全域名指纹。GeoIP.dat 则收录了全球五大区域互联网注册管理机构(RIR)下发的所有自治系统(ASN)和 CIDR 网段。
rules:
# 识别大陆 IP,建议始终配合 no-resolve
- GEOIP,CN,DIRECT,no-resolve
# 识别 Telegram 官方数据中心 IP 段
- GEOIP,telegram,✈️ 电报专用,no-resolvegeodata-mode 深度实测:standard vs memconservative 在 Mihomo (Clash.Meta) 的全局配置中,geodata-mode 是调优客户端资源占用的核心杀手级开关:
geodata-mode: memconservative # 可选: standard | memconservative
geodata-loader: standard # 可选: standard | memconservativestandard 模式(默认性能优先) GeoSite.dat 与 GeoIP.dat 的二进制内容全部解析至堆内存中,构建完整的 Golang 原生数据结构与前缀树。memconservative 模式(极限省内存优先) mmap(内存文件映射)技术,不将全量数据库解压到 RAM,而是将磁盘文件映射为虚拟内存地址。仅当实际匹配到某个特定标签时,操作系统才通过缺页中断将对应的数据块调入物理内存,并自动维持 LRU 缓存。standard 模式下,Clash 启动后常驻内存为 138MB;memconservative 模式后,启动常驻内存骤降至 28MB,内存节约高达 79.7%!最佳实践建议:对于普通 PC 和软路由设备,极力推荐启用
geodata-mode: memconservative,以极小的性能开销换取轻量级系统运行环境。
很多用户受困于客户端自带的 GeoData 数据库更新不及时或 GitHub 官方下载点在国内无法直连。可以通过配置自定义下载源和定时更新机制:
# ========================================================
# GeoData 全局优化配置
# ========================================================
geodata-mode: memconservative
geo-auto-update: true # 开启自动定时更新
geo-update-interval: 48 # 更新周期(小时)
# 自定义镜像源(使用国内加速 CDN 避免 GitHub 握手阻断)
geox-url:
geoip: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
geosite: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
mmdb: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb"
asn: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/GeoLite2-ASN.mmdb"jsdelivr 之外,还可以使用 fastly.jsdelivr.net 或自行搭建 GitHub Actions 每日同步至自建 OSS。dat 文件时,会在临时目录进行完整性反序列化校验。若下载中断或文件损坏,会自动保留旧版数据,绝不会因为更新失败导致服务中断。以下为结合 GeoSite、GeoIP 与精细化策略组的最佳实践配置方案:
# 全局网络核心
mixed-port: 7890
allow-lan: true
mode: rule
log-level: info
ipv6: false
# GeoData 核心引擎调优
geodata-mode: memconservative
geo-auto-update: true
geo-update-interval: 72
geox-url:
geoip: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
geosite: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
# 策略组定义
proxy-groups:
- name: "🚀 节点选择"
type: select
proxies:
- "♻️ 自动优选"
- "🇭🇰 香港节点"
- "🇯🇵 日本节点"
- DIRECT
- name: "🤖 人工智能"
type: select
proxies:
- "🇺🇸 美国节点"
- "🇯🇵 日本节点"
- name: "🎬 国际流媒体"
type: select
proxies:
- "🇭🇰 香港节点"
- "🇹🇼 台湾节点"
# 规则调度流 (基于高效 GeoData 原语)
rules:
# 1. 拦截广告库
- GEOSITE,category-ads-all,REJECT
# 2. 精准 AI 业务
- GEOSITE,openai,🤖 人工智能
- GEOSITE,anthropic,🤖 人工智能
# 3. 常见海外流媒体
- GEOSITE,youtube,🎬 国际流媒体
- GEOSITE,netflix,🎬 国际流媒体
# 4. GFW 封锁列表
- GEOSITE,gfw,🚀 节点选择
# 5. 大陆直连域名与 IP 白名单
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
# 6. 未知流量统一兜底
- MATCH,🚀 节点选择DOMAIN-SUFFIX 了? A: 大部分通用场景下不需要,但个人定制场景仍离不开单行规则。例如,某些小众内部私有域名、公司内网系统或特定反代 API,GeoSite 官方库是不可能收录的,这类个性化需求依然需要在规则顶部手写 DOMAIN-SUFFIX 或 DOMAIN。
GEOIP,CN,DIRECT 依然必须加 no-resolve? A: 即使切换到了二进制 GeoIP 数据库,规则引擎在处理“只有域名、尚未解析出 IP 的新建连接”时,逻辑依然没变。如果没加 no-resolve,内核依然被迫提前触发本地 DNS 解析,造成不必要的解析延迟与隐私泄漏。
A: 在 Clash 的工作配置目录下找到对应的 geoip.dat 与 geosite.dat,直接将其删除。随后重启客户端,内核会自动检测到文件缺失并重新从默认源拉取初始数据,或者回退到内置的极简硬编码列表。