DNS服务器

一、DNS名称解析服务的作用及概念

   DNS是domain name system的简称,DNS的主要作用就是讲主机名解析成IP的过程,因为在计算机网络当中是通过IP地址来进行主机间的互联,但是IP地址是32位的二进制数字,并不便于人们的记忆,所以我们就需要一个简单容易记忆的字符串来代替IP地址,就像我们在访问百度的主页的时候,只记得住www.baidu.com,谁又会记得百度的IP呢?因此我们就需要一种机制,能够完成域名(FQDN)到主机识别的IP地址之间的转换,因此DNS就诞生了
  在DNS诞生之前,这个功能主要是通过本机的一个hosts文件来记录域名和IP的对应关系,但是hosts文件也有一些缺陷,它只能服务于本主机,而不能同步更新所有的主机使用,并且当hosts文件很庞大的时候是很难管理的,因此就必须有一个统一的组织去记录管理域名和IP的对应关系
  DNS是一个分布式、分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的IP地址就能通过主机名形式访问互联网。DNS利用类似倒状树的目录结构将主机名的管理分配在不同层级的DNS服务器中,通过分层管理,每一级DNS服务器负责部分域名信息,这也就减轻了DNS服务器的负载,同时也方便记录的更新同步。比如某些服务器只记录属于它负责范围内的域名信息
  上面我提到了一个名词FQDN,FQDN 是full qualified domain name的简称,叫完整主机名,完整主机名由主机名和域名组成,那么什么是主机名和域名呢?我们通过一个简单的例子来解释一下主机名与域名的概念,假如你要给给你一个北京的亲戚打一个固话,北京的主机号码是62981234,那么我直接拨号62981234后,电信局会认为我拨打的是本地的号码,那么它就会直接给我转接本地62981234的主机中,但是实际我想接的是北京的62981234,那么因此我们就需要在该号码前加上北京的区号010,这样才能把电话接到北京,那么这个电话号码62981234就相当于主机名,区号010就相当于域名,再比如我们经常访问的www.baidu.com当中,www就是web网站服务器的主机名,baidu.com就是域名,主机名和域名之间用实心的点号来表示。
  我们学习文件系统知识的时候就知道,目录结构的最顶层是根目录,根是一切文件的起点,DNS同根文件系统一样都是倒状的树状结构,在最顶层是由一个叫做根服务器,主要负责顶级域名的管理,所谓顶级域名就是像.com、.cn、.get、.org、.edu等等,在下面的顶级域名服务器则负责其所对应的二级域名,如.baidu.com、.taobao.com、.qq.com等。在接下来二级域名服务器负责对应的主机名解析或者其三级域名解析,三级域名如.www.taobao.com、.www.baidu.com、www.qq.com等,最多127级域名,依次类推结构如下图:
DNS服务器
  从上图中,我们看出,每一级DNS服务器只知道下一级的域的管理,其中的根节点是分布在全是假各处的13台服务器组成,其中10台在美国地区,另外3台设置于英国、瑞典和日本,在这13台根服务器当中有1台为主根服务器放置在美国,其余12台均为辅根服务器,所有的跟服务器均有美国政府授权的互联网域名与号码分配机构ICANN组织统一管理,负责全球网络域名跟服务器、域名体系和IP地址等的管理,
由于跟服务器中有经美国政府批准的260多个互联网后缀(顶级域名如:.com、.net等)和一些国家指定符号,这些后缀也通常具有一定的意义,比如:
   名称    代表意义
   com    公司、行号、企业
   org     组织、机构
   edu     教育单位
   gov     政府单位
   net     网络、通讯
   mil     军事单位

