一、理论说明

DNS(Domain NameService)域名解析协议,非常重要的一个网络应用协议,通过它你可以通过域名访问某网站而不是通过输入32位的IP地址了。

1969年底由拉里·罗伯茨(互联网之父)主导到ARPANET×××入运行,那一年UNIX诞生,由于早期的阿帕网兼容性不好,许多硬件厂商的接口不兼容导致,所以接入网络的计算机数量有限,之后PARC的以太网以及TCP/IP协议的出现,促使互联网发展,70/80年代的UNIX非常火爆,1985TCP/IP协议成为UNIX的一部分,此后一发不可收拾,90年阿帕网退役。

因为早期接入网络的计算机数量有限,人们为了解决“大脑”不容易记住IP地址的问题,采用在本地建一个文件,用于指明计算机名和IP对应关系,后来越来越多的客户端接入网络,必须有性能更加出色的计算机充当这个角色,以缓解客户端的压力,一点点DNS应运而生。

DNS工作在TCPUDP53端口,早期的互联网因为网络的问题主要是基于TCP53端口,而现在互联网发展基本完善,主要工作在无连接的UDP53端口,为了加快速率。

DNS采用了树状结构,其特性是确保每个域名的唯一性和易于查找的特点,有些类似Linux文件系统的结构,LSB规定了FHS也就是规定了/目录下面的子目录的具体含义,而DNS树状结构的根是.(点),之后是顶级域名(netorgcommilgov等)每个顶级域名都有其特定含义。比如,你要注册的域名是公司类,那就应该在com.这个区域内注册,因为它就是公司类的集合,如图1

wKioL1U7JgTj2RItAAD-iVkhzZU971.jpg

1

DNS查询分为递归和迭代,客户端和DNS服务器之间的是递归查询(就是你想要什么告诉DNS服务器,DNS服务器就告诉你什么,不用客户端做什么),而DNS代替客户端去其它域名查询的过程就是迭代(DNS的查询是由根域名开始的,然后根返回一条线索,接着DNS服务器在访问那条线索,一遍一遍反反复复的向下查询,这就是迭代)。

注意:互联网上访问我们的主机名和自己本地的主机名没有任何关系,任何人从互联网上访问我们服务器名字是你已经在DNS资源库中定义好的,而不是你本身的主机名。除非是你自己定义的局域网中,在/etc/hosts中已经把对方的主机名和IP写入,此时那个主机名就代表那个IP,但是在互联网上不是。

根据以上的特点,就可以总结出我们DNS服务器的类型:

1、缓存DNS服务器。

缓存DNS服务器:只要你上网就会用到的最基础的DNS服务器,只是ISP提供给上网用户使用的,只能查找互联网上的主机名,然后缓存到本地给它的客户端请求使用,不提供为其区域内的主机进行正向或反向解析。它自身也没有域名。

如果是公司在使用,常常安装在防火墙上面,因为其只是缓存互联网上的主机名,仅此而已。

一次完整的查询请求:Client->/etc/hosts->DNSService->Local Cache ->DNS Server Cache->迭代查询

2、DNS服务器

DNS服务器:维护所负责解析的域内解析库的服务器。

DNS的解析类型:

         (1)、正向解析,FQDN(完全主机名)->IP地址

         (2)、反向解析,IP地址-> FQDN(完全主机名)

正向解析:如果你想要你的主机能够让互联网的其他同人看到,首先你需要注册一个合法的域名,有一个公有IP,比如www.wbb.com这个主机,首先其他同人通过自己的DNS服务器->根域名->com.域名->wbb.com.域名,在wbb.com.域名中会有一台主机(NSName Server,也就是DNS服务器),这台主机的解析库里面有www这台主机的IP,之后负责把www这台主机解析出去。

反向解析:是和正向解析完全不同的解析库,两种模式。

解析库是由众多资源记录组成的,也就是,你可以通过组合这些资源记录,让你的DNS服务器完成不同的功能(就好像公交的查询台,这就是你的解析库,你打电话我要去哪儿哪儿哪儿,请问坐哪路车,“正向组合的资源记录”会告诉你某某路公交即可,你也可以问他,某某路公交是否去哪儿哪儿哪儿,ok,“反向组合的资源记录”会告诉你信息)。

资源记录类型:

         (1)SOAStart ofAuthority,第一条资源记录必须是SOA,标志这个区域解析库为哪个区域所用,由谁负责的。

         (2)AInternetAddress,就是代表IPv4的地址

         (3)AAAAIPv6地址

         (4)PTRPoinTeR,代表FQDN

         (5)NSName Server,专用于标明当前zoneDNS服务器

         (6)CNAMECanonicalName,别名记录

         (7)MXMaileXchanger,邮件交换器,标明zone中的邮件服务器是哪个

资源记录定义格式:

         通用格式:name   [TTL] IN 资源记录类型  value

          注意:TTL可从全局继承;

                @可用于引用当前的区域名;

                相邻两个资源记录相同时,可省略;

                同一个名字对应多条记录,此时DNS会以轮询的方式响应;

              SOA

                   name:当前区域的名字,如“wbb.com.”

                   value:有多个部分组成。

(1)、当前区域的主DNS服务器的FQDN,也可以使用当前区域的区域名;

