如果我跑
dig @ns5.laposte.net conversation.ees.labanquepostale.fr A
我得到一个 SERVFAIL,但如果我运行
dig @ns5.laposte.net conversation.ees.labanquepostale.fr CNAME
我得到了我的 CNAME:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48072
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;conversation.ees.labanquepostale.fr. IN CNAME
;; ANSWER SECTION:
conversation.ees.labanquepostale.fr. 300 IN CNAME prod-lbpee.web-application-front-customer.as8677.net.
我想知道这种行为有多有效(至少要知道我们是否可以期望这种行为会更频繁地发生),并且从RFC 1034我可以看到:
If a CNAME RR is present at a node, no other data should be present
When a name server fails to find a desired RR in the resource set associated with the domain name, it checks to see if the resource set consists of a CNAME record with a matching class. If so, the name server includes the CNAME record in the response
所以我认为这不是标准行为。我也没有在“常见的 DNS 操作和配置错误”中看到任何建议。有没有人对这类问题有建议或经验?如果名称服务器回复 REFUSED 或 SERVFAIL,我想这里只是为了寻找 CNAME?
默认情况下
dig
,在查询中设置 RD(需要递归)位,这意味着 dig 通常会发送递归查询。禁用该功能后,您将得到您期望的响应:
您没有得到递归答案的原因(在这种情况下您想要的,其中 CNAME 指向指向 A 的 CNAME)打印在您的答案中:
;; WARNING: recursion requested but not available
这意味着,您要询问的名称服务器(ns5.laposte.net)是权威名称服务器,而不是递归名称服务器(也称为解析器)。它只会查看其数据库并查看是否存在您要查找的类型的记录,在您的情况下,它会查找不存在的 conversation.ees.labanquepostale.fr 的 A 记录。当明确将记录类型设置为 CNAME 时,您会得到您期望的答案,但仅此而已(即不遵循 CNAME)。如果您检查递归名称服务器,dig 将获得递归结果,直到找到 A 记录: