GeoIP 与 GeoSite:先区分 IP 数据和域名分类
mihomo 使用地理数据辅助规则分流。GeoIP 根据目标 IP 查询所属国家、地区或数据源定义的地址集合;GeoSite 根据目标域名查询分类集合,例如某个服务的域名组。数据库提供匹配材料,规则决定命中之后使用哪个出站策略。更新数据库会改变集合内容,不会自动替你重新排列规则。
| 数据类型 | 常见文件 | 规则与用途 |
|---|---|---|
| GeoIP DAT | geoip.dat | GEOIP,CN,DIRECT,查询 IP 集合 |
| GeoIP MMDB | Country.mmdb | 在 MMDB 模式下供 GEOIP 查询使用 |
| GeoSite | geosite.dat | GEOSITE,google,节点选择,查询域名分类 |
geodata-mode: true 让 GEOIP 使用 DAT 数据;设为 false 时使用 MMDB 数据。这个开关针对 GeoIP 的数据格式选择,不能理解成“关闭后所有 GeoSite 规则失效”。GeoSite 规则仍需要相应的域名数据库。
更新前检查:内核、当前配置和数据来源
FlClash 是客户端,实际解析规则的是内核。本文的字段以 mihomo 为对象;旧版 Clash 内核或其他客户端可能不支持其中部分选项。排查时先记录客户端版本和内核版本,再查看当前生效配置,而不是只看订阅链接的原始内容。
- 确认内核。从客户端的版本信息或启动日志中确认使用 mihomo,记录版本号,便于对照相应版本的配置文档。
- 确认配置。在 FlClash 的「配置」页面确认当前选中的配置。若客户端应用了覆写或合并设置,应以最终交给内核的配置为准。
- 确认模式。检查
geodata-mode;DAT 模式更新geoip.dat,MMDB 模式更新实际使用的 MMDB 文件。 - 确认规则类型。搜索
GEOIP、GEOSITE和RULE-SET。只使用远程规则集的配置,未必依赖同一套地理数据库。
订阅更新和数据库更新是两条独立路径。刷新订阅通常更新节点、策略组与配置文本;地理数据库则由内核或客户端的数据更新功能维护。节点列表已经刷新,并不能证明 GeoSite 数据也已经刷新。
自动更新:在 mihomo 配置中设置 24 小时间隔
下面是一段顶层配置示例,使用 MetaCubeX 的公开 DAT 数据源。它是需要合并到现有配置中的片段,不是包含节点和策略组的完整配置。字段必须与 rules、dns 等顶层字段处于同一缩进层级。
geodata-mode: true
geo-auto-update: true
geo-update-interval: 24
geox-url:
geoip: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat"
geosite: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
geo-auto-update: true:启用内核地理数据自动更新。geo-update-interval: 24:更新间隔为 24 小时,单位是小时,不是分钟。geox-url.geoip:DAT 格式的 GeoIP 下载地址。geox-url.geosite:GeoSite 下载地址。
如果现有配置已经有 geox-url,请合并其子项,保留仍在使用的其他来源,不要重复添加第二个同名顶层键。使用 MMDB 模式时,应配置对应的 geox-url.mmdb,不能把 DAT 地址填入 MMDB 字段。
订阅配置应通过持久覆写保存
直接编辑客户端下载的订阅文件,下一次刷新订阅时可能被覆盖。若当前 FlClash 版本提供持久覆写或配置合并功能,可在该功能中保存上述字段;具体入口随版本变化,应以界面实际名称为准。使用本地配置时,则修改自己管理的 YAML 文件。
保存后重新加载配置,必要时重启内核,并检查日志是否出现解析错误。自动更新依赖内核运行和网络可达;设备休眠、客户端退出或下载失败时,不能按墙上时钟保证每隔 24 小时一定完成一次更新。
手动更新:客户端操作与本地文件替换
优先使用客户端提供的数据更新动作
如果当前客户端提供 GeoIP、GeoSite 或地理数据库更新入口,先确认它更新的是哪种格式,再执行更新。FlClash 各版本的入口位置和可更新项目可能不同;不要把「配置」页面的订阅刷新按钮当成地理数据库更新按钮。
- 保留当前可用配置和数据库备份,记录更新前的文件修改时间。
- 执行客户端提供的地理数据更新动作,等待完成提示,同时查看日志中的下载或加载结果。
- 若客户端提示需要重新加载配置或重启内核,按提示操作,让新数据参与后续匹配。
- 关闭测试网站的旧连接后重新访问,在连接记录中核对匹配规则和实际出站。
客户端没有更新入口时,替换内核实际读取的文件
桌面端可以在确认数据目录后手动替换文件。先从启动日志、内核启动参数或客户端提供的目录入口找到工作目录;独立运行的 mihomo 可通过 -d 指定该目录。客户端可能把订阅文件和内核数据分别保存,不能仅凭同名文件判断位置。
退出客户端或停止内核,将旧文件移动到备份目录,再把下载完成的新文件放入实际数据目录。DAT 模式通常对应 geoip.dat 与 geosite.dat;MMDB 模式应沿用内核正在读取的文件名,注意 Linux 文件名大小写。完成后启动内核,检查数据加载日志。
GEOIP 与 GEOSITE 规则写法及匹配顺序
mihomo 的普通规则按从上到下的顺序匹配,通常命中第一条后就确定策略。下面假设现有配置已经定义名为「节点选择」的策略组;若实际组名不同,需要同步替换。将示例合并到已有规则列表,不要另建重复的 rules 键。
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- GEOSITE,google,节点选择
- GEOIP,private,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,节点选择
DOMAIN-SUFFIX是精确意图更明确的域名后缀规则,放在前面可以覆盖后续较宽泛的分类策略。GEOSITE,google,节点选择使用 GeoSite 的google分类;目标域名在集合中才会命中。GEOIP,private,DIRECT,no-resolve使用数据源提供的private集合。使用前确认该数据源确实包含它。GEOIP,CN,DIRECT根据目标 IP 查询 CN 集合;遇到尚未取得 IP 的域名请求时,可能触发解析。MATCH是最终兜底,应放在这些具体规则之后。
no-resolve 的作用是避免为该条规则额外解析
给 GEOIP 规则添加 no-resolve,表示匹配这条规则时,不为只有域名的请求主动发起 DNS 解析。目标已经是 IP,或请求上下文已有可用 IP 时,仍可能进行地址匹配。它不会关闭整个客户端的 DNS,也不保证该规则能处理所有域名请求。
GeoSite 依赖可用域名信息。应用直接连接 IP、域名嗅探没有获得结果,或当前流量接入方式未保留域名时,域名分类规则可能无法命中。TUN 负责接管流量,并不等于每条连接都能恢复域名;还需要结合 DNS、Fake-IP 或嗅探设置判断。
更新失败与规则不生效:按日志定位
| 现象 | 优先检查 | 处理路径 |
|---|---|---|
| 下载超时 | 数据源域名解析、HTTPS 连通性、启动时的可用出站 | 先用已可用配置恢复网络,再更新数据库 |
| 文件解析失败 | 格式是否正确、下载内容是否实际为网页 | 重新取得对应 DAT 或 MMDB 文件,恢复备份后重试 |
| 分类加载失败 | 数据源是否包含规则引用的分类名 | 对照分类清单修正规则或选择匹配的数据源 |
| 更新成功但分流未变 | 更靠前的规则、出站模式、旧连接、实际数据目录 | 切到规则模式,新建连接并核对命中项 |
避免下载数据依赖尚未加载的数据
首次启动时,如果数据库缺失,而下载又依赖一组必须读取该数据库才能初始化的规则,就可能出现启动与下载相互依赖。此时可以先使用可启动的简化配置建立连接,或手动准备数据文件,再恢复正式规则。反复刷新订阅通常不能解决这种依赖问题。
RULE-SET 与 GeoSite 使用不同更新周期
RULE-SET 引用的是 rule-providers 中定义的规则集,更新来源和周期由对应 provider 管理。例如 HTTP provider 的 interval: 86400 表示 86400 秒,也就是 24 小时;它与 geo-update-interval: 24 的小时单位不同。更新 geosite.dat 不会同时刷新所有 provider。
更新后验证:检查新连接的命中规则
数据库成功下载只是第一步。验证时将客户端设为规则模式,选一个配置中已有明确分类的域名,关闭旧页面连接后重新访问,再到连接详情或日志中查看目标域名、目标 IP、匹配规则和出站策略。全局模式会绕开预期的规则分流判断,不适合这一步测试。
- 检查加载结果:确认没有文件不存在、分类缺失或数据解析报错。
- 检查匹配顺序:若命中前面的域名规则,后面的 GEOIP 数据即使更新,也不会改变该连接的策略。
- 检查新连接:已经建立的 TCP 长连接通常不会因为数据库更新立即改走另一条路径。
- 检查结果预期:IP 地理归属和域名服务分类是不同维度,CDN 地址变化也可能影响 GEOIP 判断。
日常维护可以采用 24 小时自动更新,并在异常时手动更新一次、核对日志。出现回归问题时,恢复旧数据库和原配置,再逐项比较来源、分类及规则顺序。更多基础操作可查看FlClash 配置教程;DNS、模式与连接问题可结合疑难解答继续定位。