meta-rules-dat icon indicating copy to clipboard operation
meta-rules-dat copied to clipboard

对各种geo文件以及格式的疑问

Open lonble opened this issue 10 months ago • 10 comments

你好,我读过mihomo的文档和meta-rules-dat的README后发现有一些东西并没有说明,不知道在这里问是否合适,如果有相关文档也麻烦贴一下,不胜感激。

Loyalsoldier/v2ray-rules-dat里只有一种.dat格式,meta-rules-dat有.dat, .db, .mmdb, metadb,这几种格式有什么区别?

Loyalsoldier/v2ray-rules-dat里只有geoipgeosite两个文件,meta-rules-dat多了一个country.mmdb,这个文件有什么特殊作用?

mihomo配置里的geodata-mode只提到了.dat.mmdb,其他两种格式是否不被mihomo支持? image

mihomo配置里的geox-url为什么有单独的mmdb选项,mmdbasn貌似不受geodata-mode的限制? image

lonble avatar Apr 10 '24 15:04 lonble

我也有此疑惑,文档没解释清楚

adoyle-h avatar Apr 16 '24 06:04 adoyle-h

我也不清楚, 另外我还不清楚 rule-set 内引用 meta branch 的和 geoip/site 什么区别,有多少重叠。 我这两天看了一些高 star 分享,很多配置都是一大堆 rule-providers 和 rule,但其实有很多都重叠。

potoo0 avatar Apr 16 '24 06:04 potoo0

今天早上粗略查了下,说下我的理解,可能不准确。


  • geosite.db: clash 源码里未发现读取的地方, 猜测 clash 不支持此格式

  • geosite.dat: 源码 path.GeoSite, 存放域名的地方, 这些域名会按照一定规则分组称为 域名类别, 比如 domain:ip.cn 属于 cn; domain:git.io domain:githubusercontent.com 属于 github. 这个文件可以通过 metacubex/geo 解压查看.

  • country.mmdb: 格式是 maxmind 定义的 IP geolocation databases,用途是根据 ip 地址查询国家/城市/时区等信息,而名称的 country 是指只包含到国家的信息,而没有城市/时区,具体可容纳的信息见它的 pdf 说明 GeoLite2-IP-MetaData-Databases-Comparison-Chart. 而这个仓库的此文件来自 Loyalsoldier/geoip, 其在 maxmind 提供的标准基础上新增了域名类别(cloudflare/google...) 等等, 具体见其说明 与官方版 GeoIP 的区别

  • geoip.db/geoip.metadb: 根据源码 path.MMDB 来看 Country.mmdb/geoip.db/geoip.metadb 只会取一个用来比较 ip 归属国家的 (geoip.Match), 所以对于 clash 来说这三者可看作同一份数据, 以下简称为 Country.mmdb 系列

  • geoip.dat: 根据源码大量 C.GeodataMode (update_geo.UpdateGeoDatabases) 的判断来看, Country.mmdb 系列 和 geoip.dat 是二选一的. 而此仓库的来自 Loyalsoldier/geoip 所以其实这四种都是同一份数据的不同格式.

总结:

  • Country.mmdb/geoip.db/geoip.metadb 和 geoip.dat 是二选一的, 四者内部都是同一份数据, 通过配置 GEOIP 数据模式 来决定.
  • geosite.db 不支持
  • geosite.dat 按照地区(cn...)/服务商(如 google/github...)等分组的域名(2024/07/20 补充: 一个组对应一个文件, 通过 rule 里 GEOSITE 引用, 按需加载--只会加载引用的)
  • xxx-lite 就是 xxx 的精简版

2024/04/17 geosite.dat 数据概览:

geo unpack site ./geosite.dat -d sites
ls sites -1 | wc -l
# >>> 1257

dust sites
#  16K   ┌── meta                  │█                                       │   0%
#  16K   ├── microsoft             │█                                       │   0%
#  16K   ├── tld-!cn               │█                                       │   0%
#  16K   ├── win-extra             │█                                       │   0%
#  16K   ├── win-update            │█                                       │   0%
#  20K   ├── beats                 │█                                       │   0%
#  20K   ├── category-ads          │█                                       │   0%
#  20K   ├── category-ecommerce    │█                                       │   0%
#  20K   ├── category-games        │█                                       │   0%
#  24K   ├── category-ads-all      │█                                       │   0%
#  28K   ├── google                │█                                       │   0%
#  32K   ├── category-media        │█                                       │   0%
#  36K   ├── category-entertainment│█                                       │   0%
#  48K   ├── apple                 │█                                       │   1%
#  96K   ├── geolocation-cn        │█                                       │   1%
# 124K   ├── gfw                   │█                                       │   2%
# 140K   ├── category-porn         │█                                       │   2%
# 148K   ├── category-companies    │█                                       │   2%
# 520K   ├── geolocation-!cn       │███                                     │   7%
# 1.4M   ├── cn                    │████████                                │  18%
# 7.8M ┌─┴ sites                   │███████████████████████████████████████ │ 100%

potoo0 avatar Apr 17 '24 03:04 potoo0

@adoyle-h 可以看下我上面分享的, 有问题一起讨论

potoo0 avatar Apr 17 '24 04:04 potoo0

