一、概念
-
DNS(Domain Name System)
DNS 是一种分布式网络目录服务,主要用于将人类易于记忆的域名(如 www.example.com)转换为计算机可识别的 IP 地址(如 192.168.1.1)。它就像是互联网的电话簿,使得用户无需记住复杂的 IP 地址就能访问网络资源。 -
域名层次结构
域名是按照层次结构组织的。从右到左依次为顶级域名(TLD,如.com、.org、.net 等)、二级域名(如 example 在 example.com 中)、子域名(如 www 是 example.com 的子域名)等。这种层次结构有助于 DNS 系统的分布式管理和查询。 -
DNS 服务器类型
- 根 DNS 服务器:位于 DNS 层次结构的顶端,主要负责引导查询到相应的顶级域名服务器。全球共有 13 组根 DNS 服务器(以字母 A - M 命名),它们存储了所有顶级域名服务器的信息。
- 顶级域名服务器:负责管理顶级域名相关的 DNS 信息,例如.com 顶级域名服务器知道哪些服务器负责处理.com 域名下的二级域名解析。
- 权威 DNS 服务器:对于特定域名,权威 DNS 服务器存储着该域名及其子域名的准确 DNS 记录,是最终提供域名解析结果的服务器。
- 本地 DNS 服务器:一般由互联网服务提供商(ISP)提供,用于缓存 DNS 查询结果,并在一定程度上减少对上级 DNS 服务器的查询次数,提高查询效率。
二、运行过程
-
递归查询与迭代查询
- 递归查询:当客户端向本地 DNS 服务器发起域名查询时,如果本地 DNS 服务器没有所需的域名 - IP 映射信息,它会代替客户端向其他 DNS 服务器查询,直到获得结果或者查询失败。整个过程对客户端来说是透明的,客户端只需要等待本地 DNS 服务器返回最终结果。
- 迭代查询:当 DNS 服务器收到一个域名查询请求时,如果它没有对应的记录,它会向客户端返回一个它认为可能有该信息的其他 DNS 服务器的地址,而不是继续代替客户端查询。客户端需要根据返回的信息继续向其他 DNS 服务器查询。
-
查询步骤示例
- 假设客户端要访问 www.example.com。客户端首先向本地 DNS 服务器发送递归查询请求。
- 本地 DNS 服务器在缓存中查找,如果没有找到,它向根 DNS 服务器发起迭代查询。
- 根 DNS 服务器根据域名的顶级域名(.com),返回.com 顶级域名服务器的地址给本地 DNS 服务器。
- 本地 DNS 服务器向.com 顶级域名服务器发起迭代查询,.com 顶级域名服务器根据域名中的二级域名(example)返回负责 example.com 的权威 DNS 服务器地址。
- 本地 DNS 服务器向权威 DNS 服务器发起迭代查询,权威 DNS 服务器如果存在 www.example.com 的记录,就将其对应的 IP 地址返回给本地 DNS 服务器。
- 本地 DNS 服务器将结果缓存起来,并将 IP 地址返回给客户端。
三、配置文件
- 主配置文件(通常为 /etc/named.conf)
- 全局配置部分:包括设置 DNS 服务器的运行参数,如监听的 IP 地址和端口(一般为监听 53 端口)、允许查询的客户端范围等。例如:
options {
listen-on port 53 { 127.0.0.1; };
allow-query { localhost; };
recursion yes;
};
这里设置 DNS 服务器在本地环回地址(127.0.0.1)的 53 端口监听,只允许本地(localhost)查询,并且开启递归查询功能。
-
一般需要修改三部分:
-
listen-on port 53 { 127.0.0.1; }; 即监听ip及端口
-
allow-query { localhost; }; 允许那些客户端访问
-
recursion yes; 是否开启递归查询
-
- 区域配置部分:定义了 DNS 服务器负责解析的域名区域。例如:
zone "example.com" IN {
type master;
file "example.com.zone";
allow-update { none; };
};
此配置表示这是一个名为 example.com 的主区域,区域数据存储在 example.com.zone 文件中,并且不允许动态更新。
- 区域数据文件(如 example.com.zone)
- SOA(Start of Authority)记录:是区域数据文件的开头部分,包含了该区域的重要信息,如域名、主服务器名称、管理员邮箱、序列号等。例如:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2024010101 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
这里定义了域名的生存时间(TTL)为 86400 秒,SOA 记录中的其他参数控制了从服务器与主服务器之间的同步等相关信息。
-
NS(Name Server)记录:指定了该区域的权威 DNS 服务器名称。例如:
@ IN NS ns1.example.com.
表示 example.com 区域的权威 DNS 服务器是 ns1.example.com。 -
A(Address)记录和 AAAA(IPv6 Address)记录:分别用于将域名映射到 IPv4 地址和 IPv6 地址。例如:
www IN A 192.168.1.1
表示 www.example.com 的 IPv4 地址是 192.168.1.1。 -
CNAME(Canonical Name)记录:用于为域名创建别名。例如:
ftp IN CNAME www.example.com
表示 ftp.example.com 是 www.example.com 的别名。 -
MX(Mail Exchanger)记录:用于指定邮件服务器。例如:
@ IN MX 10 mail.example.com
表示 example.com 域的邮件服务器是 mail.example.com,优先级为 10。优先级数字越小,优先级越高。