二、DNS解析主机的IP的流程

  前面我们说对你说是一个类似倒状树形结构的形态来进行主机名的管理的,并且每一层级的服务器只负责对应其下级的域名解析工作,也就是自上而下的一个过程 ,例如我们查找www.taobao.com主机对应的IP地址

 1、本地主机先查询本地hosts文件是否有www.taobao.com主机与IP的对应关系,若有,则直接给出;若没有,则进行第二步

  2、此时主机将向指定的dns server(假设为NSI)发起查询请求,NSI在收到来自客户端的请求后,会及时的去查询NSI上的缓存记录,查看是否有关于www.taobao.com的解析记录,若有则将结果直接反馈给客户端;若没有,则进行第三步

  3、此时NSI会主动向根域名服务器发起查询www.taobao.com的请求,但是由于根服务器只记录了.com的相关信息,此时根会告诉NSI:我这里没有www.taobao.com的记录,但是.com可能会有,你去找.com查询,并告知NSI.com的地址。

  4、于是NSI就根据根服务器告知的.com的地址向.com发起查询www.taobao.com的请求,由于.com只记录了taobao.com的记录,但没有www主机的记录,因此就告知NSI服务器说:我这里没有www.taobao.com的具体解析记录,但是我知道taobao.com的地址,你可以去想taobao.com查询,并告诉taobao.com的IP

  5、接着NSI就根据.com告知的taobao.com的地址向taobao.com发起www.taobao.com的查询请求,于是taobao.com就去查询本地记录,找到了www主机对应的IP,于是将www.taobao.com的IP地址反馈给NSI,

  6、NSI在收到具体的结果后,会将结果存储在本地DNS缓存中,以方便如有下次相同的解析请求时能够快速的相应,之后再将结果直接反馈给客户端,完成解析

  在www.taobao.com的解析过程当中我们发现有这么两个阶段:

   1、客户端将解析请求发送给NSI之后只需要等待结果就OK了

   2、NSI在接到客户端的请求后,全面负责的去查找www.taobao.com,查找的每个过程都是NSI去请求的,这两个过程的查找方式显然是不相同的,前者我们称之为递归查询,后者称之为迭代查询

  解析答案:
   肯定答案:知道为肯定答案
    权威答案:知道确切的位置,例如baidu.com给出的www.baidu.com的IP
    非权威答案:不知道确切的位置,但是知道另一个服务器可能知道,例如.不知道www.baidu.com的IP,但是知道.com的IP,所以给出.com的位置让客户端去找.com询问
   否定答案:找不到该域名,没有这个位置

三、本地hosts文件

  本地的hosts文件就是一个存储着主机名与IP相对应的关系的文件,通常存储在/etc/hosts中,但是大家也知道全世界那么多台计算机,如果把所有的对应的主机名与IP对应都存储下来那是一个很庞大的数据,任何一台计算机也承受不了,所以这仅适用于主机不多小型的内部网络,优点是寻址快,而且在解析时第一步就是先查看本地的hosts文件是否有主机名与IP的对应关系,没有才会去DNS服务器哪里去询问,那么这个要怎么运用呢?
  首先我们来查看一下hosts文件
DNS服务器
  看了这个文件我们发现这个文件的格式是前面是IP,后面跟的是主机名,中间以空格隔开,而且一个IP可以有多个主机名,都可以解析到这一个IP地址下面我们来试验一下,需要两台虚拟机,
   第一步:先查看计算机1的IP地址
DNS服务器
   第二步:查看计算机2主机的hosts文件,然后使用ping命令ping我准备给计算机1命名的主机名,显示找不到这个主机名的计算机
DNS服务器
   第三步:编辑计算机2的hosts文件添加一条计算机1的IP所对应的主机名
DNS服务器
   第四步:验证,结果在使用ping命令验证连通性的时候,后台自动把主机名解析成对应的IP了
DNS服务器

四、DNS解析

  首先DNS是一个网络服务,因此就有对应的端口,其端口是53号,通常DNS在查询的时候是以UDP这个快递的数据传输协议来查询的,但是一旦没有办法查询到完整的信息时就会再以TCP协议来进行重新查询,因此DNS服务在启动的时候回同时开启TCP和UDP的53号端口
  DNS查询类型:
   递归查询
   迭代查询
  名称服务器:域内负责解析本域内的名称的主机
  根服务器:13组服务器
  解析类型:
   FQDN-------->IP :把域名解析为IP(正向解析)
   IP-------->FQDN :把IP解析成域名(反向解析)

