如果 CNAME 和 A 记录都存在,DNS 查找顺序是什么?

如果 CNAME 和 A 记录都存在,DNS 查找顺序是什么?

如果我们为同一个子域设置 A 记录和 CNAME 记录,DNS 查找如何完成?

例如,

A record: 
example.com => xx.xx.xx.xx
www.example.com => xx.xx.xx.xx

CNAME record:
www. => example.com

解决时www.example.com那么,DNS解析器是直接查找子域名www的A记录并获取ip,还是查找www的CNAME以获取重定向域名(example.com),然后最终查找example.com的A记录以获取ip?

答案1

什么是CNAME记录?

记录的作用CNAME是定义所有者姓名(添加记录的位置的名称)作为CNAME记录值中名称的别名(正典名称,按照记录类型的名称)。
请注意,这个别名的定义是在名称级别上的,完全不考虑记录类型。

所有者名称是别名的一个含义是它不能同时拥有其他记录,因为这与它只是另一个名称的别名直接冲突。

从解析器的角度来看,如果您查询A,响应的有效选项是A如果名称不是别名,则为键入的答案;CNAME如果名称是别名,则为键入的答案。对于同一个名称,获取两者不是一种选择(标准不允许这样做,而且无论如何都会有定义的行为)。

那么我的 DNS 服务提供商该如何做到这一点?

CNAME假设他们允许您并排添加和记录的说法A是真的,那么他们的服务中一定存在一些不明显的事情。

我会把它分成两个主要选项,如果不了解更多信息,就不可能知道哪个与您的情况相关:

  • 他们的系统并不直接使用用户输入,而是以某种方式将其转换为有效内容。他们可能会添加一条冲突记录而不添加另一条(这意味着 UI 有点糟糕),或者它可能具有某种形式的“CNAME 扁平化”功能,即他们实际上并不提供CNAME用户输入的记录,而是从他们的终端解析来自规范名称的相关记录,并将它们视为直接在别名处提供(这是非标准功能,但有些服务已实现这种类型的动态查找以“扁平化” CNAME)。
  • 他们的系统有问题,允许用户添加不一致的数据,而这在规范中是不允许的,并且可能会以某种方式导致奇怪的问题(要么是他们的服务出现问题,要么是他们的服务实际上提供了不一致的数据,这可能会破坏解析器端的东西)。如果用户在他们的服务中利用这种类型的问题,那将是自找麻烦。

相关内容