DNS:因特网的目录服务——DNS 记录和报文

        共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射。每个DNS回答报文包含了一条或多条资源记录。本篇我们概要地介绍DNS资源记录和报文。

资源记录是一个包含了下列字段的4元组:

(Name,Value, Type, TTL)

        TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。在下面给出的记录例子中,我们忽略掉TTL字段。Name和Value的值取决于Type:

  1. 如果Type=A,则Name是主机名,Value是该主机名对应的地址。因此,一条类型为A的资源记录提供了标准的主机名到P地址的映射。例如(relay1bar.foo.com、145.37.93.126,A)就是一条类型A记录。
  2. 如果Type=NS,则Name是个域(如foo.com),而 Value 是个知道如何获得该域中主机IP地址的权威DNS服务器的主机名。这个记录用于沿着查询链来路由DNS查询。例如(foo.com.dns.foo.com, NS)就是一条类型为NS的记录。
  3. 如果Type=CNAME,则Value是别名为Name的主机对应的规范主机名。该记录能够向查询的主机提供一个主机名对应的规范主机名,例如(foo.com,relay1.bar.foo.com,CNAME)就是一条CNAME类型的记录。
  4. 如果Type=MX,则Value是个别名为Name的件服务器的规范主机名。举例来说,(foo.com,mail.bar.foo.com,MX)就是一条MX记录。MX 记录允许邮件服务器主机名具有简单的别名。值得注意的是,通过使用MX记录,一个公司的邮件服务器和其他服务器(如它的Web服务器)可以使用相同的别名。为了获得邮件服务器的规范主机名,DNS客户应当请求一条MX记录;而为了获得其他服务器的规范主机名,DNS客户应当请求CNAME记录。

        如果一台DNS服务器是用于某特定主机名的权威DNS服务器,那么该DNS服务器会有一条包含该主机名的类型A记录(即使该DNS服务器不是其权威DNS服务器,它也可能在缓存中包含有一条类型A记录)。如果服务器不是用于某主机名的权威服务器,那么该服务器将包含一条类型NS记录,该记录对应于包含主机名的域:它还将包括一条类型A记录,该记录提供了在NS记录的Vaue字段中的DNS服务器的IP地址。举例来说,假设一台edu TLD服务器不是主机 gaiaes.umass.edu的权威DNS服务器,则该服务器将包含一条包括主机 cs.umass.edu的域记录,如(umass.edu,dns.umass.edu,NS);该 eduTLD服务器还将包含一条类型A记录,如(dns.umass.edu,128.119.40.111,A),该记录将名字dns.umass.edu映射为一个IP地址。