五、资源记录类型

  上面在DNS的解析过程中,我们提到过域名的解析记录信息,这个解析信息在DNS当中称之为DNS数据库,这个数据库又分为正解和反解,正解就是从主机名到IP,反解就是IP反向解析到主机名的过程,无论是正解还是反解,每个域名所对应的解析记录我们称之为zone(域),如baidu.com这个zone,正解和反解在zone记录中是由众多的RR(Resource Record,资源记录)组成,这些记录的类型有A、AAAA、PTR、SOA、NS、CNAME、NX;其中:
   SOA:起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
   NS:专用于表明当前区域的DNS服务器,后面记录的数据是DNS服务器的意思
   A:正向解析的记录,作用是从主机名解析到IP,对应的是IPv4地址
   AAAA:正向解析的记录,也是从主机名解析到IP,其后面对应的是IPv6地址
   PTR:反向解析记录,从IP解析到主机名,后面记录的数据就是反解到的主机名
   CNAME:别名记录,一个主机可以有多个别名,但IP地址是一样的;
   MX:邮件服务器地址

 1、资源记录定义的格式:name [ttl] IN rr_type value

   1.TTl表示该记录被其它DNS服务器查询到后保留到对方 服务器上的缓存当中并保持多少秒,可从全局继承

   2.@可用于引用当前区域的名字

   3.同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应

   4.同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机而已;

 2、每一种资源类型定义的方式如下:

  1.SOA:

   Name :当前区域的名字,例如:baidu.com.br/>   Value:有多部分组成
   1.当前区域的主DNS服务器的FQDN,也可以使用当前区域名字;
   2.当前区域管理员的邮箱地址;但地址中不能使用“@”符号,一般用“.”替换
   3.主从服务协调属性的定义以及否定答案统一的TTL
   示例:
    magedu.com. 86400 IN SOA ns.magedu.com.
    nsadmin.magedu.com. (
        2018080808 ;序列号
        2H ;刷新时间
        10M ;重试时间
        1W ;过期时间
        1D ;否定答案的TTL值
     )
   其中5个主从服务协调属性所代表的的意思是:
    1)第一个:序列号serial表示该DNS数据库文件的新老程度,序列号越大表示数据越新,主要用于DNS主从同步的时候slave通过判断当前seral和master的seral新旧程度来决定是否进行数据同步,通常这里以时间的格式来书写,如:2018010101,每修改一次配置文件,该值加1
    2)第二个:更新频率refresh表示从服务器多长时间去向主服务器同步更新一次数据,更新的时候要先判断serial的值,注意:即使主服务器里面参数有变动,只要serial值每增大就不会更新
    3)第三个:失败重试时间retry表示由于某些因素导致从服务器无法连接主服务器时,再需要多久去尝试连接主服务器,通常这个值为refresh的一半,当重试成功后,会恢复到refresh的时间进行下一次连接同步;
    4)第四个:失效时间expire表示如果从服务器连接主服务器一直失败,持续连接的时间达到这个值时,从服务器将不再尝试连接主服务器,也不再更新对应的zone了;
    5)第五个:快取时间minumum TTL表示如果该数据库文件中每个RR记录都没有写到TTL的话,那么就以这个SOA的设定值为主。
注意:以上5个参数除了第一个序列号外其他四个的单位默认为秒,当然也可以指定单位如:D(天),M(分钟),H(小时),W(周)

   SOA一个区域有且仅能有一个SOA记录,必须位于解析库的第一条记录

  2.NS

    Name:当前区域的名字
    Value:当前区域某DNS服务器的名字,例如:ns.baidu.com.
    注意:一个区域的可以有多个NS记录
    例如:
    baidu.com. IN NS ns1.baidu.com.
    baidu.com. IN NS ns2.baidu.com.
    注意:当相邻的两个资源记录的name相同时,后续的name可以省略
    对NS记录而言,任何一个NS记录后面的服务器名字,都应该在后续有一个A记录

  3.MX

   Name:当前区域的名字
   Value:当前区域的某邮件服务器(SMTP服务器)的主机名
   注意:一个区域的MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小,优先级越高
    例如:
    baidu.com. IN MX 10 mx1.baidu.com.
          IN MX 20 mx2.baidu.com.
   注意:对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

  4.A

   Name:某主机的FQDN,例如:www.baidu.com.
   Value:主机名对应的IP地址
   例如:
    www.baidu.com. IN A 1.1.1.1
    www.baidu.com. IN A 1.1.1.2
    Mx1.baidu.com. IN A 1.1.1.3
    Mx2.baidu.com. IN A 1.1.1.4
   注意:
    *.baidu.com. IN A 1.1.1.4
    baidu.com. IN A 1.1.1.4
这是为了避免用户写错名称时给错误答案,可通过泛域名解析进行解析某特定地址

  5.AAAA

   Name:FQDN
   Value:IPv6地址
   格式可以参照A记录,只是A记录后面是IPv4地址,AAAA记录是IPv6地址

  6.PTR

   Name :IP,有特定的格式,把IP倒过来写,1.2.3.4,要写作4.3.2.1;还有特定的后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
   Value:FQDN
    例如:
    4.3.2.1.in-addr.arpa. IN PTR www.baidu.com.
   简写成:
     4 IN PTR www.baidu.com.
   注意:网络地址及后缀可省略;主机地址依然要反着写。

  7.CNAME

   Name:别名的FQDN,就好像一个人可以有好几个外号,别名即外号
   Value:真正的域名FQDN,别名是外号,这里就是×××上的名字,
   例如:web.baidu.com. IN CNAME www.baidu.com.

