首页 > 代码库 > DNS服务器

DNS服务器

   1.DNS定义:    它是一个将域名和IP相互映射的分布式数据库。有了DNS服务器,我们只需要记录一个网站的域名即可访问,而再也不需要记忆那一串长长的IP地址了。

        协议:DNS

        端口:    UDP:53                TCP:53

实现:BIND(Berkeley Internet Name Domain), PowerDNS, dnsmasq

         

                  FQDN --> IP: 正向解析

          IP --> FQDN:反向解析

     2.DNS的结构:

   技术分享

3.FQDN(Full Qualified Domain Name)

    安全合格域名,按照中国人的习惯是从大到小写,但老外习惯从小往大了写,就像写信一样,自底向上,所以一个FQDN应该是"www.qq.com."


4.DNS查询方式

1.递归查询(recursion)(一步一步往上请求进行查询,)

   客户端只发出一次请求,要求对方给出最终结果。如果客户端要查找的内容直接在服务器上得到结果,刚给出的答案是一个权威答案,否则就是一个参考答案。

2. 迭代查询(iteration)(你告诉我下一个要去找的地址,,我去找下一个,,直到找到。)

   客户端发出一次请求,服务器替代客户端一次次的去请求以获得最终答案,所以迭代查询是服务器代为其查询,因此,客户端指向的DNS服务器,一定是允许给本地主机做递归的。


一般情况下客户端和local DNS服务是递归查询,DNS和local DNS之间是迭代查询的。


5.资源记录(Resource Record)

SOA:Start Of Authority,      起始授权 一个区域有且只有一个  (划分这块区域是我的)

NS:Name Server,                      指定负责给定区域的名称服务器

MX:Mail eXchanger:                   邮件交换器

A:Address, FQDN-->IP                 列出特定主机名的 IP 地址

PTR: PoiTeR, IP --> FQDN              指针记录

AAAA: Address, FQDN --> IPv6           IPv6 的地址记录

CNAME: Canonical Name,               别名记录


6.  DNS服务器类型

    主DNS服务器:负责莫区域解析的服务器,对区域的所有更新都有通过此服务器进行。

    从DNS服务器: 负责某区域解析,但不负责更新操作。

    dns缓存文件

  

    1、区域数据文件有版本号(序列号) : serial number
    2、刷新时间(同步检查周期):refresh
    3、重试时间(重试周期):retry, 重试时间要小于刷新时间
    4、过期时间(失效时长):expire, 如果超过过期时间主服务器仍然没有恢复,则从服务器也停止解析

    5、否定应答的TTL值:在查找不到记录的情况下,无法缓存,下次请求还会继续去请求服务器,因此需要设置TTL值来限制客户端的再次无意义请求

    协调过程:
        从服务器在间隔达到refresh指定的时长后发起同步请求至主服务器;主服务器响应serial。
        从服务器与本地的serial进行比较;如果主服务器serial大于本。
        意味着主服务器区域数据文件更新了,因此进行同步操作。

  8.  资源记录的格式:

      Name     [ttl]    IN    RRtype    Value


  SOA:
       name:区域名称,可使用@替代
       value:
           第一段:
               主DNS服务器的FQDN,也可以是当前区域的名称
               当前区域的管理员邮箱
                   @用于表示当前区域的名字,所以邮箱地址不能出现@符号
           第二段:
               (主从服务器协调属性定义及否定应答的TTL值)

       eg:
           ibm.com.  60  IN  SOA  ibm.com.  ns.ibm.com. (
                2015011601 ;serial number
                 1H             刷新时间
                 5M             重试时间
                 7D             过期时间
                 1D             否定答案
                  )

