我的域名注册商和 DNS 提供商目前会忽略对未知域的 DNS 请求。我所说的忽略是指黑洞和从不响应,这会导致我的 DNS 客户端和解析器库重试、退出并最终超时。
dig @NS3.DNSOWL.COM somedomainthatdoesntexist.org
...
;; connection timed out; no servers could be reached
在调查其他流行的域名服务时,我发现这种行为非常独特,因为其他提供商返回的 RCODE 为 5(REFUSED):
dig @DNS1.NAME-SERVICES.COM somedomainthatdoesntexist.org
dig @NS-284.AWSDNS-35.COM somedomainthatdoesntexist.org
dig @NS21.DOMAINCONTROL.COM somedomainthatdoesntexist.org
全部返回类似下面的内容:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 64732
或者
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 31219
REFUSED
我认为,立即返回NXDOMAIN
是合适的,而不是仅仅将请求丢弃在服务器机房地板上。
当我向提供商抱怨他们的服务器没有响应时,他们要求我引用他们的服务器违反的 RFC。我知道他们要求我证明他们的服务器应该响应所有请求很奇怪,但就这样吧。
问题:
- 我的规定是,除非有重复的请求 ID 或某种 DOS 响应,否则服务器应始终响应请求。这样对吗?
- 我应该引用哪个 RFC 和具体章节来支持我的规定?
对我来说,不响应 DNS 查询是一件很糟糕的事情。大多数客户端会退出,然后将相同的查询重新传输到同一个 DNS 服务器或另一个服务器。这不仅会降低客户端的速度,而且还会导致自己的服务器或其他服务器根据权威名称服务器和 NS 条目再次执行相同的查询。
在RFC 1536和2308我看到很多关于负面缓存的信息,这些负面缓存是出于性能原因,并为了停止重复传输相同的查询。在4074我看到有关返回带有 RCODE 0 的空答案的信息,因此客户端知道没有 ipv6 信息,这应该导致客户端询问 A RR,这是空响应的另一个示例。
但是我找不到 RFC 说 DNS 服务器应该响应请求,可能是因为它是隐含的。
这个特定问题发生在我将我的域名(以及相关的 DNS 记录)迁移到他们的服务器时,或者在我向他们的服务注册新域名后的前 X 分钟内。权威名称服务器发生变化(这在当今非常快)和他们的服务器开始为我的 DNS 记录提供服务之间存在滞后。在此滞后时间内,DNS 客户端认为他们的服务器是权威的,但他们从不响应请求 - 即使是REFUSED
。我理解这种滞后是正常的,但我不同意不响应 DNS 请求的决定。据记录,我知道如何解决他们系统中的这些限制,但我仍在与他们合作改进他们的服务,以更符合 DNS 协议。
谢谢您的帮助。
编辑:
在发布此信息并与我的提供商跟进后的几个月内,他们更改了他们的服务器以返回NXDOMAIN
未知域名。
答案1
Shane 的建议是正确的。在启动切换之前未能将数据从一个权威服务器迁移到另一个权威服务器,这会导致中断。无论从那时起发生什么,这都是由操纵 NS 记录的人发起的中断。这解释了为什么没有更多人向您的提供商提出此投诉。
话虽如此,这仍然是一个有趣的问题,所以我要尝试回答它。
DNS 服务器的基本功能由文档介绍RFC 1034和RFC 1035,它们共同构成性病 13答案要么来自这两个 RFC,要么由后续更新的 RFC 予以澄清。
在我们继续之前,这里有一个巨大的陷阱,超出了 DNS 的范围,需要指出:这两个 RFC 都早于14号作战计划(1997 年),该文件澄清了“可以”、“必须”、“应该”等词语。
- 在此语言正式化之前制定的标准可能使用了清晰的语言,但在某些情况下却没有。这导致了软件实现的不同、大规模混乱等。
- 不幸的是,STD 13 在多个方面存在解释性问题。如果某个操作领域的语言不够明确,通常需要找到一个澄清的 RFC。
好了,让我们从RFC 1034§4.3.1不得不说:
- 服务器的最简单模式是非递归模式,因为它可以仅使用本地信息来回答查询:响应包含错误、答案或对“更接近”答案的其他服务器的引用。所有名称服务器都必须实现非递归查询。
...
如果未请求递归服务或递归服务不可用,则非递归响应将是以下之一:
权威名称错误,指示该名称不存在。
暂时的错误指示。
以下的一些组合:
回答问题的 RR,同时指示数据是来自区域还是被缓存。
对名称服务器的引用,该名称服务器的区域比发送答复的服务器更接近名称的祖先。
名称服务器认为对请求者有用的 RR。
这里的措辞相当坚定。没有“应该是”,但有“将会是”。这意味着最终结果必须是 1) 在上面列表中定义的,或 2) 由标准轨道上修订功能的后续文档允许的。我不知道存在任何此类忽略请求的措辞,我想说,开发人员有责任找到反驳研究的语言。
鉴于 DNS 在网络滥用场景中扮演着频繁的角色,我们不能说 DNS 服务器软件没有提供以下功能:选择性地丢弃流量,这在技术上违反了这一点。也就是说,这些要么不是默认行为,要么具有非常保守的默认值;这两种情况的例子是用户要求软件丢弃特定名称(rpz-drop.
),或者超过某些数值阈值(BIND max-clients-per-query
)。在我的经验中,软件几乎从未听说过彻底改变对所有违反标准的数据包采用默认行为,除非该选项可以提高对违反标准的旧产品的容忍度。但此处并非如此。
简而言之,本 RFC 可能会被运营商自行决定违反,但通常会以某种方式精确地进行。完全地根据需要忽略标准的各个部分,尤其是当专业共识(例如:BCP 16§3.3) 的错误在于,它不希望对整个 DNS 系统产生不必要的负载。考虑到这一点,不必要的重试丢弃所有没有权威数据的请求是不可取的。
更新:
关于理所当然地放弃提问的做法,@Alnitak 告诉我们,目前有一个业务连续性计划 (BCP) 草案详细介绍了这一主题。现在用这个作为引文有点为时过早,但它确实有助于强调社区共识与此处表达的内容一致。特别是:
除非名称服务器受到攻击,否则它应该响应所有根据委托而发给它的查询。此外,即使服务器未配置为服务区域,代码也不应该假设服务器没有委托。委托中断在 DNS 中很常见,并且收到服务器未配置的区域的查询并不一定表示服务器受到攻击。父区域运营商应该定期检查委托 NS 记录是否与委托区域的记录一致,并在不一致时进行更正 [RFC1034]。如果定期这样做,委托中断的情况会少得多。
当本文档的状态发生变化时,此答案将会更新。
答案2
当您将域名的权威 DNS 移至新提供商时,您应该始终(始终!)针对新提供商进行明确测试(并确保他们发送准确的配置记录),然后再更改域名注册(whois)信息以指向新的权威 DNS 服务器。
大致来说,您需要采取以下步骤:
- 在新的 DNS 提供商上设置一切。您应该创建并填充所有区域。
确保新的权威服务器正常工作。明确地查询它们:
dig @new-ns.example.com mydomain.com
从您的问题来看,他们似乎没有回应这些查询?但是,您说的是“未知域”,但目前不应该是这样的,它应该在他们的系统中完全配置(并使用您配置的记录进行响应)。
但如果你有已经在其系统中配置了域,此时它必须响应正确的记录。如果没有,则说明他们没有正确托管区域,您应该对他们大喊大叫;它是否响应未配置的域应该无关紧要。(如果我仍然无法理解您的意思,请告诉我)。
- 与您的域名注册商 (whois) 切换权威名称服务器,让旧的 DNS 提供商保持正常运行,直到不再有流量冲击它(至少持续 24 小时)。
如果新提供商在您进行切换之前绝对无法填充记录,那么他们如何响应实际上并不重要 - 将用户指向完全拒绝查询的权威机构将导致您的域停机,就像您根本没有得到任何回应一样。