递归解析器是否会缓存来自 Glue 记录的权威名称服务器的 IP 地址?
顶级域名的名称服务器包括域名的委托和 Glue。
现在,递归解析器是否会缓存此“A”/“AAAA”记录(胶水记录)?我知道缓存仅适用于响应来自“权威”名称服务器的情况,但此处 TLD 名称服务器进一步委托,不能被视为权威。
或者
权威名称服务器是否还提供自己的 IP 地址作为 A 记录(以及域的 A 记录),而这就是递归解析器缓存的内容?
答案1
通常情况下,胶水记录并不是权威的答案,如果你看一下标志(存在或不存在),你可能会注意到这一点。aa
权威解答;RFC 1035, 4.1.1)例如以下查询:
对父母的权威:
dig com NS @f.gtld-servers.net ;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27
删除控制。两者都给出了粘合记录附加部分。
dig google.com NS @f.gtld-servers.net ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 9 dig ns1.google.com A @f.gtld-servers.net ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 9
来自权威服务器的权威答案:
dig google.com NS @ns1.google.com ;; flags: qr aa rd; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 9 dig ns1.google.com A @ns1.google.com ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
基本算法来自RFC 1034,5.3.3缓存大部分响应数据;只有失败和其他怪异内容(d)被忽略(重点是我的):
a. 如果响应回答问题或包含名称错误,缓存数据并将其返回给客户。
b. 如果响应包含对其他服务器的更好的委托,缓存委托信息,然后转到步骤2。
c. 如果响应显示 CNAME,但这不是答案本身,缓存 CNAME,将 SNAME 更改为 CNAME RR 中的规范名称并转到步骤 1。
d. 如果响应显示服务器故障或其他异常内容,则从 SLIST 中删除该服务器并返回步骤 3。
RFC 还提到,一些实现可以选择强制解析器忽略缓存数据并咨询权威服务器。真正发生什么取决于实施。根据DNS 如何毁掉互联网来自Kudelski Security Research:
除了可能导致非故意错误响应的错误之外,缓存中毒(参见Dan Kaminsky 的 2008 年 DNS 漏洞和DNS 缓存中毒指南) 必须加以考虑。许多 DNS 缓存实现将粘合记录缓存为正常记录,因此 DNS 服务器可能会提供恶意响应,从而导致缓存中出现错误条目。
例如:
evil.com. IN NS ns.company.com. ns.company.com. IN A 6.6.6.6
虽然合法服务器说
company.com. IN NS ns.company.com. ns.company.com. IN A 1.2.3.4
因此,错误的 IP 地址将在记录的整个生命周期内保留在缓存中。为了避免此问题,大多数缓存解析器实现都不信任并忽略管辖范围外 NS 记录的可选粘合记录,因此忽略了
ns.company.com. IN A 6.6.6.6
上述示例中的记录。DNS 管理员请注意:最好只保留管辖范围内的记录。
答案是否权威本身并不是决定记录是否应该被缓存的指标:
- 上层名称服务器是同一权威名称服务器结构的一部分。因此,由于它们确实委托了对其子域的控制权,即最终可以控制谁可以权威地回答,因此它们应该是值得信赖的。通常,粘合记录应与区域本身的记录相匹配,其他一切都将是 IANA 的配置错误权威名称服务器的技术要求:
胶水与权威数据的一致性
对于将 IP 地址列为粘合 IP 地址的名称服务器,IP 地址必须与该主机的权威 A 和 AAAA 记录相匹配。
委派和区域之间的一致性
权威名称服务器提供的 NS 记录集必须与父区域中为委派建议的记录集相匹配。
并非所有递归服务器都从根名称服务器开始解析名称,但也有更复杂的递归基础结构。解析器可以具有货运代理,它们会询问其他递归名称服务器,而不是权威名称服务器。这些响应永远不是权威的,但始终会被缓存。
在 DNS 缓存中毒场景中,肇事者不是任何权威名称服务器,而是伪装成来自可信来源的答案,无论是权威名称服务器还是转发器。由于 DNS 使用 UDP,因此欺骗响应更容易。有一些解决方案可以解决此问题: