最佳实践1:禁用权威域名服务器递归查询
我们经常听说DNS的“递归查询”和“迭代查询”,那么到底什么是“递归查询”,什么是“迭代查询”呢?
我们并不直接回答这个复杂的问题,而是先从DNS相关的重要概念开始学习。只有理解了这些概念,才能真正回答这个问题。
DNS的组成部分
DNS的组成概括来讲包括以下两个部分。
·域名服务器(Name Server)。提供域名解析服务的软件,一般监听UDP、TCP的53端口。例如Linux系统中常见的BIND、Windows Server中集成的DNS服务器组件等。
·解析器(Resolver)。访问域名服务器的客户端,它负责解析从域名服务器获取的响应,向调用它的应用返回IP地址或者别名等信息,例如Linux系统中的gethostbyname()函数、Windows系统中的nslookup等。
域名服务器的分类
域名服务器根据用途不同,可以进行如下分类。
1.权威域名服务器(Authoritative Name Server)
负责授权域下的域名解析服务,由上级权威域名服务器使用NS记录进行授权。
有以下3级权威域名服务器。
(1)根域名服务器(Root Name Server)
最上层权威域名服务器,负责对.com、.cn、.org等顶级域名的向下授权。目前有13组这样的服务器,详见表1-1。
表1-1 根域名服务器分布情况表
注意
对于表1-1中的服务器,这里指出是13组,而不是13台,是因为其中的大部分服务器采用了anycast技术,将其分布到不同地区,也就是说,虽然看起来只有13个IP,但实际的服务器数量远远超过了13台。Anycast是在大型DNS系统中广泛使用的多点部署、分布式方案,对于提高可用性、提高性能、抵抗DDOS有重要作用。有兴趣的读者可以参考Wikipedia上anycast技术的详细介绍:https://en.wikipedia.org/wiki/Anycast。
(2)顶级域名服务器(Top Level Name Server)
顶级域名服务器有以下2类。
·通用顶级域名(Generic Top Level Domains,GTLD)服务器。例如服务于.com、.org、.info等授权的域名服务器。
·国家代码顶级域名(Country Code Top Level Domains,CCTLD)服务器。例如服务于.uk、.cn、.jp等授权的域名服务器。
完整的顶级域名服务器列表,可以从http://www.iana.org/domains/root/db这个链接获取。例如负责.cn授权的国家代码顶级域名服务器,详见表1-2。
表1-2 负责解析.cn的顶级域名服务器列表
(3)二级域名服务器(Second Level Name Server)
这类域名服务器,服务于具体域名解析,例如负责解析sdo.com域的域名服务器ns.uugame.com等。
以上3类权威域名服务器的授权结构可以参考图1-1。
图1-1 权威域名服务器的授权结构图
2.缓存域名服务器(Caching Name Server)
这类域名服务器,负责接收解析器发过来的DNS请求,通过依次查询根域名服务器→顶级域名服务器→二级域名服务器来获得DNS的解析条目,然后把响应结果发送给解析器。同时根据DNS条目的TTL(Time To Live,存活时间)值进行缓存。
缓存域名服务器,有以下2个用途。
·用在企业局域网内部,作为该局域网的DNS服务器。这样就可以避免内部用户的主机访问外部非授权的DNS服务器,避免DNS污染等问题。
·用于电信等运营商为其租户提供域名解析服务。如上海电信的202.96.209.5和202.96.209.133都是此种类型的服务器。
·用于开放DNS解析服务。如Google的8.8.8.8、Norton安全DNS 199.85.126.30及国内的114.114.114.114等都是此类。
3.转发域名服务器(Forwarding Name Server)
这类域名服务器,负责接收解析器发过来的DNS请求,转发给指定的上级域名服务器获得DNS的解析条目,然后把响应结果发送给解析器。和缓存域名服务器不同,这类域名服务器不进行任何的缓存,而仅仅是转发。
递归查询与迭代查询的区别
在了解了DNS的重要概念之后,现在来研究“递归查询”。
递归查询可以使用图1-2进行说明。
图1-2 递归查询架构图
递归查询,是指在图1-2中角色为本地域名服务器上,它代替解析器,依次查询根域名服务器→顶级域名服务器→二级域名服务器来获得DNS的解析条目,然后把响应结果发送给解析器。
迭代查询,是指域名服务器并不直接代替解析器进行依次查询,而是给它返回一个参考列表,这个参考列表里面指出了可以解析这个DNS请求的服务器,由解析器再次对该列表中的服务器进行DNS查询以获取DNS解析结果。
禁用递归查询的原因与方法
通过对递归查询和迭代查询的分析可以知道,对于权威域名服务器,打开了递归查询功能,相当于把它配置成了开放的DNS服务器,会造成大量的数据流量,影响正常业务提供。因此,在权威域名服务器上,需要禁用递归查询。
在BIND里面配置禁用递归查询的指令如下:
recursion no;