返回介绍

最佳实践 1:禁用权威域名服务器递归查询

发布于 2025-04-20 17:44:38 字数 3867 浏览 0 评论 0 收藏 0

我们经常听说 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;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。