我们都知道,当我请求某个主机名时,我会连接到我的 DNS 服务器,该服务器会检查其缓存中是否有相应的记录,如果没有,则它会在必要时重复查找该主机名的权威 DNS。
现在,原则上权威 DNS 可以解释大量记录。以这个 nodeJS 示例为例:
var dnsd = require('dnsd')
dnsd.createServer(function(req, res) {
res.end('1.2.3.4')
}).listen(53, '')
如果我将其用作我的域名的权威服务器,则对任何子域名的任何请求都将导致指向的 A 记录1.2.3.4
。这意味着,如果一群用户开始请求我的域名的随机子域名,他们的 DNS 服务器将继续向我的服务器询问新记录并缓存它们。
但我的常识告诉我,例如,Google 的 4.4.4.4 不会仅仅因为某个无聊的极客玩了两行节点就愿意存储千兆字节的记录。
那么会发生什么?如果某个 DNS 已经为某个域名缓存了大量记录,并且不想再存储更多记录,会发生什么?该域名会被屏蔽或禁止吗?旧记录会在 TTL 到期之前被删除吗?对此有任何官方政策吗?
答案1
正如 Calle 所说,这是特定于实现的。不过,我将更详细地介绍这一点。
域名服务器使用的最常见方法是基于记忆方法。内存上限是定义的(可以是默认值,也可以是用户配置的),在正常操作下,数据会被缓存,直到过期。当达到内存上限时,软件开始丢弃较少使用的记录,以便为较新的记录释放内存,通常从缓存中最旧的数据开始,也可能考虑请求最少的数据。
许多名称服务器实现不要实施任何类型的基于 IP 的查询黑名单。这主要是因为在 UDP 中伪造 IP 地址非常容易,这使得对需要数据的合法 IP 执行 DNS 拒绝服务变得非常容易。我可以假装是你的 IP,攻击 Google 的名称服务器,直到他们忽略你的 IP,然后你就无法访问 Google.com。这将是糟糕的,因为如果没有 Google Runbook,你公司的大多数人将失去假装他们知道如何完成工作的能力。一旦你考虑到攻击者在被阻止时可以简单地更改他们正在伪造的 IP 地址这一事实,IP 黑名单对大多数服务器运营商来说就变成了一个非常没有吸引力的选择。
由于针对递归 DNS 服务器的标签/主机名循环攻击越来越流行(这里我就不多说了),越来越多的软件包开始启用以下选项:速率限制根据多个标准阻止传入查询。这里的想法不是直接阻止 IP(因为 IP 可能被欺骗,而且很容易欺骗不同的 IP),而是降低其效率,因此在此类攻击中使用 DNS 服务器没有吸引力。
无论如何,简而言之,您通常不必担心有人从递归 DNS 服务器“禁止”您的域名甚至您的 IP。如果相关方不经常被利用进行攻击,因此不知道为什么通常是馊主意禁止域名或 IP,但并不常见。经验丰富的管理员只会在平台被用来攻击您的域名的名称服务器,在这种情况下,他们认为他们正在对你进行支持不向您发送查询。
答案2
缓存行为完全取决于实现。唯一的要求是缓存的信息必须正确(当然),并且不能早于 TTL 所规定的时间。因此,您示例中的服务器可以随意丢弃记录,速度和频率都取决于它自己。