DNS 超时应如何工作?

DNS 超时应如何工作?

我最近遇到了一个问题,一个远程服务请求我的服务器(使用托管 DNS 提供商)的 IP 地址,响应如下:

DNS problem: SERVFAIL looking up A for mysql.xavamedia.nl

(更新:这里提到的远程服务是 Let's Encrypt;我提交了一个错误针对他们的问题追踪器,这让我走上了这条道路。)

在我的本地网络上进行测试时,我发现有时会从托管 DNS 服务器收到空的 DNS 响应。显然,这种情况是间歇性的,因为只有当 DNS 记录不在缓存中时才会发生这种情况,而且只有当 DNS 服务器非常繁忙时才会出现问题。

以下是 Wireshark 对空响应消息的描述:

Wireshark 空响应截图

当然,由于大多数 DNS 查询和响应都是通过 UDP 发送的,本地解析器只会等待一段时间才能收到响应,然后放弃。我现在想知道的是,DNS 响应时间是否有指导原则?我的 DNS 托管商耸耸肩,说我的本地解析器发送空响应太快了。我以前从未遇到过这个问题,但我对这种故障模式感到惊讶——一个没有错误代码的空 DNS 响应。

是否有人知道一些关于它应该如何工作的指导,以及何时/如何证明我的 DNS 托管做错了什么?

答案1

你看到的空响应是一种合成状态,称为NODATA.NODATANXDOMAIN都表示该名称不存在,但NXDOMAIN适用于所有名称下面指示的记录也是如此。NODATA建议该名称与未请求类型的记录相关联,或者存在其他低于您请求的记录。(即example.test.xavamedia.nl.

您从NODATA和中得出的结论NXDOMAIN实际上与此上下文相同:请求的名称和类型的记录不存在。已到达请求域的权威名称服务器,它回复说,该名称和类型的记录不存在。这不是通信错误。权威服务器表示没有该数据。您正在与之通信的服务器很可能已经处理了此请求,并且在过去四个小时内对该记录的缺失进行了负缓存。(14400 秒是 SOA 记录定义的负缓存间隔xavamedia.nl.

既不NXDOMAINNODATA 通过他们自己在这种情况下会导致超时,但您的解析器库可能会从这里继续附加 DNS 搜索后缀,这反过来可能会触发搜索域的权威 DNS 服务器超时。

需要注意的是,以上这些都不能解释为什么您SERVFAIL在查找 时会遇到响应mysql.xavamedia.nl.。这表明递归服务器从权威服务器获取答案时存在问题。要么权威服务器回复了SERVFAIL,要么递归服务器无法访问任何权威服务器,要么递归服务器确定返回的数据无效。以上这些都无法通过您提供的信息来证明。

答案2

除了 RFC 1123 的“6.1.3.3 有效资源使用”部分中定义的指导原则外,我不知道任何具体的指导原则http://tools.ietf.org/rfcmarkup?rfc=1123#page-77

指定了“不小于 5 秒”的超时值。RFC 还规定应缓存临时故障。这是为了防止客户端违反 RFC 第 2.2 节时出现过多的 DNS 请求。该节规定,如果发生软故障,客户端应在重试之间等待“合理”的时间。

Stackoverflow 上也有一个关于此主题的线程,但除了一些现实世界的观察外,它没有包含更多信息。https://stackoverflow.com/questions/3036054/ideal-timeout-period-for-dns-lookup

关于这个话题,我只能说这么多。如果其他人有更多补充,我也很感兴趣。

相关内容