一、DNS介绍

    DNS称为Domain Name Service,用于将主机名转换成IP地址,因为在网络传输过程中是通IP地址来进行主机间的通讯,又因为IP地址不容易记忆,所以就有了DNS,DNS是一种分布式,分层次的主机名管理架构,通过配置DNS服务器地址,主机就能以主机名的方式来进行访问网络。DNS就像一个倒树型结构,每一级只管下一级的域名信息,这样就减轻了每一级DNS服务器的压力,而最顶级的域,就成为根域,就像我们熟知的网址www.baidu.com一样,其实该主机名的完整写法应该是www.baidu.com.,而最后的那一个.就是根服务器的域名,而全世界拥有13组根服务器,以百度的网址为例DNS的结构大致如下

绘图5.jpg

       

    当通过网页访问www.qq.com的官方网站时,首先计客户端将从自己的hosts文件中寻找该主机名对应的IP地址,如果有,则返回,如果没有,则去本地的DNS中寻找,本地DNS首先从自己的缓存中寻找,在去自己的主机记录中寻找,若都没有,将去根服务上寻找,根服务器是不知道www.qq.com这个主机对应的IP地址的,不过根服务器知道.com的地址,所以,根服务器将返回.com的地址,然后本地DNS在根据.com的地址去问.com的服务器,.com服务器也是不知道www.qq.com这个主机,但是它知道qq.com这个主机,所以在此将qq.com这个地址返回给本地DNS,本地DNS在此用qq.com的地址去访问,到qq.com服务器的时候,qq.com将www.qq.com的地址返还给本地DNS,本地DNS将查询结果返回给客户端并且将记录缓存下来,以便以下次的查询,客户端拿到地址,成功访问。

二、DNS服务类型

DNS查询类型

  1. 递归查询:是指转发DNS从根开始一级一级的寻找目标主机的过程

  2. 迭代查询:是指从根服务器开始从上到下一级一级的查询

DNS服务的的类型分为三类

  1. 主DNS,管理和维护负责解析的腹内解析库的服务器

  2. 从DNS,从主服务器或者从服务器上复制解析的库副本,从DNS根据解析库中的序列号来辨别主服务的解析库是否发生变化

  3. 缓存DNS,该服务器不做任何记录,只负责从别的服务器上问结果,然后将问到的结果缓存下来,以便以下次客户端再次查找

记录类型常用的主要分以下几类

  1. SOA:起始授权记录,一个区域解析库,每一个zone文件有且仅能有一个SOA记录,而且必须在解析库的第一条记录

  2. A:正向解析记录,用于将主机名解析成IP地址

  3. AAAA:IPv6的正向解析记录

  4. PTR:反向解析记录,主要用于将IP地址解析成主机名

  5. NS:专用于标明当前域的DNS服务器

  6. CNAME:别名记录

  7. MX:邮件交换器

三、在linux环境下,实现DNS的搭建

   1.安装软件包bind

[root@centos7 ~]# yum install -y bind

   2.配置/etc/named.cfg文件

[root@centos7 ~]# cat /etc/named.conf 
options {
listen-on port 53 { 127.0.0.1; };   #指定监听本地哪些IP地址
listen-on-v6 port 53 { ::1; };    #ipv6
directory "/var/named";    #指定数据文件路径
dump-file "/var/named/data/cache_dump.db";   
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query     { localhost; };   #指定哪些地址可以访问
recursion yes;    #是否允许递归
dnssec-enable yes; #如果需要转发需要关闭
dnssec-validation yes; #如果需要转发需要关闭
bindkeys-file "/etc/named.iscdlv.key";  
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {     #指定根目录的文件路径
type hint;
file "named.ca";
};
zone "test.com" IN {   #自定义域
type master;
file "test.com.zone";    #zone文件的名称,可以随意指定,只要和创建的名字一致即可
};
include "/etc/named.rfc1912.zones";   #扩展文件路径
include "/etc/named.root.key";

3.配置zone文件,因为上述文件中指定的名称为test.com.zone所以需要在/var/named/下创建一个test.com.zone的文件

[root@centos7 ~]# vim /var/named/test.com.zone
$TTL 1D
@       IN SOA  ns1 admin (0 1D 1h 1w 1D )
        NS      ns1
ns1     A       192.168.86.7
www     A       192.168.0.1

                    

    4.启动服务

[root@centos7 ~]# systemctl restart named

    5.测试

[root@centos6 app]#dig www.test.com @192.168.86.7
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.test.com @192.168.86.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15120
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.test.com.INA
;; ANSWER SECTION:
www.test.com.86400INA192.168.0.1
;; AUTHORITY SECTION:
test.com.86400INNSns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.86400INA192.168.86.7
;; Query time: 1 msec
;; SERVER: 192.168.86.7#53(192.168.86.7)
;; WHEN: Sat Apr 21 20:21:30 2018
;; MSG SIZE  rcvd: 80

四、实现主从服务器,并实现只有指定地址才可以充当从服务器

1.主DNS配置

[root@centos7 ~]# cat /etc/named.conf 
options {
listen-on port 53 { 127.0.0.1; };   #指定监听本地哪些IP地址
allow-query     { localhost; };   #指定哪些地址可以访问
dnssec-enable no; #如果需要转发需要关闭
dnssec-validation no; #如果需要转发需要关闭
allow-transfer { 192.168.86.8;};
zone "test.com" IN {   #自定义域
type master;
file "test.com.zone";    #zone文件的名称,可以随意指定,只要和创建的名字一致即可
};

2.zone文件配置

[root@centos7 ~]# vim /var/named/test.com.zone
$TTL 1D
@       IN SOA  ns1 admin (0 1D 1h 1w 1D )
        NS      ns1
        NS            ns2   #指定从DNS地址
ns1     A       192.168.86.7
ns2          A              192.168.86.8 
www     A       192.168.0.1

3.配置从DNS

[root@centos7 ~]# cat /etc/named.conf 
options {
listen-on port 53 { 127.0.0.1; };   #指定监听本地哪些IP地址
allow-query     { localhost; };   #指定哪些地址可以访问
dnssec-enable no; #如果需要转发需要关闭
dnssec-validation no; #如果需要转发需要关闭
allow-transfer { none;};
zone "test.com" IN {   #自定义域
type slave;  #类型是从类型
masters {192.168.86.7;};  #指定主的IP地址
file "slaves/test.com.zone";    #zone文件的名称,可以随意指定,只要和创建的名字一致即可
};

4.两台DNS重启服务,如果需要主DNS更新,从DNS自动更新,则需要在每次修改完zone文件后,增加序列号,告诉从DNS更新