特定 DNS 有时会错误地解析为通配符

特定 DNS 有时会错误地解析为通配符

我遇到了一个间歇性问题,我不确定从哪里开始尝试解决它。

在我们的开发环境中,负载均衡器上有两个可见的 IP 地址,一个用于前端,另一个用于多台后端服务机器。前端配置为采用通配符 DNS 名称来支持通用“门户”。

dev.example.com   A     10.1.1.1
*.dev.example.com CNAME dev.example.com

后端服务器都是同一空间内的特定名称:

core.dev.example.com   A     10.1.1.2
cms.dev.example.com    CNAME core.dev.example.com
search.dev.example.com CNAME core.dev.example.com

问题就在这里。开发人员或程序定期尝试访问 cms.dev.example.com,会得到指向前端而不是后端负载均衡器的结果:

cms.dev.example.com is an alias to core.dev.example.com
core.dev.example.com is an alias to dev.example.com (WRONG!)
dev.example.com 10.1.1.1

所有开发人员都在使用 Mac OS X 机器,但我也发现该问题出现在使用本地云主机 DNS 解析器的 Ubuntu 机器上。

有时开发人员使用 VPN,将 DNS 定向到其自己的解析器,有时他在本地网络上使用 NAT 路由器分配的 DNS 解析器。

有时清除 Mac OS X DNS 缓存,登录 VPN,然后退出 VPN,问题就会消失。

原始权威服务器位于 zerigo 上,直接挖掘其名称服务器似乎总能给出正确答案。这些记录的已发布 DNS 缓存时间为 15 分钟,但该问题已断断续续出现约一周。

有什么故障排除建议吗?

答案1

嗯......当您将通配符 CNAME 指令替换为以下内容时会发生什么:

 *.dev.example.com.    A      10.1.1.1

答案2

不要将 CNAME 与通配符混合,尤其是当您的某个 CNAME 可能与通配符名称匹配时。

在这些条件下,通配符、CNAME 和 DNS 缓存的混合似乎会产生不一致的结果。

我通过删除所有 CNAME 并将其替换为 A 记录解决了间歇性解析问题。虽然不是很 DRY,但不再有不一致的查找。

相关内容