域的权威 DNS 服务器是否必须允许递归才能允许指向其他域的 CNAME 记录?

域的权威 DNS 服务器是否必须允许递归才能允许指向其他域的 CNAME 记录?

因此,我在 Dreamhost 注册了一个域名,该域名显然不执行递归查找,并在 Heroku 上注册了一个应用程序。Heroku 应用程序始终配置为使用 CNAME 记录proxy.heroku.com

所以:

Authoritative DNS:  ns1.dreamhost.com (for foo.com)

CNAME record:       app.foo.com -> proxy.heroku.com

Resolves to:        Set of A records for EC2 IPs

有人告诉我,他们尝试从 Windows Server 2003 DNS 服务器后面连接到该应用程序,它以不同的方式处理 SERVFAIL,无法解析 DNS。我试图了解这是否真的是我这边的配置问题,还是他们的配置问题,特别是根据标题:

域的权威 DNS 服务器必须是递归的才能允许 CNAME 记录指向其他域吗?

答案1

不,您不需要对权威 DNS 服务器启用递归。根据您询问的对象,甚至认为(如果可能)您的权威服务器不启用递归是一种好的做法,因为它是抵御某些 DoS 攻击的一道防线。(思科的文档是这里例如)

下面是来自我的域的一个示例(服务器正在运行 Bind 9 并且是非递归的)。

; <<>> DiG 9.5.1-P3 <<>> mail.<snip> @<my authoritative master>
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1216
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;mail.<snip>.       IN  A

;; ANSWER SECTION:
mail.<snip>.        86400   IN  CNAME   ghs.google.com.
ghs.google.com.     158151  IN  CNAME   ghs.l.google.com.
ghs.l.google.com.   33    IN  A       74.125.47.121

;; AUTHORITY SECTION:
google.com.     153556  IN  NS  ns4.google.com.
google.com.     153556  IN  NS  ns2.google.com.
google.com.     153556  IN  NS  ns3.google.com.
google.com.     153556  IN  NS  ns1.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.     169823  IN  A   216.239.32.10
ns2.google.com.     169823  IN  A   216.239.34.10
ns3.google.com.     169823  IN  A   216.239.36.10
ns4.google.com.     169823  IN  A   216.239.38.10

这听起来更像是 Windows 2003 DNS 的 DNS 配置错误。

答案2

权威服务器应该不是配置为提供递归服务。甚至无法解决 Microsoft 的一个潜在错误。

目前我无法引用章节和诗句(如果我找到,我会更新)。然而,这是 DNS 服务器操作公认的“最佳通用做法”。

如果查找链中的某个解析器返回,SERVFAIL则这仅表示某处配置错误,或者您问了错误的问题(或使用错误标志提出了正确的问题)。

就您而言,如果您要求递归答案(默认情况下这样做),dreamhost.com服务器就会返回。它们完全有权这样做,它们是权威服务器,而不是递归服务器。SERVFAILnslookup

在我的系统上,如果我使用dig并特别禁用递归,我会得到:

% dig +norecurse @ns1.dreamhost.com mail.scotchi.net.

; <<>> DiG 9.6.0-APPLE-P2 <<>> +norec @ns1.dreamhost.com mail.scotchi.net.
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54426
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 13

;; QUESTION SECTION:
;mail.scotchi.net.  IN A

;; ANSWER SECTION:
mail.scotchi.net. 14400 IN CNAME ghs.google.com.

答案3

Dreamhost 使用 powerdns(呃),同样糟糕...但 Windows 递归解析器确实很烂。

问题是,为什么您客户端站点上的 Windows DNS 框会出现 SERVFAIL?它们不应该出现。

并且,上述海报是正确的 - 如果您对某个域具有权威性,您可以将其 cname、A、失败、您命名到任何域/ip(您不必知道与其他域的粘合)。

也许就是这样 —— 要求您的 A 记录(并获得 cname)的 DNS 解析器认为它也知道 heroku.com 的粘合剂。

您可以分析原始查询的列出的名称服务器以查看发生了什么,但在“最坏情况”下,您只需提供“A”记录即可。这只是一个 PITA。

如果你想发布一个现实世界的失败域,那很酷;你也可以 PM 或 AIM nerdNG :p(我喜欢用 dns 查找根本原因问题。Go fig)

答案4

我一直在寻找与我自己的问题“类似”的问题这里并且似乎有相当多的相似点(例如Windows2003 DNS服务器和SERVFAIL响应)

如果有人有上述“潜在的 Microsoft 错误”的链接,他们介意发布详细信息吗?

非常感激。

相关内容