(2)、当前区域的管理员邮箱地址,@.号代替;

(3)、主从服务器协调属性的定义以及否定答案的TTL值,用括号括起来,如(

序列号:解析库版本号,主服务器解析库变化其序列号手动增加,以让从服务器更新,最多不超过10个数字;

刷新时间:从服务器向主服务器同步资源库的时间间隔;

重试时长:请求同步解析库失败是,再次尝试连接的时长;

过期时长:从服务器始终联系不到主服务器,多久之后从服务器停止服务。

否定答案的TTL值:缓存否定答案的时长;

                            

                   NS

                            name:当前区域的名字;

                            value:当前服务器的DNS服务器名称;

                            注意:可以有多条NS

                   A

                            nameFQDN

                            valueIP地址

                            注意:有NSMX必须有A

                   MX

                            name:当前区域的名字

                            value:当前区域某邮件服务器的主机名,一个zone内,MX记录有多个,是通过每个记录前的优先级决定顺序的(0-99),数字越小越优先;

                   PTR

                            name:IP,有特定的格式,把IP反过来写,可以只是主机地址,比如我的实验环境是172.16.249.178/16zone16.172.in-addr.arpa.name178.249,下面有实验的截图,可以仔细体会一下。

                            valueFQDN

                   CNAME

                            name:别名的FQDN

                            value:正式的FQDN

3、DNS服务器

DNS服务器:从主DNS服务器或其它从DNS服务器复制一份解析库。

4、转发器

二、私有DNS搭建

如果你真的想要搭建一个DNS服务器来把你的某个主机发布到网上,那就如同上文所说的,需要申请个区域名或直接申请域名让ISP给你发布,如果是区域名,想搭建本地DNS服务器的话,必须通过上级NS授权给这个zone中的NS才可以,你所要做的就是根据区域建库就可以了。

下面是搭建一个私有的DNS练习,正向区域是wbb.com.,反向区域是16.172.in-addr.arpa.,自己给自己授权了,用到的程序包是bind主包和bind-utils子包和bind-libs子包,之后的服务名称是named,环境是CentOS 6.6

1、  搭建缓存DNSip172.16.249.178

直接在named主配置文件中/etc/named.conf中修改就可以了,图2就是实验截图,图3是效果图。


wKiom1U7JhOAwTPwAAJHRlGd7uE577.jpg

2

wKiom1U7JdmybDylAAaBo4ADX2k430.jpg

3

2、  搭建主DNS正向解析的服务器,ip172.16.249.178

1)、配置/etc/named.rfc1912.zones,加入区域信息,我的是wbb.com.如图4

2)、vim /var/named/wbb.com.zone,这个是资源库,定义资源库,如图5

3)、更改wbb.com.zone的属性,chmod640grpnamed

4)、named-checkconf测试/etc/named.rfc1912.zones语法。

5)、named-checkzone “wbb.com.” /var/named/wbb.com.zone测试资源库配置是否符合语法要求。

wKioL1U7J7mjVMOwAAKqm87fbkE384.jpg

4

wKioL1U7J-_wjFjXAAObgbuDgAc318.jpg

5

3、  搭建从DNS服务器的正向解析,ip172.16.249.36

注意:一定已经声明了两个DNS服务器。

在从服务器上面,安装相同的程序包,首先配置为缓存DNS服务器,之后配置/etc/named.rfc1912.zone,之后使用rndc reload重载配置文件即可。以下是截图。

wKioL1U7KETyTqs8AACGFlgmDl4230.jpg

6-DNS配置

wKiom1U7JzXzvfFuAAUOXURIhX0915.jpg

7-DNS服务器同步

4、  搭建主DNS反向解析,ip172.16.249.178

1)、依然配置/etc/named.rfc1912.zone,定义区域,如图8

2)、配置/var/named/16.172.in-addr.arpa.zone,修改资源库,如图9

3)、更改16.172.in-addr.arpa.zone的属性,chmod640grpnamed

4)、named-checkconf测试/etc/named.rfc1912.zones语法。

5)、named-checkzone16.172.in-addr.arpa. /var/named/16.172.in-addr.arpa.zone测试资源库配置是否符合语法要求。效果如图10

wKioL1U7KN7ga98UAAAxW08oHIc679.jpg

8

wKioL1U7KQSj2-T4AAEDHGPI73M533.jpg

9

wKiom1U7J-ODcJHMAAKhcgTLl_Q769.jpg

10

5、  搭建从DNS反向解析,ip172.16.249.36

和搭建从DNS正向解析类似,这里只提供截图,图11是从DNS反向解析区域声明,图12是同步数据。

wKioL1U7KWSQoAneAAB8M0BCn2k092.jpg

11

wKiom1U7KDvA77_yAAUMGcWW5X0408.jpg

12

6、  更改主DNS正向资源记录,查看同步测试:

1)、更改/var/named/wbb.com.zone,不要忘记把SOA中的序列号增加,如图13

2)、rndc reload,之后从DNS会同步信息,如图14

wKioL1U7KcTg6uDJAAEiV0z_cag773.jpg

13

wKiom1U7KUKSRpYqAAQ4ft8nD-s681.jpg

14

注意:rndc是管理named服务的命令,可以自己man一下。