讲清楚,说明白!DNS域名解析服务实现原理之二--智能解析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了讲清楚,说明白!DNS域名解析服务实现原理之二--智能解析相关的知识,希望对你有一定的参考价值。
目录:(一)DNS介绍
(二)DNS服务器部署
(三)DNS域名解析
(四)DNS容灾
(五)DNS智能解析
(一)DNS介绍
(1.1)DNS是一个域名系统,在互联网环境中为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。类似于生活中的114服务,可以通过人名找到电话号码,也可以通过电话号码找到人名(生活中没有那么准确的原因是人名有重名,而域名时全世界唯一的)。其中DNS协议运行在UDP协议之上,使用端口号53。
(1.2)在我们的互联网络都有一个IP地址,我们上网的时候是需要IP地址才可以正常的上网的,目前IP地址主要分2个版本:一个版本是IPv4,拥有地址是2的32次方个;另一个版本是IPv6,拥有的地址是2的128次方个。
(1.3)DNS命名:域名分国际域名和国内域名两种,对于国际域名而言,其命名规则是:域名可以由(a-z、A-Z大小写等价)26个英文字母、数字(0-9)以及连接符“-”组成,但是域名的首位必须是字母或数字。对于域名的长度也有一定的限制:国际通用顶级域名长度不得超过26个字符,中国国家顶级域名长度不得超过20个字符。域名管理机构:Internet域名与地址管理机构(ICANN)是为承担域名系统管理,IP地址分配,协议参数配置,以及主服务器系统管理等职能而设立的非盈利机构。现由IANA和其他实体与美国政府约定进行管理。国内域名的DNS必须在CNNIC注册。我们在国内注册域名的时候主要可以到万网和新网进行域名注册。例如我们的服务器的主机名为biying.blog.51cto.com,此时我们只需要购买二级域名51cto即可,后面的三级域名blog,四级域名biying我们自己设置即可。
(二)DNS服务器部署
(2.1)DNS安装
(2.1.1)我们使用bind软件包来安装DNS服务,在安装的时候需要安装两个软件包bind和bind-chroot,其中bind-chroot是DNS的安全包,改变默认DNS根目录,将DNS运行在监牢模式,防止系统因为DNS服务的漏洞被attack后,能够在系统中提权,看到服务器整个目录的信息,而运行在监牢模式后,即使出现了attack也仍然能够将范围锁死在DNS服务之中。
# yum install bind bind-chroot -y---我们安装DNS服务,并使用监牢模式
(2.1.2)注意:
如果不使用chroot模式启动DNS,则先将服务启动起来,然后直接设置开机自动启动。
# systemctl start named---将named服务启动起来
# systemctl enabled named---设置开机自动启动
# systemctl status named---查看named服务是否是正常启动
(2.1.3)我们使用chroot模式启动DNS后,需要将/etc/named.conf配置文件拷贝到/var/named/chroot/etc/目录下,然后修改/var/named/chroot/etc/目录下的named.conf的配置文件的属组为named,同时也要将/var/named/目录下的所有named开头的文件拷贝到/var/named/chroot/var/named/目录下并且保持权限不变,然后我们设置开机自动启动。
# systemctl status named-chroot---查询监牢模式下DNS服务的运行是否是正常的
# cp -p /etc/named.conf /var/named/chroot/etc/---使用-p参数表示保持权限不变,并将named.conf文件拷贝到/var/named/chroot/etc/目录下
# cp -p /var/named/named.* /var/named/chroot/var/named/---使用-p参数表示保持权限不变,并将/var/named/目录下的所有named开头的文件拷贝到/var/named/chroot/var/named/目录下
# systemctl enable named-chroot---设置开机自动启动
# systemctl disable named-chroot---取消开机自动启动
(2.1.4)注意:
默认情况下,如果不安装named-chroot这个包,配置文件的路径如下:配置文件在/etc/named.conf,区域数据库文件在/var/named/目录中。由于我们安装了named-chroot这个用于改变默认DNS配置文件的路径的包,所以相对应的配置文件的路径也发生了变化。变化如下:配置文件在/var/named/chroot/etc/named.conf,区域数据库文件在/var/named/chroot/var/named/目录中。
(2.2)DNS配置文件详解
(2.2.1)我们首先来看一下我们主配置文件,我们编辑named.conf文件,我们指定listen-on的端口是53,IP地址为192.168.26.101,然后不需要使用IPv6的监听,由于我们不需要使用rndc命令,所以我们可以注释“dump-file”、“statistics-file”、“memstatistics-file”三行的信息。
# vim /var/named/chroot/etc/named.conf
(2.2.2)然后我们在named.conf文件中需要对allow-query参数指定值为any表明对所有人都提供DNS服务(图2-6),由于我们并不是权威服务器,所以我们还需要开启DNS服务器的递归查询,设置recursion的值为yes,然后可以把相关的DNS安全的部分进行注释。
(2.2.3)zone表示的是进行解析,例如我们填写baidu.com表示的是对baidu.com域做解析了,而“.”表示的是对根域做解析,include表示的是包含的文件信息。
(2.3)DNS启动
接着我们在系统中首先对配置文件是否完整进行测试,然后将named-chroot服务启动起来,此时我们发现53端口且为UDP的named服务已经正常的运行起来了。
# named-checkconf /var/named/chroot/etc/named.conf---对配置文件是否完整进行测试
# systemctl start named-chroot---将named-chroot服务启动一下
# lsof -i :53---此时我们发现53端口且为UDP的named服务已经正常的运行起来了
(2.4)接着我们查看区域数据库文件,我们可以进入到/var/named/chroot/var/named/目录下,然后我们查看named.ca配置文件,named.ca配置文件中主要记录的是根的区域数据库文件,里面记录了当前根服务器的所有信息,目前一共有13台根服务器。
(2.5)在/var/named/chroot/var/named/目录下named.empty配置文件和named.localhost配置文件中的信息是一样的,都记录的是正向解析的模板文件。其中TTL表示的是缓存时间,1D表示的1天,第二行第1个“@”表示的是域名为哪个域名做解析,“IN”表示的解释说明,“SOA”表示起始授权域,“rname.invalid.”表示的是管理员的邮箱,第二行第2个“@”表示的是哪个DNS为它做解析;“serial”表示的是序列号,每次更新该文件系列号都应该变大,“refresh”表示刷新时间,即规定从域名服务器多长时间查询一个主服务器,以保证从服务器的数据是最新的,“retry”重试时间,即当从服务器试图在主服务器上查询更新时,而连接失败了,则这个值规定了从服务多长时间后再试,“expire”过期时间,从服务器在向主服务更新失败后多长时间后清除对应的记录,“minimum”表示这个数据用来规定缓冲服务器不能与主服务联系上后多长时间清除相应的记录。“NS”表示的是域名服务器,“A”表示的是IPv4,“AAAA”表示的是IPv6
(2.6)在/var/named/chroot/var/named/目录下named.loopback配置文件记录都是反向解析的模板文件。
(三)DNS域名解析
(3.1)正向解析
(3.1.1)要求:对ayitula.com域名做解析,解析要求如下:www解析为A记录,IP地址为192.168.26.88,news做别名解析CNAME解析为www。其中在正向解析主配置文件/var/named/chroot/etc/named.conf中的类型可以有:master、hint、slave、forward,此处我们配置的类型为master,指定区域为ayitula.com.zone(图2-14)。我们进入到/var/named/chroot/var/named/目录中,将named.localhost模板文件拷贝命名为ayitula.com.zone,并且修改ayitula.com.zone文件的属组为named(图2-15),区域数据库文件ayitula.com.zone中NS表示域名,A表示的域名解析为IP地址,PTR表示IP地址解析为域名,MX表示为邮件,CNAME表示为别名(图2-16)。
# cd /var/named/chroot/var/named/---进入到/var/named/chroot/var/named/目录中
# cp named.localhost ayitula.com.zone---将named.localhost模板文件拷贝到
# chgrp named ayitula.com.zone---修改ayitula.com.zone文件的属组为named
(3.1.2)我们进入到/var/named/chroot/var/named/目录中,编辑ayitula.com.zone配置文件完成后,接着检测主配置文件是否配置正确并检测区域配置文件的配置是否正确,最后将DNS服务重启一下,此时我们的正向解析已经配置好了。
# named-checkconf /var/named/chroot/etc/named.conf---检测主配置文件是否配置正确
# named-checkzone ayitula.com /var/named/chroot/var/named/ayitula.com.zone---检测区域配置文件的配置是否正确
# systemctl restart named-chroot---将DNS服务重启一下
(3.2)域名解析命令
(3.2.1)我们在vms001主机配置完毕后,可以使用vms002主机进行测试,我们可以设置vms002主机的/etc/resolv.conf配置文件中的DNS服务器地址指向vms001主机。
(3.2.2)一般我们在进行域名解析命令的时候是可以使用如下的三个命令的,其中host采用非交互式解析,nslookup可以采用交互或非交互式解析,dig显示详细的解析流程。
(3.2.3)首先我们使用host命令,我们可以解析出www.ayitula.com 的IP地址为192.168.26.88,同时发现www主机的别名为news
(3.2.4)接着我们使用nslookup命令,可以查询出主机名对应的IP地址信息。也可以使用交互式命令进行查询,如果我们需要使用交互式的方式修改DNS服务器的地址可以按照图2-21
# nslookup www.ayitula.com
(3.2.5)最后我们也可以使用dig命令进行域名查询,我发使用dig命令查询的信息基本和/var/named/chroot/var/named/目录下的ayitula.com.zone的区域数据库配置文件中的信息是一致的。
# dig www.ayitula.com
(3.3)反向解析
(3.3.1)要求:对www.ayitula.com 做反向解析,其对应的IP地址为192.168.26.88。我们首先到/var/named/chroot/etc/目录下编辑named.conf配置文件,我们添加zone区域的信息。
# cd /var/named/chroot/var/named/---进入/var/named/chroot/var/named/目录
# vim ../../etc/named.conf---编辑/var/named/chroot/etc/named.conf配置文件
(3.3.2)我们将named.loopback模板文件拷贝命名为192.168.26.arpa,然后修改192.168.26.arpa配置文件信息的属组为named,接着编辑192.168.26.arpa配置文件(图2-26),然后设置反向解析的配置文件指明192.168.26.88对应的域名地址为“www.ayitula.com.”
(3.3.3)我们在vms001系统中将主配置文件和区域配置文件进行验证后发现文件都是完整的,我们将DNS服务重启一下后,此时我们在vms002主机上进行测试发现由IP地址解析到正确的主机名www.ayitula.com 了。
# named-checkconf /var/named/chroot/etc/named.conf---验证named.conf主配置文件是否配置正确
# named-checkzone 26.168.192.in-addr.arpa /var/named/chroot/var/named/192.168.26.arpa---验证区域配置文件192.168.26.arpa是否配置正确
# nslookup 192.168.26.88---反向解析,由IP地址解析域名
(四)DNS容灾
(4.1)DNS单点故障:我们如果只有一台DNS服务器,那么当DNS服务器故障的时候,可能会造成业务的中断。我们常规的做法是设置两台DNS服务器,一台主DNS和一台辅助DNS,保证两台DNS的数据同步,以此实现DNS冗余。我们需要知道的是主配置文件不会同步,同步的是区域数据库文件。
(4.2)首先我们使用vms001主机作为主DNS(master),使用vms002主机作为辅助DNS(slave),我们需要将系统中的防火墙和SELinux关闭,然后设置vms001主机的DNS指向自己192.168.26.101,同时设置vms002主机的DNS指向自己192.168.26.102。
# getenforce---获取当前SELinux的状态
# systemctl stop firewalld---将防火墙停止
# systemctl status firewalld---查看防火墙的状态
(4.3)接着我们在vms002主机上将bind和bind-chroot软件安装起来(图4-4),并将vms001主机中的/var/named/chroot/etc/named.conf文件拷贝到vms002主机上,并将vms002主机的named.conf文件的属组修改为named(图4-5)。
# yum install bind bind-chroot -y---将bind和bind-chroot软件安装起来
# scp root@192.168.26.101:/var/named/chroot/etc/named.conf /var/named/chroot/etc/---将vms001主机中的/var/named/chroot/etc/named.conf文件拷贝到vms002主机上
# cd /var/named/chroot/etc/---进入到/var/named/chroot/etc/目录中
# chgrp named named.conf---修改vms002主机的named.conf文件的属组为named
(4.4)接着我们在vms002主机中进入到/var/named/chroot/etc/named.conf配置文件进行设置,保持从节点slave向master服务器要数据,然后保存到本地file位置(图4-6)。配置完毕后将DNS服务重启一下,此时我们发现在/var/named/chroot/var/named/配置文件便可以看到已经产生了自动生成的配置文件了(图4-7)。
(4.5)此时我们在vms002主机上测试发现,vms002主机可以使用使用自己作为DNS服务器正确的解析出www.ayitula.com 的IP地址信息,同时vms002主机也可以正常的进行反向解析的操作。
(4.6)接着我们在vms001主机上对/var/named/chroot/var/named/目录下的ayitula.com.zone配置文件进行修改(图4-9)。此时由于只是修改了区域数据库文件,我们不需要重启DNS服务,我们直接使用“# rndc reload”命令直接刷新区域数据库文件即可。此时我们发现vms001本地系统已经可以正常的解析sports.ayitula.com域名的IP地址了(图4-10)。
(4.7)接着我们在vms002主机上将区域数据库重载一下,并将DNS服务重启,然后此时我们发现已经可以正常的解析sports.ayitula.com主机名为192.168.26.99了。
# rndc reload---在vms002主机上重载区域数据库文件
# systemctl restart named-chroot---将DNS服务重新启动一下
# nslookup sports.ayitula.com---在vms002主机查询sports.ayitula.com文件解析是否生效
(4.8)注意:我们在辅助DNS服务器上查询到当前系统vms002主机的部分文件,例如在/var/named/chroot/var/named/目录下,会发现是加密的状态无法查看,此时我们可以在/var/named/chroot/etc/named.conf配置文件中添加信息表示对master传输过来的文件不加密以文本的方式显示。然后将DNS服务重启一下即可。
# systemctl restart named-chroot
(五)DNS智能解析
(5.1)在我们访问WEB的时候,发现有的网站打开的速度非常快,有的网站打开的非常慢,这是为什么呢?元婴就是很多公司为了提升用户体验,自己的网站使用了CDN内容加速服务,让你直接在你的本地城市的服务器上拿数据并展示给你看。什么是CDN我们暂且理解为本地缓存服务器就好,那么你是怎么准确知道你本地的缓存服务器的呢?因为很多CDN公司的DNS使用了智能解析服务,根据你的源IP判断你属于哪个城市,然后再把本地的缓存服务器解析给你,你就会直接去找该服务器拿数据了。
(5.2)智能解析原理:在DNS中植入全世界的IP库以及IP对应的地域,当用户来请求解析时,DNS会根据其源IP来定位它属于哪个区域,然后去找这个区域的view视图查询对应的域名的区域数据库文件做解析。从而使得不同地域的用户解析不同。
(5.3)示例:现在我们部署一台DNS智能解析服务器,对ayitula.com域名做智能解析,上海的用户解析IP为1.1.1.1,北京的用户解析IP为2.2.2.2,其他用户解析为3.3.3.3。我们首先在vms001主机named.conf配置文件中进行编辑,我们设置acl,其中北京域设置为192.168.26.101,我们设置acl,其中上海域设置为1.2.2.2,然后再配置关于beijing、shanghai、other三处的视图信息(图4-13和图4-14)。同时我们在/var/named/chroot/var/named/目录下定义相关的区域数据库文件,并修改文件的属组为named。
# vim /var/named/chroot/etc/named.conf
# cd /var/named/chroot/var/named/
# cp ayitula.com.zone ayitula.com.zone.bj
# cp ayitula.com.zone ayitula.com.zone.sh
# cp ayitula.com.zone ayitula.com.zone.ot
# chgrp named ayitula.com.zone.*---修改定义的三个区域数据库的文件的属组为named
(5.4)我们在/var/named/chroot/var/named/目录下的ayitula.com.zone.bj、ayitula.com.zone.sh、ayitula.com.zone.ot配置文件中设置好对应的IP地址信息。
# systemctl restart named-chroot---编辑完配置文件后我们将DNS服务重启一下
(5.5)此时我们vms001主机的IP地址是192.168.26.101,且在named.conf配置文件中IP地址属于acl bj域,所以会通过file映射到ayitula.com.zone.bj区域配置文件中,所以此时解析的IP地址为1.1.1.1
# nslookup www.ayitula.com
(5.6)接着我们在/var/named/chroot/etc/named.conf配置文件中,在acl sh中设置IP地址为192.168.26.101,此时IP地址属于acl sh域,所以会通过file映射到ayitula.com.zone.sh区域配置文件中,然后我们将DNS服务重启一下,此时我们解析www.ayitula.com 的时候显示的IP地址为2.2.2.2
(5.7)最后我们在/var/named/chroot/etc/named.conf配置文件中,设置本机IP地址不属于任何的acl域了,所以会通过file映射到ayitula.com.zone.ot区域配置文件中。然后我们将DNS服务重启一下,我们解析www.ayitula.com 发现IP地址为3.3.3.3。这样我们便实现了根据源IP地址,判定你属于哪个地域,然后让本地服务器为你解析,这样你在本地拿数据就可以了,不需要上公网。
# systemctl restart named-chroot
# nslookup www.ayitula.com
—————— 本文至此结束,感谢阅读 ——————
以上是关于讲清楚,说明白!DNS域名解析服务实现原理之二--智能解析的主要内容,如果未能解决你的问题,请参考以下文章