我遇到了以下情况,并想知道如何正确地解决这个问题:
名称服务器被配置为不返回CNAME记录(不受我的控制),只有当请求一个A记录(相同名称)时,CNAME才会在附加部分中返回。
问题1:为什么有人会将DNS服务器配置成这样?对我来说没有意义?(问了他们几次,一直没有得到答复)
实际问题:当我们解决主机名时,比如testa.hosta.com,我们会查询一个A记录。在回应中,我们得到:
# query for A of `hosta.com`
testa.hosta.com CNAME testb.hostb.com TTL=5
testb.hostb.com A 1.2.3.4 TTL=60所以我们把两个记录都存储在我们的缓存中。因为我们没有得到我们正在寻找的A记录,我们现在尝试CNAME的记录。但是这个在缓存中,它指向testb.hostb.com。现在为testb.hostb.com尝试一个A记录,它也在缓存中,所以我们最终决定使用1.2.3.4。所以到目前为止一切都很好。
5秒后,CNAME的TTL过期。由于数据陈旧,我们需要刷新它。因此,我们查询testa.hosta.com CNAME,这提供了一个空的响应。现在我们的查找失败了..。
问题2:这个查找逻辑有问题吗?我找了很多rfc想弄清楚,但什么也找不到。正确的查找顺序是什么?
任何帮助都是非常感谢的。
发布于 2018-04-04 00:00:09
我不知道为什么,这听起来像是一个失败的实现,返回不一致的结果。
是的,您描述的逻辑是错误的;您没有理由更改查询类型。
听起来,实际上您要寻找的是递归解析器服务器行为的基本原理。
###5.3.3。顶层算法有四个步骤:
发布于 2018-04-02 18:01:11
根据这些资料:
实际问题:当我们解决主机名时,比如hosta.com,我们会查询一个A记录。在回应中,我们得到:
# query for A of `hosta.com`
hosta.com CNAME hostb.com TTL=5
hostb.com A 1.2.3.4 TTL=60这完全是意料之中的。如果您查询一个A记录,但只获得一个CNAME (如您发布的这个空白页所示),它指示该域没有A记录,而是另一个A记录的CNAME。
问题1:为什么有人会将DNS服务器配置成这样?对我来说没有意义?(问了他们几次,一直没有得到答复)
正如@michaelhampton所指出的,你为什么首先要查询一个CNAME?如果试图执行主机查找以将主机名解析为IP地址,则应查询A记录。如果域名所有者选择使用CNAME记录作为这个主机名,那么您应该在响应中接收CNAME和A记录。
5秒后,CNAME的TTL过期。由于数据陈旧,我们需要刷新它。因此,我们查询testa.hosta.com CNAME,这提供了一个空的响应。现在我们的查找失败了..。
这很好,只是您不应该查询CNAME,而应该将其作为A记录重新查询。缓存的值一旦过期,您就不能再假设您知道有关它的任何事情;您必须假设它是A记录,并允许DNS系统执行其工作,然后让它告诉您否则的情况。
除非您试图调试或诊断某些东西,否则应该始终查询A记录。
https://serverfault.com/questions/905594
复制相似问题