六、安装部署DNS服务器

 1、安装DNS服务器软件

  DNS服务软件包名字为bind,还有其他相关的软件包,有bind-libs(与bind相关的库文件)、bind-utils(客户端相关命令文件)、bind-chroot(bind主目录禁锢程序,就是为了防止用户在登录DNS服务器的时候进入其他的文件中,更改我们不想被更改的一些内容,将bind程序禁锢在家目录当中,centos 6之后的系统已经默认禁锢在/var/named目录下了);如果你的操作系统是centos 5 及之前,那么还有一个软件包叫做caching-nameserver,这个软件包的主要作用是未bind提供简单的配置文件末班,centos 5之后的系统这个软件的功能都被包含在了bind主程序软件包当中。因此我们可以直接使用yum来安装bind软件,其中会自动安装其他几个软件包,这一步就不做演示了
   而且这个DNS服务的包名是bind,但是服务名却是named,而且在安装后,会自动创建一个named的用户,在运行次服务的时候并不是哪个用户运行的命令就是哪个用户的进程,而是使用named的身份运行
DNS服务器

 2、相关配置文件

  DNS的配置文件有很多,其中:
    /etc/named.conf , /etc/named.rfc1912.zone:为DNS的主配置文件;
    /var/named/:centos 6版本,该目录为DNS数据库文件存放目录,每一个域文件都存放在这里;
    /etc/rc.d/init.d/named:为DNS服务的服务脚本
   /var/named/named.ca:存储着全13台根服务器的地址
   需要注意的是一台服务器可同时为多个区域提供解析,并且该DNS服务器上必须要有跟区域文件/var/named/named.ca,同时还应该有两个实现localhost和本地回环地址的解析库(如果包含IPv6,应该更多);另外还有一个叫做rndc(remote name domain controller)的服务来提供辅助性的管理功能(该服务监听在TCP的953端口,默认与bind安装在同一主机上,且只能通过127.0.0.1来连接DNS服务的named进程)

  1.先查看/etc/named.conf文件,

DNS服务器
   Listen-on port 53 {127.0.0.1;}; :监听的端口,即那些主机可以进行访问解析,127.0.0.1表示仅监视本机的这一个IP的53号端口,any表示所有,localhost表示本机的所有IP
   Listen-on-v6 port 53 { : : 1; }; :IPv6地址
   Directory “/var/named” :DNS数据库的路径保存在这个目录下
   Allow-query {localhost;};: 允许那些主机请求查询
   Recursion yes:将自己视为客户端的一种查询方式,就是当客户端查询某一域名的IP时,我们本地没有这个域名记录对应的IP,就将自己视为客户端向根服务器询问,然后走迭代查询,最后将结果反馈给客户端
   Forward only:只转发请求,不做解析,此时DNS服务器是一个缓冲服务器
   Forwardders {114.114.114.114;}; :针对forward only设置的转交给哪个上层服务器进行解析,这里可以列出多个,每行一个以分号结尾
   include "/etc/named.rfc1912.zones"; 和include "/etc/named.root.key"; :include后面的文件就是/etc/named.conf文件的补充,文件里面都是其他域的记录,格式如下图:
DNS服务器
   其中zone(zone就是每个域名所对应的记录)的格式:
    Zone ”zone_name” IN{
       Type {master|slave|hint|forward};
       File “zone_name.zone”
    };
    Zone_name: 要解析的域名,正解时就是域名本身,如:baidu.com;反解时有固定的格式:IP网段反向.in-addr.arpa
    ip网段反向是指:如域名所对应的主机IP的网段为192.168.99.0/24网络,那么久需要将该网络的网络ID部分倒着写,网络ID部分为192.168.99,倒过来写就应该是99.168.192
    Type: 该zone的类型,主要的类型有:针对根的hint;主DNS的master;从DNSslave;专门转发类型forward,除了根外默认为master
   File:该zone的文件名称,后缀也可以不是.zone,这个文件保存在/var/named目录下

  2.查看/var/named下的文件

    /var/named目录下的文件都是每个域的解析文件,每个文件中都是IP与域名的相对应的关系,且文件中的第一条记录必须是SOA记录,文件名都与/var/named或这个文件中定义的补充文件中的zone文件名一一对应,如下图:
DNS服务器

  3./etc/rc.d/init.d目录中存放着为DNS服务的脚本

DNS服务器

  4./var/named/named.ca因为当DNS服务器本地并没客户端要查找的域名与IP的对应关系的主机时,DNS就会从Internet走迭代的方式从根服务器一步步查找,然后才将结果反馈给客户端,所以DNS就必须知道全球13台根服务器的地址,然后才能进行迭代查询,所以在安装DNS服务的时候就已经集成根服务器的地址,根服务器的区域解析记录就保存在/var/named/named.ca文件中,这里面有13台根服务器的IPv4的地址,有IPv6的地址

DNS服务器
DNS服务器
DNS服务器
DNS服务器

  5. /etc/resolv.conf这个文件中保存的是主机默认的DNS服务器的IP,就是把这个主机当做是客户端,当这个客户端需要域名解析时默认是寻找哪个DNS服务器来解析

DNS服务器

猜你喜欢

转载自blog.51cto.com/13570214/2106557