邪恶的泛域名

前段时候发现域名经常不好用,在很多机器上面很长时间解析不出来。今天有点时间,就研究了一下,发现原来是泛域名到 CNAME 导致的。

这个域名用了 CNAME 两次的方式来做双网分流,也就是 www.host.com 长时间 CNAME 到 www.a.host.com ,然后 www.a.host.com 会根据不同的来源 CNAME 到某个机器名,最后某个机器名对应到某个 A 记录。出问题的原因是,有 IPV6 支持的客户端通常会先请求 AAAA 记录,如果没有则会再次请求 A 记录(没仔细研究过 DNS 协议,虽然好像协议中有 ANY 选项,但是我 tcpdump 出来的结果,过来无数 AAAA 请求)。对于 AAAA 记录,www.host.com -> www.a.host.com 和 www.a.host.com -> machine2.host.com 的 CNAME 都正常执行了,在 machine2.host.com 到地址的时候,假如有 AAAA 记录,那么这时候当然是正常返回该记录,但是实际上没有,于是落到了以前设置的一个泛域名解析上面了。这个泛域名解析会将 *.host.com CNAME 到 www.host.com,造成了死循环。这时候会返回一个 SERVFAIL,客户端则会去重试其他 NS,直到完全失败,才会再发起 A 请求。

解决办法两个,要么就取消泛域名,要么就泛域名不要到 CNAME, 直接到 A 记录。我是直接干掉泛域名了,懒得折腾。

至于为什么用 2 次 CNAME 来做分流而不是 1 次或者直接用 view ,那是因为某些原因,总的来说,还是因为我懒。。