还有个问题,geosite.dat这个文件, meta-rules-dat的版本和v2ray-rules-dat版本的并不一样,country.mmdb和geoip.dat倒是一样的,不知道这两个有什么具体区别,根据Readme似乎是新增合并了一些域名数据,但是文件大小却小还了2MB,有点疑惑😂

lim-kim930 avatar May 22 '24 06:05 lim-kim930

还有个问题,geosite.dat这个文件, meta-rules-dat的版本和v2ray-rules-dat版本的并不一样,country.mmdb和geoip.dat倒是一样的,不知道这两个有什么具体区别,根据Readme似乎是新增合并了一些域名数据,但是文件大小却小还了2MB,有点疑惑😂

meta的geosite删去了大量category-ads-all域名规则

escapezn avatar Jun 02 '24 15:06 escapezn

@potoo0 请问一下, 使用这些数据格式配置分流规则, 和直接使用类似rule-providers这种yaml文件有什么区别啊? 我看好像数据源都差不多, 我用的blackmatrix7/ios_rule_script@master的classical数据, 而且都有No_Resolve版本.

NewEpoch2020 avatar Jul 18 '24 06:07 NewEpoch2020

@potoo0 请问一下, 使用这些数据格式配置分流规则, 和直接使用类似rule-providers这种yaml文件有什么区别啊? 我看好像数据源都差不多, 我用的blackmatrix7/ios_rule_script@master的classical数据, 而且都有No_Resolve版本.

@NewEpoch2020

rule-provider 一般是把目标地址按照一些规律分组(规律自己随意), 比如我把 谷歌相关的域名全部收集起来,例如:

########## 注意这里的规则不写代理出口,下面三条是举例乱写的
DOMAIN-KEYWORD,google
DOMAIN-SUFFIX,google0000001.com
IP-CIDR6,22:22:22:22::7/32

然后配置 rule-provider 起名 gg, format=text, behavior=classical 指向我这段文件地址, 那么在 rule 下面就可以配置 RULE-SET,gg,出口-美国,这样满足上面三条条件的目标地址就会使用出口“出口-美国”。


rule-provider 支持两种 format: yaml 和 text, 以及 三种 behavior: domain / ipcidr / classical

简单总结三种 behavior:

  • domain: 只能写域名
  • ipcidr: 只能写 ip 的 cidr
  • classical: 支持 rule 配置下面的所有, 例如: SRC-PORT,9999

no-resolve: 如果访问域名例如 google.com 然后遇到了 IP-CIDR 的规则时,MetaCubeX 会尝试将 google.com dns解析成 ip 地址,然后拿解析的 ip 地址去判断是否命中 IP-CIDR 规则。而 no-resolve 就是告诉 MetaCubeX 这条 IP-CIDR 不要 dns 解析,那访问 google.com 就会永远不命中也就是会跳过这条 IP-CIDR 的规则。


总结:

  1. rule-provider 用途上和 geosite 类似:按照一些规律挑选出部分目标地址(相当于分组,从不计其数的目标地址中按照域名/地域/服务提供商等等分组),然后在 rule 里来指定此分组的代理出口,如 RULE-SET,gg,出口-美国 GEOSITE,google,出口-美国。 而 rule-provider 比 geosite 更灵活功能更多,只要 rule 下面支持的这里都可以支持,比如 ipcidr / 应用程序名等等: IP-CIDR6,2620:0:2d0:200::7/32, PROCESS-NAME,aria2

    如果把 geosite 的内容的文件名作为 rule-provider 名称,对应文件内容作为 rule-provider 内容时,二者作用完全等价。

  2. rule-provider 的 behavior=classical 时支持配置 "rule配置" 下面的规则,即相比 domain 和 ipcidr 额外支持 DOMAIN-SUFFIX, SRC-PORT, PROCESS-NAME 等等
  3. no-resolve: 遇到 ip 地址的规则时,跳过域名的 dns 解析。目标地址是域名的话就会跳过此 ip 规则,作用是可以防止墙内 dns 污染

potoo0 avatar Jul 18 '24 07:07 potoo0

@potoo0 听起来感觉各有利弊, rule-provider更灵活, 而且方便查看里面的规则. geosite的话配置文件就很简洁. 那么它们的执行效率其实没差吧? 是不是都是提前把规则加载到内存里去了, 然后每次都按顺序比对.

NewEpoch2020 avatar Jul 19 '24 15:07 NewEpoch2020

@potoo0 听起来感觉各有利弊, rule-provider更灵活, 而且方便查看里面的规则. geosite的话配置文件就很简洁. 那么它们的执行效率其实没差吧? 是不是都是提前把规则加载到内存里去了, 然后每次都按顺序比对.

@NewEpoch2020 粗略看了源码,匹配效率没差,都需要展开一行行逐个判断是否命中。

不同的是:

  • geosite 是在启动时按需加载,按需就是说只有 rule 里引用的才会实际加载。比如 geosite 有 100 个文件(分组)只使用了其中一个组如 google,那就只会加载 google 这一个组。
  • rule-provider 启动时全部加载,不管 rule 里有没有引用,考虑实际中乱加不使用的 rule-provider 人应该不多,浪费不了多少内存。

相关源码位置:

测试入口: rules_test.txt

potoo0 avatar Jul 20 '24 10:07 potoo0