[Linux]DNS
DNS
1 什么是DNS?
底层网络仅通过原始IP地址来识别主机。DNS使我们能够通过名称而非IP地址来追踪网站和主机。
DNS是一个分布式的数据库,将主机名映射到IP地址。我们管理自己的数据库以便人们能够访问我们的站点或域名;而在其他地方,其他人也在管理他们的数据库,以供外界访问其域名。这些域名之间可以相互通信,构建起庞大的互联网联系人列表。
DNS不仅支持基本的域名解析,还提供了负载均衡、冗余路径以及安全性增强等功能,是现代互联网不可或缺的基础架构之一。
2 DNS组件
互联网的DNS数据库依赖于各站点和组织提供的部分数据。为了实现这一点,需要以下关键组件:
名称服务器Name Server
通过“名称服务器”设置DNS,这些服务器加载我们的DNS设置和配置,并响应来自客户端或其他服务器的查询,如“google.com是谁?”如果名称服务器不知道查询的答案,它会将请求重定向到其他名称服务器。名称服务器可以是“权威”的,意味着它们持有正在查找的实际DNS记录;也可以是“递归”的,这意味着它们会询问其他服务器,直至找到包含所需DNS记录的权威服务器。递归服务器也可能缓存了我们想要的信息,而无需每次都访问权威服务器。
区域文件Zone File
名称服务器中存储着所谓的区域文件。区域文件是名称服务器保存关于域名信息的方式,或者在未知情况下如何获取该域名的信息。
资源记录
区域文件由资源记录条目组成。每一行是一个记录,包含了关于主机、名称服务器和其他资源的信息。字段包括以下几个方面:
- 记录名称:指定记录的对象。
- TTL(生存时间):定义丢弃记录并获取新记录的时间,在DNS中以时间表示,因此记录可能具有一小时的TTL。这主要是因为互联网不断变化,一个主机可能前一分钟映射到X IP地址,下一分钟就移到Y IP地址。
- 类:记录信息的命名空间,最常用的是代表互联网的IN。
- 类型:记录数据中存储的信息类型。常见的有A记录(地址)、MX记录(邮件交换器)等。
- 数据:根据记录类型,此字段可包含IP地址或其他相关信息。
例如:
1 |
|
3 DNS解析过程
下面通过一个示例来了解主机如何通过DNS查找域名(例如cetzontheinterwebz.com)。整个过程是一个逐步深入查询的过程,直到找到知道该域名的DNS服务器。
本地DNS服务器
首先,主机提出查询:“cetzontheinterwebz.com位于何处?” 如果本地DNS服务器无法提供答案,则会从根服务器开始查询。需要注意的是,大多数用户是通过其ISP提供的递归DNS服务器进行此类查询的,而非直接由用户主机发起。因此,任务落在了ISP的递归DNS服务器上,以查找cetzontheinterwebz.com的位置。
根服务器
互联网共有13组根服务器,它们在全球范围内被镜像和分布,以处理互联网的DNS请求。实际上,有数百台服务器在运作,它们由不同的组织控制,并包含有关顶级域的信息。顶级域即为熟知的.org、.com、.net等地址类型。根服务器并不知道cetzontheinterwebz.com的具体位置,但会告知查询者向特定IP地址的.com顶级域DNS服务器发起查询。
顶级域
接下来,向负责“.com”地址的名称服务器发送请求,询问是否知道cetzontheinterwebz.com的位置。尽管顶级域(TLD)的区域文件中不包含cetzontheinterwebz.com的具体信息,但它记录了cetzontheinterwebz.com名称服务器的信息。于是,它提供了该名称服务器的IP地址,指示查询者继续向此地址查询。
权威DNS服务器
最后一步,向持有目标记录的DNS服务器发送查询请求。该名称服务器检查其区域文件,发现其中包含了cetzontheinterwebz.com的相关资源记录,并最终返回主机“www”的IP地址。此时,查询流程完成,用户可以通过获得的IP地址访问网站,浏览网页内容。
4 /etc/hosts
在真正访问DNS进行查询之前,会首先检查本地的/etc/hosts文件。
文件概述
/etc/hosts文件中包含了主机名到IP地址的映射。其格式直观易懂:每行包含一个IP地址、对应的主机名以及可选的主机别名。
例如:
1 |
|
默认情况下,此文件通常包含指向localhost的条目。此外,通过修改/etc/hosts.deny或/etc/hosts.allow文件可以管理对主机的访问控制。然而,出于安全考虑,直接编辑这些文件并不是最佳实践;更推荐的方法是调整防火墙规则以增强安全性。
/etc/resolv.conf文件
/etc/resolv.conf文件用于指定DNS服务器,以便更高效地进行域名解析。然而,随着DNS技术的发展和改进,该文件的重要性已经减弱,在很多现代Linux发行版中,它甚至不再需要手动维护。
例如,以下是一个由resolvconf工具自动生成的/etc/resolv.conf文件示例:
1 |
|
5 DNS工具
nslookup
“名称服务器查找”工具用于查询名称服务器以获取关于资源记录的信息。下面是如何查找google.com的名称服务器位置的例子:
1 |
|
dig
Dig(域名信息搜索器)用于获取DNS名称服务器的相关信息。相比nslookup,它更加灵活,是排查DNS问题的理想选择。
示例命令及其输出如下:
1 |
|