注意:SOA后面ns.ibm.com.中最后面那个.一定不能省略,如果省略,系统会默认给补上你的区域名称。

 
        一个区域数据文件可以有多个NS记录
        name: 区域名称,可使用@替代
        value:dns服务器的FQDN

        eg:
            @   IN   NS   ns1.ibm.com.
            @   IN   NS   ns2.ibm.com.
               
        提示:
            1、相邻资源记录的name相同时,后面的可省略
            2、任何一个value中指定的FQDN,在其域的正向解析文件中应该有对应的A记录


         一个区域数据文件可以有多个MX记录
        name: 区域名称,可以使用@替代
        value:邮件服务器的FQDN
            在value之前需要有优先级的设定(0-99, 数字越小优先级越高)

        eg:
            @   IN  MX  10  mail1.ibm.org.
                IN  MX  20  mail2.ibm.org.

    
        应用于正向区域文件
        name: FQDN
        value: IP

        eg:
            www.ibm.org.   IN  A   1.1.1.1

        泛域名解析:
            *   IN  A   1.1.1.1

 
        反向区域文件
        负责IP——>FQDN的解析,只能定义在反向区域数据文件中,反向区域名称为逆向网络地址加.in-addr.arpa.后缀组成。
        
       name:IP,逆向的主机地址,如:93.251.16.172.in-addr.arpa.
       value:FQDN,这里的FQDN不需要有A记录,反向区域中不能出现A记录和MX
        eg:
            1   IN  PTR     www.ibm.com.

 
        name: 别名
        value:正式名字

        eg:
            web  IN  CNAME  www.ibm.com.

    

二、DNS的安装

   DNS是同时监听TCP与UDP协议的53号端口的,它的协议是DNS,软件名称是BIND(当然也有其它的)、进程名是named,这里就详细介绍以BIND方式安装DNS服务

1、安装bind,最好提前装好yum源,省得解决依赖关系。

1
[root@nmshuishui ~]# yum -y install bind

2、启动服务,检查是否已经监听53号端口

[root@xiaoxiao ~]# service named start

Starting named:                                            [  OK  ]

[root@xiaoxiao ~]# ss -antu

Netid  State      Recv-Q Send-Q    Local Address:Port      Peer Address:Port 

udp    UNCONN     0      0                     *:647                  *:*     

udp    UNCONN     0      0             127.0.0.1:53                   *:*     

udp    UNCONN     0      0                     *:69                   *:*     

udp    UNCONN     0      0                     *:847                  *:*     

udp    UNCONN     0      0                   ::1:53                  :::*     

tcp    LISTEN     0      3                   ::1:53                  :::*     

tcp    LISTEN     0      3             127.0.0.1:53                   *:*     

tcp    LISTEN     0      128                  :::22                  :::*     

tcp    LISTEN     0      128                   *:22                   *:*     

tcp    LISTEN     0      128                 ::1:953                 :::*     

tcp    LISTEN     0      128           127.0.0.1:953                  *:*     

tcp    LISTEN     0      100                 ::1:25                  :::*     

tcp    LISTEN     0      100           127.0.0.1:25                   *:*     

tcp    LISTEN     0      128           127.0.0.1:6010                 *:*     

tcp    LISTEN     0      128                 ::1:6010                :::*     

tcp    ESTAB      0      0       192.168.211.128:22       192.168.211.1:63421 

[root@xiaoxiao ~]# 


3、配置DNS

1)修改主配置文件

   现在DNS虽然已经启动成功,但还不能提供正常的解析服务,因为还没有创建区域数据库文件。

   主配置文件:定义区域,在/etc/named.conf

   区域数据文件:区域数据文件其实就是区域文件数据库,里面定义资源记录,它是一个纯文本文件,只能包含资源记录或宏定义。

//

// named.conf

//

// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS

// server as a caching only nameserver (as a localhost DNS resolver only).

//

// See /usr/share/doc/bind*/sample/ for example named configuration files.

//


options {

//      listen-on port 53 { 127.0.0.1; };    不注释只监听本机

//      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;                           准许递归。

      allow-query     { localhost; };

        recursion yes;


//      dnssec-enable yes;

//      dnssec-validation yes;                 dns安全机制暂且不需要。

//      dnssec-lookaside auto;


        /* Path to ISC DLV key */

//      bindkeys-file "/etc/named.iscdlv.key";


//      managed-keys-directory "/var/named/dynamic";

};


logging {

        channel default_debug {

                file "data/named.run";

                severity dynamic;

        };

};


zone "." IN {

        type hint;

        file "named.ca";

};


include "/etc/named.rfc1912.zones";                   定义区域的文件。               

//include "/etc/named.root.key";


修改完主配置文件后,再重启下named,这时它就会监听服务器的22号端口了。

]# service named restart

