由于历史原因,我们的 DNS 域有 5 级 CNAME。有些东西被外包以实现高可用性等,但这不是重点。我的问题是,对于 DNS 解析器来说,5 个 CNAME 是否有点多余?我找不到任何知名网站有超过 2-3 级嵌套 CNAME 指向不同的 DNS 域。
我们的 CNAME 跳转如下所示:(我仅使用 xyz 作为示例)
www.xyz.com -> xyz.akadns.net -> xyz.worldwide.akadns.net -> xyz.cedexis.net -> xyz.msedge.net -> host1.msedge.net(最终 A\AAAA 记录)
我看到很多客户抱怨我们网站的 DNS 解析问题,而其他网站对他们来说都很好,尽管我使用http://check-host.net/check-dns?host=www.xyz.com测试我们的 DNS 解析。
似乎在全世界范围内都运行良好。我的结论是,当上述某个跳数无法解析时,大部分情况下都是本地 ISP 提供商的 DNS 解析器出了问题。nslookup 仅在我们网站上的这些客户端计算机上失败,而且这种情况也是偶尔发生的。
总体来说,这种多级 CNAME 是不是一种糟糕的设计?
答案1
总体来说,这种多级 CNAME 是不是一种糟糕的设计?
CNAME 到 CNAME 链是不禁止但正如您已经体验到的,这不是一个非常强大的解决方案。
每增加一个 CNAME 都会增加解析器的递归深度,而该深度并不总是无限的。此外,您还面临着创建循环或触发循环检测算法的风险。
要了解用户名称服务器需要执行多少个查询以及执行哪些查询,请运行 DNS 跟踪:
dig +trace www.example.com
或者在 Windows 上
nslookup -debug www.example.com
答案2
HBrujin 是对的,但事实上,递归深度比任何东西都糟糕得多dig +trace
。递归深度经常被嘲笑和轻视,但这些人忘记了你不仅仅是在解析大约 5 条CNAME
记录。这是因为解析记录的目标CNAME
需要查找每个名称服务器在路径上,这通常比乍一看的要多得多。
目标是否CNAME
位于另一个域中?您需要递归到其名称服务器,这不仅需要NS
查找记录,还A(AAA)
需要查找不存在胶水的地方。名称服务器是否那些名称服务器位于不同的顶级域中?如果这些 TLD 不共享名称服务器,则可能不会包含粘合记录,并且您还必须通过其他 TLD 的名称服务器进行递归。等等。
链中添加的每条CNAME
记录都会使所需的查找次数成倍增加,具体取决于需要递归的名称服务器数量。这些CNAME
+ NS
+A(AAA)
记录查找链反过来会变得非常复杂,在空缓存中深度超过 150 层。这就是递归深度限制变得非常棘手的地方,导致在空缓存中查找域时出现暂时失败,而原因通常不是立即显现的。
简而言之,您可以这样做,但请谨慎行事,并认真对待此类反馈。您无法控制互联网上递归 DNS 服务器重新启动或清除的频率。
答案3
多级CNAME
重定向在实践中通常很方便。每一级重定向都提供了对潜在不同行政区域或完全不同组织的控制级别。虽然这几乎不是每个技术上必要的话可以解决组织问题。
正如其他人所指出的,这可能会造成困难,但可以解决:
监视器所有 DNS 服务器。可能其中一个出现故障。监控外部服务器以及您自己的服务器。您可能需要向 Akamai 或其他供应商报告问题。
TTL
s应该设置得足够高以允许缓存,但要足够低以便能够为您的应用程序快速转移流量