一、理论说明
DNS(Domain NameService)域名解析协议,非常重要的一个网络应用协议,通过它你可以通过域名访问某网站而不是通过输入32位的IP地址了。
1969年底由拉里・罗伯茨(互联网之父)主导到ARPANET网投入运行,那一年UNIX诞生,由于早期的阿帕网兼容性不好,许多硬件厂商的接口不兼容导致,所以接入网络的计算机数量有限,之后PARC的以太网以及TCP/IP协议的出现,促使互联网发展,70/80年代的UNIX非常火爆,1985年TCP/IP协议成为UNIX的一部分,此后一发不可收拾,90年阿帕网退役。
因为早期接入网络的计算机数量有限,人们为了解决“大脑”不容易记住IP地址的问题,采用在本地建一个文件,用于指明计算机名和IP对应关系,后来越来越多的客户端接入网络,必须有性能更加出色的计算机充当这个角色,以缓解客户端的压力,一点点DNS应运而生。
DNS工作在TCP和UDP的53端口,早期的互联网因为网络的问题主要是基于TCP的53端口,而现在互联网发展基本完善,主要工作在无连接的UDP的53端口,为了加快速率。
DNS采用了树状结构,其特性是确保每个域名的唯一性和易于查找的特点,有些类似Linux文件系统的结构,LSB规定了FHS也就是规定了/目录下面的子目录的具体含义,而DNS树状结构的根是.(点),之后是顶级域名(net、org、com、mil、gov等)每个顶级域名都有其特定含义。比如,你要注册的域名是公司类,那就应该在com.这个区域内注册,因为它就是公司类的集合,如图1。
图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.域名中会有一台主机(NS,Name Server,也就是DNS服务器),这台主机的解析库里面有www这台主机的IP,之后负责把www这台主机解析出去。
反向解析:是和正向解析完全不同的解析库,两种模式。
解析库是由众多资源记录组成的,也就是,你可以通过组合这些资源记录,让你的DNS服务器完成不同的功能(就好像公交的查询台,这就是你的解析库,你打电话我要去哪儿哪儿哪儿,请问坐哪路车,“正向组合的资源记录”会告诉你某某路公交即可,你也可以问他,某某路公交是否去哪儿哪儿哪儿,ok,“反向组合的资源记录”会告诉你信息)。
资源记录类型:
(1)、SOA:Start ofAuthority,第一条资源记录必须是SOA,标志这个区域解析库为哪个区域所用,由谁负责的。
(2)、A:InternetAddress,就是代表IPv4的地址
(3)、AAAA:IPv6地址
(4)、PTR:PoinTeR,代表FQDN
(5)、NS:Name Server,专用于标明当前zone的DNS服务器
(6)、CNAME:CanonicalName,别名记录
(7)、MX:MaileXchanger,邮件交换器,标明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:
name:FQDN
value:IP地址
注意:有NS和MX必须有A。
MX:
name:当前区域的名字
value:当前区域某邮件服务器的主机名,一个zone内,MX记录有多个,是通过每个记录前的优先级决定顺序的(0-99),数字越小越优先;
PTR:
name:IP,有特定的格式,把IP反过来写,可以只是主机地址,比如我的实验环境是172.16.249.178/16,zone是16.172.in-addr.arpa.,name是178.249,下面有实验的截图,可以仔细体会一下。
value:FQDN
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、 搭建缓存DNS,ip:172.16.249.178
直接在named主配置文件中/etc/named.conf中修改就可以了,图2就是实验截图,图3是效果图。
图2
图3
2、 搭建主DNS正向解析的服务器,ip:172.16.249.178
(1)、配置/etc/named.rfc1912.zones,加入区域信息,我的是wbb.com.如图4。
(2)、vim /var/named/wbb.com.zone,这个是资源库,定义资源库,如图5。
(3)、更改wbb.com.zone的属性,chmod为640,grp为named。
(4)、named-checkconf测试/etc/named.rfc1912.zones语法。
(5)、named-checkzone “wbb.com.” /var/named/wbb.com.zone测试资源库配置是否符合语法要求。
图4
图5
3、 搭建从DNS服务器的正向解析,ip:172.16.249.36
注意:一定已经声明了两个DNS服务器。
在从服务器上面,安装相同的程序包,首先配置为缓存DNS服务器,之后配置/etc/named.rfc1912.zone,之后使用rndc reload重载配置文件即可。以下是截图。
图6-从DNS配置
图7-从DNS服务器同步
4、 搭建主DNS反向解析,ip:172.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的属性,chmod为640,grp为named。
(4)、named-checkconf测试/etc/named.rfc1912.zones语法。
(5)、named-checkzone“16.172.in-addr.arpa.” /var/named/16.172.in-addr.arpa.zone测试资源库配置是否符合语法要求。效果如图10
图8
图9
图10
5、 搭建从DNS反向解析,ip:172.16.249.36
和搭建从DNS正向解析类似,这里只提供截图,图11是从DNS反向解析区域声明,图12是同步数据。
图11
图12
6、 更改主DNS正向资源记录,查看同步测试:
(1)、更改/var/named/wbb.com.zone,不要忘记把SOA中的序列号增加,如图13。
(2)、rndc reload,之后从DNS会同步信息,如图14。
图13
图14
注意:rndc是管理named服务的命令,可以自己man一下。