DNS深入学习-3 存根解析器和请求和权威域服务器

本文深入探讨了DNS解析过程,包括存根解析器的工作原理,强调了安全性措施,如随机化源端口和ID字段的重要性。权威域服务器则忽略递归所需位并处理查询,防止DNS循环。区域传输和通知机制确保了数据的同步和更新。文章还提到了通配符处理的复杂性,并讨论了如何避免潜在的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DNS-3 存根解析器和请求和权威域服务器

#网络/DNS#

存根解析器(stub servers)

作为DNS客户端,生活相对轻松。您可以使用像gethostbyname()或getaddrinfo()这样的操作系统函数,这些函数将为您处理所有事情,包括应用本地覆盖和策略。

**“存根解析器”**是一个非常简单的DNS客户端,它发送DNS查询并接收使用响应中的应答。并且只做这两件事。它特别不应该处理任何NS记录,甚至不应该跟踪cname。

有几件事确实很重要。出于安全目的,存根解析器必须小心地完全随机化源端口和ID字段。它还必须防止在同一时间发送多个等价的查询,因为这将允许一个“生日攻击”,可能在有害的答案中欺骗。

实际测试TC=1响应路径也很重要,这可能在发送导致大量应答的查询时触发。

如果解析器同时发送两个不同的问题,比如一个名字的A和AAAA,它应该准备好接收无序的响应——即使是通过TCP。

权威域服务器

在这个文件中,我们深入研究了区域传输和通知。

传入的查询

权威服务器忽略DNS头中的递归所需(RD)位的值。对于它生成的任何响应,递归可用位都设置为零。

请特别注意不要向已经是DNS响应的内容发送响应。这将导致紧循环和拒绝服务攻击。换句话说,传入数据包上的QR必须为0。

代理/委托(delegation)

查找一个请求的应答可能意味着查询多个区域:例如,根区域、org区域、ietf.org区域。(这里指的是之前文中举的查询www.ietf.org的例子)

遍历这样的区域切割的过程称为委托。委托由区域顶点(即区域名称)之外的NS记录的存在表示。

发送应答

从根本上说,以下答案是可能的(这忽略了CNAME和通配符处理,下面将详细介绍)。

  1. 没有适用的区域加载,则发送拒绝应答
  2. 在最佳区域(best zone), 当qname和qtype完全匹配时,发送RRSET,设置NO ERROR
  3. 在best zone中,请求的名称存在,但没有匹配的qtype和NS类型(发送NO DATA)
  4. 在best zone,名称可能存在,但存在一个节点或父节点有NS记录。发送代理/委托
算法

查询名称为www.ietf.org时,请查看存储是否为www.ietf.org分区。如果没有找到,请尝试ietf.org,如果没有找到,请尝试org,否则请尝试根区域。如果没有发现区域,则发送拒绝。

在第一个匹配的区域(比如,org)中,搜索www.ietf。如果没有找到,搜索ietf等等

通配符

4592试图澄清与通配符有关的每个可能的误解(包括与DNSSEC的交互),但由于其压倒性的细节可能本身就是一个令人困惑的文档。建议参考4592来解决困难的通配符问题,但如果可能的话,首先要远离困难的通配符情况。

重复

授权服务器可以通过TCP提供区域的全部内容,这称为区域传输(zone transfer)或AXFR。“奴隶server"可以请求这样的AXFR,然后也服务的内容的区域。

主服务器通常限制AXFR访问特定的IP地址。从机不一定要被主机知道为从机——只要它有AXFR访问,它就可以检索区域。

区域传输通过TCP进行,每个区域传输由一个或多个DNS消息组成。就像TCP没有数据报功能来表示消息的开始和结束一样,DNS也没有通过TCP。因此,每个消息都以16位网络端长度字段作为前缀。在接收到区域的SOA记录的第二份副本时,依次终止包含区域传输的消息流。

请注意,RFC 1982详尽地描述了应该如何比较序列号。SOA序列号用于指示一个区域是否比另一个区域更新。RFC 1982描述了如何处理32位换位。

通知

如上面的SOA记录描述中所述,从服务器定期检查主服务器,以确定是否有需要检索的更新。

由于这种定期检查可能是遥远的未来,主服务器可以在加载新区域数据时发送通知。

简而言之,通知是一个常规的DNS消息,作为查询发送出去,但随后使用OPCODE=5。通知会一直重复,直到被从服务器确认。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值