DNS域名解析服务
DNS对于大家都不陌生,因为只是我们访问互联网必不可少的一个东西,DNS的主要作用就是啊将主机名解析成IP地址的过程。在计算机的网络中是通过IP地址来进行主机间的互 4相通信,但即使是32位的ipv4地址都很难记忆,更何况ipv6地址,就好像我们都知道www.baidu.com,但是123.125.115.110服务器的ip就不是可以记忆的,我们需要一种协议能够完成从域名到IP地址之间的转换,这就是DNS。
DNS是一种分布式、分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的ip地址就可以通过主机名的形式访问互联网。DNS同根文件系统一样都是倒状的树状形状,最顶层是根服务器,主要负责顶级域名的管理,顶级域名就像是.com,.cn,.net,.edu等等,在下面的顶级域名服务器则负责所对应的二级域名。如.baidu.com,.qq.com等,接下来二级域名服务器负责对应的主机名称解析或者其三级域名解析。三级域名如,.game.qq.com,www.qq.com等,以此类推,其结构如下图:
从上图我们可以看出每一级只负责对应下级的域的管理,其中根节点是有分布在世界各地的13台服务器组成(10台在美国,荷兰,日本,瑞典各一台),这13台服务器中有一台主根服务器在美国,其余12台均为辅根服务器。
我们看下DNS解析主机IP的流程。例如我们查找www.baidu.com这个域名的ip地址:
DNS解析主机IP的流程
1、本地主机查询本地host文件查看是否有www.baidu.com主机与ip的对应关系,若有,则直接给与使用;若无则进行第二步;
2、 此时本机将向指定的dns server(假设为NS1)发起查询请求。NS1在收到来自客户端的请求后,会及时的去查询NS1上的缓存记录,查看是否有baidu.com的解析记录,若有则直接反馈给客户端,若没有,则进行第三步;
3、此时NS1会主动向根域名服务器发起查询WWW.baidu.com的请求。但是根服务器只记录了.com的相关信息,此时会告知NS1:我这没有WWW.baidu.com的记录,你可以去向.com去查询,并告知NS1.com的地址;
4、于是NS1就根据根服务器告知的.com地址去向发起查询www.baidu,com的请求,但是.com只记录了baidu.com的记录,没有www的主机记录,就告知NS1服务器:我没有www.baidu.com的具体解析记录,但我知道baidu.com的地址,你可以去找他查询,并告知地址
5、紧接着NS1就向baidu.com发起www.baidu.com的查询请求,于是baidu.com就去查询本地的记录,找到www主机对应IP地址123.125.115.110,于是就将www.baidu.co的IP地址反馈给NS1;
6、NS1在收到具体结果后,会先将结果储存在本地的DNS缓存中,以方便如有下次相同的解析请求能够快速的响应,之后将结果直接反馈给客户端,完成解析。
我可以看出在www.baidu.com解析过程中有这么两个阶段:1、客户端将解析请求发送给NS1之后只需等待结果就行了;2、NS1在接到客户端的请求后,全面负责查找www.baidu.com,查找的每个过程都是NS1去请求的。这两个过程的查找方式是明显不同的,前者我们称之为递归查询,后者为迭代查询。
DNS的基本信息
1.dns是网络服务需要udp 的53端口与tcp的53号端口
2.正解从主机名到ip的过程,反解是从ip到域名的过程
3.在linux上安装DNS的软件包为bind,/etc/named.conf,与/etc/named.rfc1912.zones为DNS的主要配置文件;/var/named/为DNS的数据库文件存放目录,每一个域文件都存放在这里
4.每个域名所对应的解析记录我们称之为zone(域),里面有很多资源记录组成,这些记录有
SOA:开始验证的缩写
NS:DNS服务器的缩写,后面记录的数据是DNS服务器的意思
A:地址的缩写,后面记录的是对应的IPv4地址
AAAA:对应ipv6地址
PTR:就是指向(PoinTeR)的缩写,后面记录的数据就是反解到的主机名
CNAM:主机名,一个主机名可以有多个别名,但IP地址是一样的
MX:邮件服务器地址
[root@centos6 etc]# yum -y install named
[root@centos6 named]# cd /var/named/
[root@centos6 named]# ls
angge.com.zone dynamic named.empty named.loopback
data named.ca named.localhost slaves
[root@centos6 named]# vim angge.com.zone
$TTL 1D #在该文件中所有的空格与@都代表域名如文件名为angge.com.zone则代表angge.com.所以域名的结束必须要以.结束
@ IN SOA angge.com. asdfsadf. (
0 ; serial #序列号,表示该DNS数据库文件的新旧程度,序列号越大表示数据越清晰,主要用于DNS主从同步是判断是否进行数据同步
1D ; refresh #跟新频率,表示服务器从主服务器多长时间去向主服务器同步更新一次数据。注意:即使主服务器内有参数变动,只要serial没有变大就不更新
1H ; retry #失败重试时间,表示由于某些因素导致从服务器无法连接主服务器时,在需要多久去尝试下一次连接同步;
1W ; expire #失效时间,表示如果从服务器与主服务器一直连接失败,持续连接时间到这个值时,从服务器将不再继续尝试连接主服务器,不在更新对应的文件
3H ) ; minimum #快取时间,表示如果该数据库文件每个RR记录都没有写到TTL的话那么就以这个SOA设定值为主
NS ns1.angge.com. #每一条NS记录后面都应接一个A记录指向自己。我们称之为胶水记录或粘性记录
ns1.angge.com. A 192.168.75.6
etc A 192.168.75.7
www A 2.2.2.2
域名服务器的类型
1, 主域名服务器
primary master server 是一个domain 信息的最根本的来源。它是所有辅域名服务器进行域传输的源。主域名服务器是从本地硬盘文件中读取域的数据的。
2, 辅域名服务器
就是slave server,或叫作secondary server。次级服务器使用一个叫做域转输的复制过程,调入其它服务器中域的内容。通常情况下,数据是直接从主服务器上传输过来的,但也可能是从本地磁盘上的cache 中读到的。辅域名服务器可以提供必需的冗余服务。所有的辅域名服务器都应该写在这个域的NS 记录中。
3, 缓存服务器(caching only server)
一个DNS服务器可以同时作为多个域的主域名服务器和辅助域名服务器,也可以只作为主,或只作为辅,或者做任何域的授权服务器而只使用自己的cache来提供查询解析。不论是主或辅都是这个域的授权服务器。所有的服务器都会将数据保存在cache中,直到针对这些数据的TTL值过期。
4, 转发服务器(forwarding server)
一台缓存名服务器本身不能进行完全的递归查询。相反,它能从缓存向其它的缓存服务器转发一部分或是所有不能满足的查询,一般被称作转发服务器。可能会有一个或多个转发服务器,它们会按照顺序进行请求,直到全部穷尽或者请求得到回答为止。转发服务器一般用于用户不希望站点内的服务器直接和外部服务器通讯的情况下。一个特定的情形是许多DNS 服务器和一个网络防火墙。服务器不能透过防火墙传送信息,它就会转发给可以传送信息的服务器,那台服务器就会代表内部服务器询问因特网DNS 服务器。使用转发功能的另一个好处是中心服务器得到了所有用户都可以利用的更加完全的信息缓冲。
搭建一个简单的DNS服务器
[root@centos7 ~]# yum -y install bind #安装bind
[root@centos7 ~]# vim /etc/named.conf #这个文件比较长我只贴出需要更改的地方
listen-on port 53 { any; };
// listen-on-v6 port 53 { ::1; };
allow-query { any; };
……
include "/etc/named.angge.zone";
[root@centos7 ~]# cp -a /etc/named.rfc1912.zones /etc/named.angge.zone #在安装bind时会创建一个bind的系统用户DNS服务启动也是bind用户,我们必须要个这个文件权限,所以拷贝的时候要用cp -a 或cp -p
[root@centos7 ~]# vim /etc/named.angge.zone #同样这个文件也比较长,这是需要添加的地方
zone "angge.com" IN {
type master;
file "magedu.com.zone"; #正解
};
zone "75.168.192.in-addr.arpa" IN { #不要问我为什么这样写我也不知道,你就是要反着写
type master;
file "192.168.75.zone"; #反解
};
[root@centos7(nanyibo) ~]# named-checkconf #这个命令可以检查conf配置文件
[root@centos7 ~]# cd /var/named/
[root@centos7 named]# cp -p named.localhost angge.com.zone #道理前面一样用cp -p
[root@centos7 named]# vim angge.com.zone
$TTL 1D
@ IN SOA @ admin.angge.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
angge.com. NS ns1.angge.com.
ns1.angge.com. A 192.168.75.7
www A 3.3.3.3
[root@centos7 named]# cp -p angge.com.zone 192.168.75.zone
[root@centos7 named]# vim 192.168.75.zone
$TTL 1D
@ IN SOA angge.com. admin.angge.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS ns1.magedu.com.
7 PTR ns1.magedu.com.
6 PTR www.magedu.com.
[root@centos7 ~]# named-checkzone angge.com /var/named/angge.com.zone #检查zone文件
zone angge.com/IN: loaded serial 0
OK
[root@centos7 ~]# named-checkzone 75.168.192.in-addr.arpa /var/named/192.168.75.zone
zone 75.168.192.in-addr.arpa/IN: loaded serial 0
OK
[root@centos7 ~]# systemctl restart named #重启辅助
[root@centos6 ~]# dig -t ns magedu.com @192.168.153.7 #客户端dig测试
[root@centos6 ~]# dig www.magedu.com @192.168.153.7
[root@centos6 ~]# dig -x 192.168.153.7 @192.168.153.7
还会有一篇专门介绍dns各种服务的搭建