1.DNS 报文

        在前面,我们提到了DNS查询和回答报文。DNS只有这两种报文,并且,查询和回答报文有着相同的格式,如下图所示。DNS报文中各字段的语义如下:

  1. 前12个字节是首部区域,其中有几个字段。第一个字段(标识符)是一个16比特的数,用于标识该查询。这个标识符会被复制到对查询的回答报文中,以便让客户用它来匹配发送的请求和接收到的回答。标志字段中含有若干标志。1比特的“查询/回答”标志位指出报文是查询报文(0)还是回报文(1)。当某DNS服务器是所请求名字的权威DNS服务器时,1比特的“权威的”标志位被置在回答报文中。如果客户(主机或者DNS服务器)在该DNS服务器没有某记录时希望它执行递归查询,将设置1比特的“希望递归”标志位。如果该DNS服务器支持递归查询,在它的回答报文中会对1比特的“递归可用”标志位置位。在该首部中,还有4个有关数量的字段,这些字段指出了在首部后的4类数据区域出现的数量。
  2. 问题区域包含着正在进行的查询信息。该区域包括:①名字字段,指出正在被查询的主机名字;②类型字段,它指出有关该名字的正被询问的问题类型,例如主机地址是与一个名字相关联(类型A)还是与某个名字的邮件服务器相关联(类型 MX)。
  3. 在来自DNS服务器的回答中,回答区域包含了对最初请求的名字的资源记录。前面讲过每个资源记录中有Type(如A、NS、CNAME和MX)字段、Value字段和TTL字段。在回答报文的回答区域中可以包含多条RR[资源记录],因此一个主机名能够有多个IP地址(例如,冗余Web服务器)。
  4. 权威区域包含了其他权威服务器的记录
  5. 附加区域包含了其他有帮助的记录。例如,对于一个MX请求的回报文的回答区域包含了一条资源记录,该记录提供了邮件服务器的规范主机名。该附加区域包含一个类型A记录,该记录提供了用于该邮件服务器的规范主机名的IP地址。

        使用nslookup程序(nslookup program)能够从正在工作的主机直接向某些DNS服务器发送一个DNS查询报文,对于多数Windows 和UNIX平台,nslookup程序都是可用的。例如,从一台Windows主机打开命令提示符界面,直接键入“nslookup”即可调用该nslookup程序。在调用nslookup后,你能够向任何 DNS 服务器(根、TLD或权威)发送DNS查询。在接收到来自DNS服务器的回答后,nslookup将显示包括在该回答中的记录(以人可读的格式)。从你自己的主机运行nslookup还有一种方法,即访问允许你远程应用nslookup的许多Web站点之一(在一个搜索引擎中键入“nslookup”就能够得到这些站点中的一个)。

2. 在DNS 数据库中插入记录

        上面的讨论只是关注如何从DNS数据库中取数据。你可能想知道这些数据最初是怎么进入数据库中的。我们在一个特定的例子中看看这是如何完成的。假定你刚刚创建一个称为网络乌托邦(Network Utopia)的新创业公司。你必定要做的第一件事是在注册登记机构注册域名networkutopia.com。注册登记机构(registrar)是一个商业实体它验证该域名的唯一性,将该域名输入DNS数据库(如下面所讨论的那样),对提供的服务收取少量费用。1999年前,唯一的注册登记机构是Network Solution,它独家经营对于com、net和org域名的注册。但是现在有许多注册登记机构竞争客户,因特网名字和地址分配机构(Internet Corporation for Assigned Names and Numbers,ICANN)向各种注册登记机构授权。在http://www.internic.net上可以找到授权的注册登记机构的列表。

        当你向某些注册登记机构注册域名networkutopia.com时,需要向该机构提供你的基本和辅助权威DNS服务器的名字和IP地址。假定该名字和IP地址是dns1.networkutopia.com和 dns2.networkutopia.com及212.212.212.1和212,212.212.2。对这两个权威 DNS 服务器的每一个,该注册登记机构确保将一个类型NS和一个类型A的记录输入TLDcom服务器。特别是对于用于networkutopia.com的基本权威服务器,该注册登记机构将下列两条资源记录插入该DNS系统中:

(networkutopia.com,dns1.networkutopia.com,NS)

(dns1.networkutopia.com,212.212 2121,A)

        你还必须确保用于Web服务器www.networkutopia.com的类型A资源记录和用于邮件服务器mail.networkutopia.com的类型MX资源记录被输入你的权威DNS服务器中。(直到最近,每个DNS服务器中的内容都是静态配置的,例如来自系统管理员创建的配置文件。最近,在DNS协议中添加了一个更新(UPDATE)选项,允许通过DNS报文对数据库中的内容进行动态添加或者删除。)

        一旦完成所有这些步骤,人们将能够访问你的Web站点,并向你公司的雇员发送电子邮件。我们通过验证该说法的正确性来总结DNS的讨论。这种验证也有助于充实我们已经学到的DNS知识。假定在澳大利亚的Alice要观看www.networkutopia.com的Web页面。如前面所讨论,她的主机将首先向其本地DNS服务器发送请求。该本地服务器接着则联系一个TLD com服务器。(如果TLD com服务器的地址没有被缓存,该本地DNS服务器也将必须与根DNS服务器相联系。)该TLD服务器包含前面列出的类型NS和类型A资源记录,因为注册登记机构将这些资源记录插入所有的TLDcm服务器。该TLDcom服务器向Alice的本地DNS服务器发送一个回答,该回答包含了这两条资源记录。该本地DNS服务器则向212.212.212.1发送一个DNS查询,请求对应于www.networkutopia.com的类型A记录。该记录提供了所希望的Web服务器的IP地址,如212.212.71.4.本地DNS服务器将该地址回传给Alice的主机。Alice的浏览器此时能够向主机212.212.71.4发起一个TCP连接,并在该连接上发送一个HTTP请求。当一个人在网上冲浪时,有比满足眼球更多的事情在进行!