Stopping named: .                                          [  OK  ]

Starting named:                                            [  OK  ]

[root@xiaoxiao ~]# ss -antu

Netid  State      Recv-Q Send-Q    Local Address:Port      Peer Address:Port 

udp    UNCONN     0      0                     *:647                  *:*     

udp    UNCONN     0      0       192.168.211.128:53                   *:*     

udp    UNCONN     0      0             127.0.0.1:53                   *:*     

udp    UNCONN     0      0                     *:69                   *:*     

udp    UNCONN     0      0                     *:847                  *:*     

tcp    LISTEN     0      3       192.168.211.128:53                   *:*     

tcp    LISTEN     0      3             127.0.0.1:53                   *:*     

tcp    LISTEN     0      128                  :::22                  :::*     

tcp    LISTEN     0      128                   *:22                   *:*     

tcp    LISTEN     0      128                 ::1:953                 :::*     

tcp    LISTEN     0      128           127.0.0.1:953                  *:*     

tcp    LISTEN     0      100                 ::1:25                  :::*     

tcp    LISTEN     0      100           127.0.0.1:25                   *:*     

tcp    LISTEN     0      128           127.0.0.1:6010                 *:*     

tcp    LISTEN     0      128                 ::1:6010                :::*     

tcp    ESTAB      0      452     192.168.211.128:22       192.168.211.1:63421 

tcp    TIME-WAIT  0      0             127.0.0.1:48767        127.0.0.1:953   

[root@xiaoxiao ~]# 

2)创建正向区域

   DNS服务器有四种类型:主DNS服务器,从DNS服务器,缓存名称服务器,转发服务器

   因为这里新建的是第一台DNS服务器,所以DNS服务器类型为主DNS服务器,使用file指定数据文件,以;号结尾。

在:vim /etc/named.rfc1912.zones 下创建xiaoxiao.com域。  

zone"xiaoxiao.com" IN {

     type master;                       类型为主服务器

     file "xiaoxiao.com.zone;"          区域数据的路径,(var/named/xiaoxiao.com.zone )

                                           是在/etc/named.conf中定义的。

};

在/var/named/下创建正向区域文件数据库,命令为shuishui.com.zone,并填写资源记录

$TTL 600

@       IN      SOA     dns.xiaoxiao.com.       dnsadmin.xiaoxiao.com.(

      2015011601

       1H

       5M

       3D

       12H


        )


        IN      NS      dns

        IN      MX  10  mail

dns     IN      A       192.168.211.128

mail    IN      A       192.168.211.10

www     IN      A       192.168.211.11

ftp     IN      CNAME   www

修改配置文件及区域后需要执行的6个步骤

[root@xiaoxiao named]# chown root:named xiaoxiao.com.zone     1.修改属主属组

[root@xiaoxiao named]# chmod 640 xiaoxiao.com.zone            2.修改权限

[root@xiaoxiao named]# named-checkconf                        3.检查配置文件   

[root@xiaoxiao named]# named-checkzone xiaoxiao.com xiaoxiao.com.zone 

zone xiaoxiao.com/IN: loaded serial 2015011601                4.检查区域文件

OK

[root@xiaoxiao named]# service named restart                  5.重启服务器

Stopping named: .                                          [  OK  ]

Starting named:                                            [  OK  ]

[root@xiaoxiao named]# tail /var/log/messages                  6.查看日志文件

Jan 17 00:47:21 xiaoxiao named[1856]: command channel listening on 127.0.0.1#953

Jan 17 00:47:21 xiaoxiao named[1856]: command channel listening on ::1#953

Jan 17 00:47:21 xiaoxiao named[1856]: zone 0.in-addr.arpa/IN: loaded serial 0

Jan 17 00:47:21 xiaoxiao named[1856]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0

Jan 17 00:47:21 xiaoxiao named[1856]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0

Jan 17 00:47:21 xiaoxiao named[1856]: zone xiaoxiao.com/IN: loaded serial 2015011601

Jan 17 00:47:21 xiaoxiao named[1856]: zone localhost.localdomain/IN: loaded serial 0

Jan 17 00:47:21 xiaoxiao named[1856]: zone localhost/IN: loaded serial 0

