DNS 服务

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

DNS可以使用TCP和UDP的53端口,基本使用UDP协议的53端口。  

DNS 的分布式数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space)。

 

1.  DNS 演化

网络出现的早期是使用IP地址通讯的,那时就几台主机通讯。但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做 hosts 的文件(Linux和Windows也继承保留了这个文件)。

hosts 文件中记录着主机名称和 IP 地址的对应表。这样只要输入主机名称,系统就会去加载 hosts 文件并查找对应关系,找到对应的IP,就可以访问这个 IP 的主机了。

但是后来主机太多了,无法保证所有人都能拿到统一的最新的 hosts 文件,就出现了在文件服务器上集中存放 hosts 文件,以供下载使用。互联网规模进一步扩大,这种方式也不堪重负,而且把所有地址解析记录形成的文件都同步到所有的客户机似乎也不是一个好办法。这时DNS系统出现了,随着解析规模的继续扩大,DNS系统也在不断的演化,直到现今的多层架构体系。

 

2. 域的分类

域是分层管理的。

第一层:根域

  • 根域 : .

第二层 :顶级域 

  • 按国家划分:.cn(中国)、.tw(台湾)、.hk(香港) 等。
  • 按组织性质划分:.org、.net、.com、.edu、.gov 等。
  • 反向域:arpa ,这是反向解析的特殊顶级域。

第三层及以下:

顶级域下来就是普通的域,公司或个人在互联网上注册的域名一般都是这些普通的域,如jd.com。

 

3. 主机名、域名、FQDN

以百度(www.baidu.com)和百度贴吧(tieba.baidu.com)来举例。

域名: 不论是 www.baidu.com 还是 tieba.baidu.com,它们的域名都是 baidu.com,严格地说是 “baidu.com.”。这是百度所购买的com域下的一个子域名。

主机名: 对于 www.baidu.com 来说,主机名是 www,对于 tieba.baidu.com 来说,主机名是 tieba。其实严格来说,www.baidu.com 和 tieba.baidu.com 才是主机名,它们都是 baidu.com 域下的主机。一个域下可以定义很多主机,只需配置好它的主机名和对应主机的IP地址即可。

FQDN: FQDN(Fully Qualified Domain Name),称为完整主机名,是指包含了所有域的主机名,其中包括根域。FQDN 可以说是主机名的一种完全表示形式,它从逻辑上准确地表示出主机在什么地方。例如 www.baidu.com 的 FQDN 是 “www.baidu.com.”,com 后面还有个点,这是根域;tieba.baidu.com 的 FQDN 是 “tieba.baidu.com.”。

 

4. DNS解析流程

在这里插入图片描述

我们访问 www.baidu.com 为例。

(1) 本地主机首先会查找本机 DNS 缓存,然後查询本地 hosts 文件是否有 www.baidu.com. 这个 FQDN 所对应的主机 IP 地址,若有,则直接使用;若没有,本机将向指定的 dns server 发起查询请求(这个 DNS 服务器就是计算机里设置指向的 DNS)。

(2) DNS 服务器收到询问请求,首先查看自己是否有 www.baidu.com 的缓存,如果有就直接返回给客户端,没有就越级上访到根域".",并询问根域。

(3) 根域只是记录了 .com 域的相关信息,所以将 .com 域的地址返回给 DNS 服务器。

(4) DNS 服务器根据根域返回的信息向 .com 域发起查询请求,由于 .com 域只记录了 baidu.com 的信息,所以将 baidu.com 域的地址返回给 DNS 服务器。

(5) DNS 服务器根据 .com 域返回的信息向 baidu.com 域发起查询请求,于是 baidu.com 域的 DNS 服务器就去查询本地的记录,找到了 www 主机对应 IP 地址,将该 IP 地址返回给 DNS 服务器。

(6) DNS 服务器将得到的 IP 地址返回给客户端,并缓存一份结果在自己机器中,方便下一次客户端再次访问该站点。

(7) 客户端得到回答的IP地址后缓存下来,并去访问 www.baidu.com,然后 www.baidu.com 就把页面内容发送给客户端,也就是百度页面。

注:

1. 本机查找完缓存后如果没有结果,会先查找hosts文件,如果没有找到再把查询发送给DNS服务器,但这仅仅是默认情况,这个默认顺序是可以改变的。在/etc/nsswitch.conf中有一行" hosts: files dns"就是定义先查找hosts文件还是先提交给DNS服务器的,如果修改该行为"hosts: dns files"则先提交给DNS服务器,这种情况下hosts文件几乎就不怎么用的上了。