关注安全性

DNS 脆弱性

        我们已经看到DNS是因特网基础设施的一个至关重要的组件,对于包括Web、电子邮件等的许多重要的服务,没有它都不能正常工作。因此,我们自然要问,DNS能够被怎样攻击呢?DNS是一个易受攻击的目标吗?它是将会被淘汰的服务吗?大多数因特网应用会随同它一起无法工作吗?

        想到的第一种针对DNS服务的攻击是分布式拒绝服务(DDoS)带宽洪泛攻击。例如,某攻击者能够试图向每个DNS根服务器发送大量的分组,使得大多数合法 DNS 请求得不到回答。这种对 DNS根服务器的DDoS 大规模攻击实际发生在2002年10月21日。在这次攻击中,该攻击者利用了一个僵尸网络向13个DNS根服务器中的每个都发送了大批的ICMP ping报文。(ICMP分组是特殊类型的IP数据报。)幸运的是,这种大规模攻击所带来的损害很小,对用户的因特网体验几乎没有或根本没有影响。攻击者的确成功地将大量的分组指向了根服务器,但许多DNS根服务器受到了分组过滤器的保护,配置的分组过滤器阻挡了所有指向根服务器的ICMP ping报文。这些被保护的服务器因此未受伤害并且与平常一样发挥着作用。此外,大多数本地DNS服务器缓存了顶级域名服务器的IP地址,使得这些请求过程通常绕过了DNS根服务器。

        对 DNS的潜在更为有效的DDoS攻击将是向顶级域名服务器(例如向所有处理.com域的顶级域名服务器)发送大量的DNS请求。过滤指向DNS服务器的DNS请求将更为困难,并且顶级域名服务器不像根服务器那样容易绕过。但是这种攻击的严重性通过本地DNS服务器中的缓存技术可将部分地被缓解。

        DNS能够潜在地以其他方式被攻击。在中间人攻击中,攻击者截获来自主机的请求并返回伪造的回答。在DNS毒害攻击中,攻击者向一台DNS服务器发送伪造的回答,诱使服务器在它的缓存中接收伪造的记录。这些攻击中的任一种,都能够将满怀信任的Web用户重定向到攻击者的Web站点。然而,这些攻击难以实现,因为它们要求截获分组或扼制住服务器。

        另一种重要的DNS攻击本质上并不是一种对DNS服务的攻击,而是充分利用DNS基础设施来对目标主机发起DDoS攻击(例如,你所在大学的邮件服务器)。在这种攻击中,攻击者向许多权威DNS服务器发送DNS请求,每个请求具有目标主机的假冒源地址。这些DNS服务器则直接向目标主机发送它们的回答。如果这些请求能够精心制作成下述方式的话,即响应比请求(字节数)大得多(所谓放大),则攻击者不必自行产生大量的流量就有可能淹没目标主机。这种利用DNS的反射攻击至今为止只取得了有限的成功。

        总而言之,DNS自身已经显示了对抗攻击的令人惊讶的健壮性。至今为止,还没有一个攻击已经成功地妨碍了DNS服务。已经有了成功的反射攻击;然而,通过适当地配置DNS服务器,能够处理(和正在处理)这些攻击。

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值