先区分域名名单与 IP 名单
| 资源类型 | 主要判断什么 | 需要留意什么 |
|---|---|---|
| Geosite 或域名规则集 | 目标域名是否属于某组条件 | 分组由维护者定义,名称不是通用保证 |
| GeoIP 或 IP 规则集 | 目标 IP 是否落在相应网段 | 结果受数据库更新和实际目标地址影响 |
| 组合规则集 | 按支持的格式组合多种条件 | 字段、行为与格式须匹配目标内核 |
域名分类与 IP 所在网段不是同一件事。一个服务可能使用全球 CDN、共享地址或多个域名;命中某个地理 IP 分组,并不等于服务属于那个地区。
添加资源前先问清楚:要匹配网站域名、目标 IP,还是两者组合?已有少量明确目标时,几条可读的分流规则可能比引入一整套大名单更容易维护。
mrs、srs、YAML 和 JSON 不能只改扩展名
| 内核或配置 | 常见方式 | 兼容性检查 |
|---|---|---|
| mihomo rule-provider | behavior 为 domain、ipcidr 或 classical;format 为 yaml、text 或 mrs | mrs 当前用于 domain / ipcidr,行为须与内容一致 |
| sing-box rule-set | 本地或远程 source / binary 规则集;二进制常见为 srs | 使用该内核支持的源格式、编译格式与版本 |
| 旧 Geo 数据配置 | 按具体内核历史版本定义 | 迁移时核对当前文档,不能照搬旧字段 |
mrs 和 srs 是不同内核使用的格式。把文件后缀从 mrs 改为 srs,不会完成内容转换;YAML 能被解析,也不代表内部字段符合目标规则结构。
尤其是 sing-box 的旧 GeoIP、Geosite 配置,迁移时要按实际版本查看迁移说明及 rule-set 用法。不要把别的内核示例直接放进当前配置。
下载成功、加载成功、规则引用是三步
- 下载:确认资源 URL、更新时间和下载时使用的出站。状态 200 还要检查内容是不是错误页或登录页。
- 加载:核对 format、behavior、源结构及版本。日志中的格式错误,要先解决资源兼容性。
- 引用:确认路由规则实际引用了这个资源名称或标签,并指向存在的策略组或出站。
资源只提供匹配条件,不会因为文件出现在磁盘上就自动参与分流。名称拼写不一致、规则没引用,或者引用项被更前面的规则覆盖,都可能让更新看起来没有作用。
更新规则时也会用到网络与出站
远程资源的下载请求有自己的 DNS 和连接路径。若启动配置需要某规则文件,而获取该文件又依赖尚未就绪的规则或策略,就可能形成启动依赖问题。
检查资源更新错误时,记录 URL、下载时间、HTTP 状态和所用出站。先让一个资源稳定加载,再处理其他名单;不要靠每几秒更新一次来掩盖连接或权限错误。
用一条真实连接验证名单与顺序
选一个具体域名发起请求,在客户端记录中确认目标信息、命中规则和最终出站。若命中了更靠前的域名规则,后面的 IP 名单不会自动把结果改过来。
Fake-IP、真实解析与域名识别方式也会影响规则能拿到哪些信息。排查时保留当前规则顺序,只改一个条件,用同一目标复测。
客户端已经连接成功但走错出站时,先沿命中规则找到被引用的策略组,继续追到实际选择的节点或直连。单看某个大规则集已经“更新完成”无法解释路径。
留住可回退的资源和更新记录
更换规则维护源前,备份当前配置及仍可用的本地资源,记录来源与版本。按软件支持的校验方式检查配置后,再发起实际请求。
资源失效时应能恢复上一份可用配置;不要把来源不明的名单当成必然更准确的升级。对变化频繁的服务,维护少量明确例外并记录原因,往往更容易知道下一次故障应该改哪里。
常见问题
GeoIP 能精确判断一个网站属于哪个国家吗?
不能。它按数据库与 IP 网段给出分类,而网站可能使用 CDN、共享地址或跨地区基础设施。域名归属与连接地址的分类是不同问题。
规则集更新成功,为什么没有改变出站?
先确认资源正确加载并被规则引用,再看目标是否匹配,以及前面是否已有规则命中。最后核对规则指向的策略组当前选了什么。
参考资料
原理和协议定义可查以下标准与官方文档。文中的流程图由 AFQKit 绘制。