Jan 17 00:47:21 xiaoxiao named[1856]: managed-keys-zone ./IN: loaded serial 18

Jan 17 00:47:21 xiaoxiao named[1856]: running            正常启动

[root@xiaoxiao named]# 

测试正向区域解析

   使用dig进行测试,-t选项指定类型,@指定使用哪台主机去解释,如果不使用@的话,默认会使用/etc/resolv.conf 下指定的DNS服务器进行解析。

[root@xiaoxiao named]# dig -t A www.xiaoxiao.com @192.168.211.128


; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -t A www.xiaoxiao.com @192.168.211.128

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3428

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

           aa说明是权威答案,说明此主机名在192.168.211.128上有A记录没有经过迭代。

;; QUESTION SECTION:

;www.xiaoxiao.com. IN A


;; ANSWER SECTION:

www.xiaoxiao.com. 600 IN A 192.168.211.11     解析成功得到ip地址


;; AUTHORITY SECTION:

xiaoxiao.com. 600 IN NS dns.xiaoxiao.com.


;; ADDITIONAL SECTION:

dns.xiaoxiao.com. 600 IN A 192.168.211.128


;; Query time: 1 msec

;; SERVER: 192.168.211.128#53(192.168.211.128)

;; WHEN: Sat Jan 17 00:53:14 2015

;; MSG SIZE  rcvd: 84


[root@xiaoxiao named]# 

3)创建反向区域

   1直接定义在xiaoxiao.com这个区域下就可以了,当然也是主服务器类型,使用file指定区域数据文件,要以;号结尾

vim /etc/named.rfc1912.zones

zone"211.168.192.in-addr.arpa" IN {


           type master;

           file "192.168.211.zone";


}

2在/var/named/下创建反向区域文件数据库,命令为172.16.251.zone,并填写资源记录

$TTL 600

@       IN      SOA     dns.xiaoxiao.com.       dnsadmin.xiaoxiao.com.(

        2015011601

        1H

        5M

        3D

        12H


)


        IN      NS      dns.xiaoxiao.com.

128     IN      PTR     dns.xiaoxiao.com.

10      IN      PTR     mail.xiaoxiao.com.

11      IN      PTR     www.xiaoxiao.com.

3 修改配置文件及区域后需要执行的6个步骤

     和以上六步骤相同,不在累赘。

4 测试反向区域解析

   使用dig进行测试,-t选项指定类型,@指定使用哪台主机去解释,如果不使用@的话,默认会使用/etc/resolv.conf 下指定的DNS服务器进行解析

[root@xiaoxiao named]# dig -x 192.168.211.11 @192.168.211.128


; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -x 192.168.211.11 @192.168.211.128

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33643

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1


;; QUESTION SECTION:

;11.211.168.192.in-addr.arpa. IN PTR


;; ANSWER SECTION:

11.211.168.192.in-addr.arpa. 600 IN PTR www.xiaoxiao.com.   反解析成功。


;; AUTHORITY SECTION:

211.168.192.in-addr.arpa. 600 IN NS dns.xiaoxiao.com.


;; ADDITIONAL SECTION:

dns.xiaoxiao.com. 600 IN A 192.168.211.128


;; Query time: 0 msec

;; SERVER: 192.168.211.128#53(192.168.211.128)

;; WHEN: Sat Jan 17 01:37:27 2015

;; MSG SIZE  rcvd: 109


[root@xiaoxiao named]# 

三、DNS主从同步

1、向区域中添加从服务器的关键两步:

   1)、在上级获得授权

   2)、在区域数据文件中为从服务器添加一条NS记录和对应的A或PTR记录。

2、向从区域中添加区域,但不需要自己创建数据文件,因为要从主DNS服务器上做区域传送,为了安全,要放在/var/named/slaves目录下,这也是系统专门为从服务器准备的存放区域数据文件的路径。

zone"xiaoxiao.com" IN {

     type master;

     masters{ 192.168.211.12; };         指定主服务器

     file "slaves/xiaoxiao.com.zone";       指定区域文件路径


};


zone "211.168.192.in-addr.arpa" IN {


           type master;

           masters{ 192.168.211.128;};     设定反向区域

           file "192.168.211.zone";

};










DNS服务器