域名服务器必须通过TCP回答查询吗?


23

我正在设置监视多个大型Web主机的DNS服务器的过程。我的目标是通过跟踪其对ping的响应来比较其dns服务器的响应时间。

在此过程中,我发现Bluehost名称服务器不响应ping。我试图通过在bluehost.com上运行Pingdom DNS Check来获取更多信息,它产生了以下错误:

名称服务器ns1.bluehost.com(74.220.195.31)无法通过TCP回答查询。

名称服务器无法回答通过TCP发送的查询。这可能是由于名称服务器设置不正确或防火墙中过滤配置不正确所致。一个非常普遍的误解是,除非DNS提供区域传输,否则DNS不需要TCP-也许名称服务器管理员并不知道TCP通常是必需的。

我想知道以下内容:

  • 以上说法在多大程度上是正确的?
  • 域名服务器不通过TCP回答查询的含义是什么?

Answers:


47

Pingdom的诊断文本完全正确。TCP是不是只为区域传送。

现在,根据RFC 5966 “通过TCP进行DNS传输-实施要求”,DNS服务器实现 “必需的”(在任何RFC需要任何东西的情况下)以支持TCP 。

请注意,这是在服务器上的软件实现的要求,它并没有严格地适用于任何服务器的操作-操作实践不是盖的。

也就是说,如果您的特定DNS服务器未配置为支持TCP,或者被阻止,则长期影响将是无法正确支持DNSSEC。同样,任何其他导致响应超过512字节的DNS数据也可能被阻止。

ob免责声明:我写了RFC。

编辑 RFC 5966现在已由RFC 7766取代


RE:操作实践,讨厌DNSSEC的人可以简单地禁用TCP并将其丢弃在防火墙上,以防万一。毫不奇怪,会有后果。两个端点对EDNS0的支持都无法迫使它们之间的设备不以某种方式发生干扰。(碎片,古老防火墙的错误标记等)。如果您在身份验证服务器上有大量DNS记录(膨胀的TXT),那么如果您不希望排除一部分受众,则需要TCP。同样,在递归服务器上禁用它可以使您免受邮件群集可能需要处理垃圾邮件的DNS答复的影响。
安德鲁B

3

它应该支持TCP和UDP-TCP用于大于512字节的响应(这将包括区域传输)(根据我已经阅读的内容。无论如何,我通常为运行的NS启用TCP和UDP ...)


-2

很高兴知道RFC在这个问题上怎么说,而且我们已经有了一个很好的权威答案,但是出于实际的目的,我发现DJBDNS的作者Daniel J. Bernstein教授的建议非常有趣。

http://cr.yp.to/djbdns/tcp.html#why(2003-01-16

什么时候发送TCP查询?

如果您处于以下情况之一,则需要配置DNS服务器以回答TCP查询:

  • 您要发布大于512字节的记录集。(这几乎总是一个错误。)
  • 您要允许传出区域传输,例如到第三方服务器的传输。
  • 在设置TCP服务之前,父服务器将拒绝将名称委托给您。

如果您不在任何一种情况下,则无需提供TCP服务,也不应进行设置。TCP上的DNS比UDP上的DNS慢得多,并且在本质上更容易受到拒绝服务攻击。(这也适用于BIND。)

请注意,他省略了对DNSSEC的明确提及;原因是,根据DJB的说法,DNSSEC属于“总是错误”类别。有关更多详细信息,请参见https://cr.yp.to/djbdns/forgery.html。DJB有一个替代标准,称为DNSCurve — http://dnscurve.org/,该标准已被某些提供商(如OpenDNS)独立采用。感兴趣的:https : //security.stackexchange.com/questions/45770/if-dnssec-is-so-questionable-why-is-it-ahead-of-dnscurve-in-adoption

请注意,如果以上有关DJBDNS设置的文档表明其功能,则表明它仅支持TCP的AXFR。由于许多提供商仍在使用DJBDNS,因此如果不付出额外的努力,他们不太可能支持TCP上的DNS。

PS请注意,事实上,DJB确实在实践他的讲道。他自己的服务器(1)确实运行DNSCurve(2),但未正确应答TCP。只有+notcp会成功(默认):

% dig +trace @ordns.he.net +notcp cr.yp.to | tail
yp.to.                  86400   IN      NS      uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to.
yp.to.                  86400   IN      NS      uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to.
;; Received 300 bytes from 216.74.32.100#53(tonic.to) in 151 ms

