- 前言
- 读者对象
- 如何阅读本书
- 勘误和支持
- 致谢
- 第 1 篇 高性能网站构建
- 第 1 章 深入理解 DNS 原理与部署 BIND
- 第 2 章 全面解析 CDN 技术与实战
- 第 3 章 负载均衡和高可用技术
- 第 4 章 配置及调优 LVS
- 第 5 章 使用 HAProxy 实现 4 层和 7 层代理
- 第 6 章 实践 Nginx 的反向代理和负载均衡
- 第 7 章 部署商业负载均衡设备 NetScaler
- 第 8 章 配置高性能网站
- 第 9 章 优化 MySQL 数据库
- 第 2 篇 服务器安全和监控
- 第 10 章 构建企业级虚拟专用网络
- 第 11 章 实施 Linux 系统安全策略与入侵检测
- 第 12 章 实践 Zabbix 自定义模板技术
- 第 13 章 服务器硬件监控
- 第 3 篇 网络分析技术
- 第 14 章 使用 tcpdump 与 Wireshark 解决疑难问题
- 第 15 章 分析与解决运营商劫持问题
- 第 16 章 深度实践 iptables
- 第 4 篇 运维自动化和游戏运维
- 第 17 章 使用 Kickstart 完成批量系统安装
- 第 18 章 利用 Perl 编程实施高效运维
- 第 19 章 精通 Ansible 实现运维自动化
- 第 20 章 掌握端游运维的技术要点
- 第 21 章 精通手游运维的架构体系
最佳实践 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;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论