DNS 服务器简介
# DNS 服务器
# DNS 概述
DNS(Domain Name Service)域名解析服务是用于解析域名与 IP 地址对应关系的服务。
目前人们访问互联网进行上网浏览信息时,正常是通过域名进行访问(例如,www.baidu.com),而实际上网络中的计算机之间只能基于 IP 地址来相互访问识别对方的身份,而且要想在互联网中传输数据,也必须基于外网的 IP 地址来完成。这里就出现了 DNS 域名系统技术来帮人们简化此过程,以此来降低用户访问网络资源的门槛。因为域名相对于 IP 地址,更容易被理解并记忆,这样用户便可以通过域名来访问互联网中各项服务了。
简单来说,就是能够接受用户输入的域名或 IP 地址,然后自动查找与之匹配的 IP 地址或域名,即将域名解析为 IP 地址(正向解析),或将 IP 地址解析为域名(反向解析)。这样人们只需要在浏览器中输入域名就能打开想要访问的网站了。目前,DNS 域名解析技术的正向解析也是人们最常使用的一种工作模式。
# DNS 组成
每当一个应用需要将域名翻译成为 IP 地址时,这个应用便成为域名系统的一个客户。
这个客户将待翻译的域名放在一个 DNS 请求信息中,并将这个请求发送给域名空间中的 DNS 服务器。服务器从请求中取出域名,将它翻译成为对应的 IP 地址,然后在一个回答信息中将结果返回给应用。如果接到请求的 DNS 服务器自己不能把域名翻译为 IP 地址,将向其它 DNS 服务器查询。整个 DNS 域名系统由 DNS 域名空间、DNS 服务器和解析器这 3 部分组成。
DNS 域名空间
指定用于组织名称的域的层次结构。如图所示,根域位于顶部,在根域的下面是几个顶级域,每个顶级域又可以进一步划分为不同的二级域,二级域再划分出子域,子域下面可以是主机也可以是再划分的子域,直到最后的主机。
DNS 服务器
DNS 服务器是保持和维护域名空间中数据的程序。由于域名服务是分布式的。每一个 DNS 服务器含有一个域名空间自己的完整信息,其控制范围成为区(Zone)。对于本区内的请求由负责本区的 DNS 服务器解释,对于其它区的请求将由本区的 DNS 服务器与负责该区的相应服务器联系。
其中,DNS 服务器形式上又分为主服务器、从服务器和缓存服务器。
(1)主服务器
为客户端提供域名解析的主要区域,主 DNS 服务器宕机,会启用从 DNS 服务器提供服务。
(2)从服务器
主服务器 DNS 长期无应答,从服务器也会停止提供服务。主从区域之间的同步采用周期
性检查+通知的机制,从服务器周期性地检查主服务器上的记录情况,一旦发现修改就会同步,另外主服务器上如果有数据被修改了,会立即通知从服务器更新记录。
(3)缓存服务器
缓存服务器是一种不负责域名数据维护,也不负责域名解析的 DNS 服务类型。它是将用户经常使用到的域名与 IP 地址解析记录保存在主机本地中,来提升下次解析的效率。
解析器
解析器是简单的程序和子程序,它从服务器中提取信息以响应对域名空间中主机的查询,用于 DNS 客户端。
# DNS 查询
DNS 查询分为递归查询与迭代查询。
1. 递归查询
用于客户机向 DNS 服务器查询。如果主机所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果是所要查询的 IP 地址,或者是返回一个失败的响应,表示无法查询到所需的 IP 地址。
2. 迭代查询
用于 DNS 服务器向其它 DNS 服务器查询。当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么返回给本地域名服务器所要查询的 IP 地址,要么返回给本地域名服务器下一步应当查询的域名服务器的 IP 地址。
互联网 DNS 访问模型,采用分布式数据结构保存海量区域数据信息,用户从互联网中查询过程大致流程可理解为查询本地 hosts 文件→本地 DNS 缓存→本地 DNS 服务器→发起迭代查询。
# Bind 及 Bind 配置
1. Bind 概述
BIND(Berkeley Internet Name Daemon)是一款全球互联网使用最广泛的能够提供安全可靠、快捷高效的域名解析服务程序。
并且 Bind 服务程序还支持 chroot(change root)监牢安全机制,chroot 机制会限制 bind 服务程序仅对自身配置文件进行操作,从而保证了整个服务器的安全。
域名解析服务 Bind 程序名称叫做 named,服务程序有 3 个关键的配置文件如下:
⚫ 主配置文件(/etc/named.conf):只有 58 行,而且在去除注释信息和空行之后,实际有效的参数仅有 30 行左右,这些参数用来定义 bind 服务程序的运行。
⚫ 区域配置文件(/etc/named.rfc1912.zones):用来保存域名与 IP 地址对应关系的所有位置,类似于书本目录。
⚫ 数据配置文件目录(/var/named):用于保存域名与 IP 地址真实的对应关系的数据配置文件。
2. Bind 中的安全相关的配置
(1)bind 4 个内置的 acl
⚫ none:没有一个主机;
⚫ any:任意主机;
⚫ local:本机;
⚫ localnet:本机所在的 IP 所属的网络。
(2)访问控制指令
⚫ 表示允许查询的主机
,示例代码段如下所示:
options {
……….
allow-query { localhost; };
//访问控制语句,意思是允许本服务器处理哪些主机发送来的解析查询请求;默
认为 localhost,即:只允许本机以 127.0.0.1 发送查询请求
………..
}
⚫ 表示允许向哪些主机做区域传送
。默认为向所有主机,示例代码段如下所示:
options {
……….
allow- transfer { 172.168.47.120; };
//访问控制指令,允许 IP 为 172.168.47.120 的主机能够从当前服务器进行区域传
送
………..
}
⚫ 表示允许哪些主机向当前 DNS 服务器发起递归查询请求
,示例代码段如下所示:
options {
……….
allow- recursion {any; };
//访问控制指令,这里表示允许任意主机向当前 DNS 服务器发起递归查询请求
………..
}
⚫ 表示允许动态更新区域数据库文件中内容
,主要用于 DDNS,示例代码段如下所示:
options {
……….
allow- update { none;};
//访问控制指令,这里表示不允许客户端对数据库内容进行动态更新
………..
}
# DNS 相关测试工具及命令
DNS 的测试工具有很多,常用的有 host、nslookup 和 dig 这 3 个工具。
1. dig 命令
用于测试 DNS 系统,其不会查询 hosts 文件,使用格式:
dig [-t RR_TYPE] name [@SERVER] [query options]
常用的查询选项包括:
⚫ +[no]trace:跟踪解析过程;
⚫ +[no]recurse:进行递归解析。
其常用用法包括:
⚫ 反向解析测试:dig -x IP
⚫ 测试区域传送:dig -t [axfr|ixfr] DOMAIN [@server]
2. host 命令
其用法类似于 dig 命令,使用格式为:
host [-t RR_TYPE] name SERVER_IP
3. nslookup 命令
nslookup 命令用于检测能否从网络 DNS 服务器中查询到域名与 IP 地址的解析记录。有两种使用模式,一种是命令模式,另一个交互模式。其命令模式的使用格式为:
nslookup [-options] [name] [server]
而交互模式的使用格式为:
nslookup>
参数解析:
⚫ server IP:以指定的 IP 为 DNS 服务器进行查询;
⚫ set q=RR_TYPE:要查询的资源记录类型;
⚫ name:要查询的名称。
4. rndc 命令
rndc 命令为 named 服务的控制命令,其常用的用法有以下几种:
⚫ rndc status:显示服务器状态;
⚫ rndc reload:在不停止 DNS 服务器工作的情况下,重新加载配置文件和区域文件;
⚫ rndc flush:清理 DNS 缓存。