canary金丝雀域名深度解析:用test.txt验证cache-domains缓存是否真正命中
【免费下载链接】cache-domainsDomain Names required for LAN Content Cache DNS spoofing项目地址: https://gitcode.com/gh_mirrors/ca/cache-domains
cache-domains 是一个为局域网内容缓存(LAN Content Cache)整理的域名清单,核心用法是通过 DNS 劫持(DNS spoofing)把游戏下载流量重定向到缓存服务器。而清单里的canary 金丝雀域名(位于test.txt)就是用来验证这套缓存是否真正命中的"体检工具"——配置得对不对,一分钟就能查出来。
为什么需要金丝雀域名验证 🐤
很多管理员搭好 DNS 劫持后并不知道它是否生效:
- 如果域名清单没有正确下发,游戏下载会静默地直连公网,不报错、不提示,只是缓存服务器毫无命中记录;
- 游戏下载是一次性大流量,等你发现没命中时,带宽可能已经白白消耗掉了。
金丝雀域名的思路很简单:选几个不承载真实游戏内容的测试域名,把它们和正式 CDN 一起劫持到缓存服务器。因为测试域名"零风险、随时可查",所以:
- 解析结果指向缓存服务器 IP → 说明 DNS 劫持链路正常;
- 解析结果还是公网 IP → 说明配置有问题,趁早修,不用等真正下载游戏时翻车。
在清单主配置文件cache_domains.json中,这一组域名被定义为独立条目:
"name": "test",描述为 "CDN for Testing, recommended to enable for additional diagnostics"(推荐启用以获得额外诊断能力),关联文件正是test.txt。
test.txt 里的 6 个金丝雀域名一览
test.txt内容非常短,一共 6 个域名,按"三组名称 × 两个官方域名后缀"排列:
| 分组 | 含义 | 对应域名 |
|---|---|---|
| canary | 金丝雀(矿井预警,最直观) | canary.lancache.net/canary.uklans.net |
| litmus | 试金石(litmus test,测试是否达标) | litmus.lancache.net/litmus.uklans.net |
| trigger | 触发器(用于触发并观察请求路径) | trigger.lancache.net/trigger.uklans.net |
三组名字指向同一件事:用最小代价探测流量走向。验证时任选其一即可,其余留作备用或交叉对照。
一键启用 test 域名:DNS 规则生成步骤
cache-domains 自带一套脚本,可为 AdGuard Home、Dnsmasq/Pi-hole、Unbound、BIND9(RPZ)、Squid 生成对应配置,详见scripts/README.md。
第 1 步:获取清单文件
git clone https://gitcode.com/gh_mirrors/ca/cache-domains第 2 步:准备配置
复制scripts/config.example.json为scripts/config.json,把你负责缓存的域名(包括test)映射到缓存服务器 IP,例如:
{ "ips": { "generic": "10.10.3.16" }, "cache_domains": { "default": "generic", "test": "generic" } }第 3 步:生成并下发规则
以 Dnsmasq 为例运行bash scripts/create-dnsmasq.sh,脚本会输出形如:
address=/canary.lancache.net/10.10.3.16 local=/canary.lancache.net/再把scripts/output/dnsmasq/下的文件复制到 Dnsmasq 配置目录(如/etc/dnsmasq/dnsmasq.d/)并重启服务。其他 DNS 方案同理,脚本已帮你处理好格式差异。
三步确认缓存是否真正命中 ✅
- 查解析:在客户端执行
dig canary.lancache.net +short(Windows 用nslookup canary.lancache.net),返回的应该是缓存服务器 IP(如10.10.3.16),而不是公网地址。 - 查连接:在客户端访问该金丝雀域名,确认 TCP 连接确实落在缓存服务器上(可以用防火墙日志或抓包确认源 IP)。
- 查命中:查看缓存服务器(如 Squid / monolithic)的访问日志,确认对金丝雀域名的请求已计入命中统计。
三步全过,说明 DNS 劫持链路完好,正式游戏域名(steam.txt、epicgames.txt等)大概率同样生效。
常见"不命中"原因排查表 🔍
| 症状 | 可能原因 | 解决办法 |
|---|---|---|
dig返回公网 IP | 生成的规则文件没放对目录,或没重启 DNS 服务 | 按scripts/README.md指引核对路径并重启服务 |
| 部分客户端命中、部分不命中 | 个别设备使用了自己的 DNS(手机、智能路由、DHCP 下发的 DNS 不同) | 统一内网 DNS 指向 |
| 解析正确但缓存无命中 | 流量走 HTTPS,明文缓存无法拦截 | 参考faq.md中 SNI Proxy / HTTPS 说明,或改用支持 SNI 的代理 |
| 改完配置后老客户端不生效 | 客户端/路由器存在 DNS 缓存 | 等待 TTL 过期或手动刷新 DNS 缓存 |
| 通配域名未匹配 | 清单中的*.xxx.com通配符在 Squid 等方案中需要重新格式化 | 使用scripts/create-squid.sh自动生成,勿手工改写 |
小结:把金丝雀配置当作"常驻体检项" 🩺
- 金丝雀域名成本几乎为零:不占缓存空间、不消耗公网带宽,却在每次网络变更后都能给出即时反馈;
- 建议把
test条目长期保持启用(官方描述也推荐这么做),今后调整 DNS、升级缓存服务器后重跑一遍三步验证即可; - 本文涉及的核心文件:
test.txt(金丝雀域名清单)、cache_domains.json(条目定义)、scripts/config.example.json(配置模板)、scripts/README.md(脚本使用说明)、faq.md(常见问题)。
一句话总结:配置完先查金丝雀,金丝雀命中了,缓存才算真正命中。
【免费下载链接】cache-domainsDomain Names required for LAN Content Cache DNS spoofing项目地址: https://gitcode.com/gh_mirrors/ca/cache-domains
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考