2. 由于缓存是多层次缓存的,所以真正的查询可能并没有那么多步骤,上图的步骤是完全没有所需缓存的查询情况。假如某主机曾经向DNS服务器提交了www.baidu.com的查询,那么在DNS服务器上除了缓存了www.baidu.com的记录,还缓存了".com"和"baidu.com"的记录,如果再有主机向该DNS服务器提交ftp.baidu.com的查询,那么将跳过".“和”.com"的查询过程直接向baidu.com发出查询请求。

3. DNS解析过程中存在两种查询类型:递归查询(从客户机至指定DNS服务器)、迭代查询(从DNS服务器至各个域)。

 

5. DNS分类

主DNS服务器: 就是一台存储着原始资料的DNS服务器。

从DNS服务器: 使用自动更新方式从主DNS服务器同步数据的DNS服务器。也成辅助DNS服务器。

缓存服务器: 不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的结果,也叫递归服务器。

转发器: 这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。

 

6. 资源记录

DNS服务器是如何根据主机名解析出 IP 地址,或从 IP 地址解析出主机名的呢?这儿我们就要用到资源记录(Resource Record),简称 RR。常用的记录类型有:A、AAAA、SOA、NS、PTR、CNAME、MX 等。

资源记录的定义格式:

name     [TTL]     IN     RR_TYPE     value

SOA(Start Of Authority): 起始授权记录,一个区域解析库有且只能有一个SOA记录,而且必须放在第一条。

name:当前域的名称,如 "baidu.com.",或"4.3.2.in-addr.arpa."。
value:由多部分组成。
(1) 当前域的名称(也可使用主DNS服务器名称);
(2) 当前域管理员的邮箱地址,但地址中不能使用@符号,一般使用 "." 来代替;
(3) 主从服务协调属性的定义;
第一个值是区域数据文件的序列编号serial,每次修改此区域数据文件都需要修改该编号值以便让slave dns服务器同步该区域数据文件。
第二个值是刷新refresh时间间隔,表示slave dns服务器找master dns服务器更新区域数据文件的时间间隔。
第三个值是重试retry时间间隔,表示slave dns服务器找master dns服务器更新区域数据文件时,如果联系不上master,则等待多久再重试联系,该值一般比refresh时间短,否则该值表示的重试就失去了意义。
第四个值是过期expire时间值,表示slave dns服务器上的区域数据文件多久过期。
第五个值是negative answer ttl,表示客户端找dns服务器解析时,否定答案的缓存时间长度。
这几个值可以分行写,也可以直接写在同一行中使用空格分开。
		
例如:
test.com.	IN SOA	test.com. admin.test.com.  (
    2018110601	;serial
    2H   ;refresh 2 hours					
    10M  ;retry	10 min
1W ;expire 1 week
1D ;negative answer ttl 1 day )

NS(Name Server):存储的是该域内的 DNS 服务器相关信息。即 NS 记录标识了哪台服务器是 DNS 服务器。

name:当前域的名称。
value:当前域的某 DNS 服务器的名称,如 "ns.test.com."。

例如
test.com	IN	 NS	 ns1.test.com
test.com 	IN	 NS	 ns2.test.com

注:一个域内可以有多个 ns 记录,即可以存在多台 DNS 服务器。

A(Address):存储的是域内主机名所对应的ip地址。

name:某 FQDN,如 "www.test.com."。
value:某 IPv4 地址。

例如:
www.test.com. 	IN	 A	 192.168.100.200

注:AAAA记录格式和A记录格式相似,但 value 是某 IPv6 地址。

PTR(Pointer):和A记录相反,存储的是 ip 地址对应的主机名,该记录只存在于反向解析的区域数据文件中(并非一定)。

name:IP 地址,有特定格式,且加上特定后缀,如:"1.2.3.4" 的记录应该写为 "4.3.2.in-addr.arpa"。
value:某 FQDN

例如:
4.3.2.in-addr.arpa 	IN 	 PTR 	www.test.com.

CNAME(Canonical Name):表示规范名的意思,其所代表的记录常称为别名记录。之所以如此称呼,就是因为为规范名起了一个别名。什么是规范名?可以简单认为是 FQDN。

name: FQDN 格式的别名
value: FQDN 格式的初始名

例如:
web.test.com. 	IN 	CNAME 	www.test.com

MX(Mail Exchanger):邮件交换器 。

name:当前的域名
value:当前域内某邮件交换器的主机名

例如
test.com.	IN 	MX	10	mx1.test.com.
test.com.	IN 	MX	20	mx2.test.com.

注:MX记录可以有多个,但每一个记录的value之前应该有一个数字表示优先级 。优先级:0-99,数字越小优先级越高。