cr.yp.to.               600     IN      A       131.155.70.11
cr.yp.to.               600     IN      A       131.155.70.13
yp.to.                  3600    IN      NS      uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to.
yp.to.                  3600    IN      NS      uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.yp.to.
;; Received 244 bytes from 131.155.70.13#53(uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to) in 14 ms

,而a +tcp则会失败(显然会显示不同的错误消息,具体取决于选择了哪个服务器):

% dig +trace @ordns.he.net +tcp cr.yp.to | tail
yp.to.                  86400   IN      NS      uz5hjgptn63q5qlch6xlrw63tf6vhvvu6mjwn0s31buw1lhmlk14kd.ns.yp.to.
;; Received 300 bytes from 216.74.32.100#53(tonic.to) in 150 ms

;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.155.70.13#53: end of file
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.155.70.13#53: end of file
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.193.32.147#53: end of file
;; connection timed out; no servers could be reached

2
您的DJB fanboi表演变得越来越陈旧。的DNS社区选择了DNSSEC,并且许多关于DNSCurve文献完全合并了的正交的要求的数据的真实性加密的数据的。恕我直言,您的答案大部分对这个问题没有任何帮助。
Alnitak

@Alnitak,您坚持认为DNS是TCP所必需的,但这并不是DNS的实际要求。显然,许多人在没有TCP的情况下运行,并且在自己的网站可用性方面没有遇到任何问题。但是您会继续宣传错误信息和FUD。
cnst

2
那是真的2003年的文件吗?您怎么能直言不讳地声称它在2017年仍然有意义?
迈克尔汉普顿

1
@MichaelHampton,是的,全心全意。有些事情不会改变,DJB可能是个混蛋,但他是个很聪明的人。他提出的所有论点本质上都是哲学上的,并且不会像技术那样改变。同时,(1)为何如此难以置信;(2)为什么要以直白的面孔链接到更老的RFC,而又不用伪君子呢?(3),除了这些之外,您还有什么实际的反对意见?一个约会”?人们一直说他的方式存在互操作性问题,但他在2003年提出的论点(例如退回邮件)却遭到了质疑!
cnst

-5

TCP仅是必需的,并且通常仅在需要长响应时才使用。可能会有负面影响。区域传输是通过TCP完成的,因为它们很大,并且需要可靠。不允许来自不受信任的服务器的TCP是确保仅给出较小答案的一种方法。

随着签名DNS答案的引入,要求放松对UPD答案的512字节限制。EDNS0提供了更长的UDP响应机制。无法通过TCP允许DNS很有可能破坏安全的DNS实施。

完全有可能运行仅向Internet开放UDP端口53的DNS服务器。需要对DNS对等方进行TCP访问,但这只是一小部分主机。

有一个更新的RFC596,现在需要TCP才能实现完整的DNS。这是针对实施者的。这些文档没有专门针对运算符,但警告说不允许TCP会导致多种故障情况。它详细说明了如果不支持基于TCP的DNS,则会导致多种故障。

已经讨论了使用TCP来防止DNS放大攻击。TCP有其自身的拒绝服务风险,但是分发更加困难。


DNSSEC在1999年没有放松限制,EDNS0放松了限制(请参阅RFC 2671)。
Alnitak

不,正如Alnitak所解释的,在大多数情况下都需要TCP(除非您可以绝对确定您永远不会收到大于512字节的回复,这通常是您事先不知道的)
bortzmeyer 2010年

我已经通过仅允许UDP的防火墙成功运行了DNS。除病理配置外,地址查找将少于512个字符。我已经看到DNS路径限制为256个字符的参考。我的邮件服务器的数据库中的证据表明,服务器DNS路径很少超过100个字符,并且具有PTR记录返回的多个名称的站点很少会超过256个字符。所有这些响应将在UDP上运行。是否有人在没有DNSSEC或区域传输的情况下有接近512个字符的合理大小写。
BillThor

关于DNSSEC,我没有验证RFC的扩展大小,但是我看到的关于在UDP上使用扩展数据包大小的唯一参考文献是ben DSNSEC。
BillThor

大型内容提供商之一在几年前就为他们的一个webfarm添加了如此多的A记录,从而超出了512字节,从而摆脱了困扰。这引起了真正的互操作问题。
Alnitak
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.