一、DNS简介

  网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。 

  DNS(Domain Name System,域名系统)是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP和TCP协议之上,使用端口号53。

  DNS基本工作原理如下图所示:

wKioL1YJ9kCBjsOKAABknvesNN0462.jpg

二、DNS域名称

 域名系统作为一个层次结构和分布式数据库,包含各种类型的数据,包括主机名和域名。DNS数据库中的名称形成一个分层树状结构称为域命名空间。完全限定的域名 (FQDN) 唯一地标识在 DNS 分层树中的主机的位置,通过指定的路径中点分隔从根引用的主机的名称列表。 

  下图显示DNS域的名称层次结构:

wKiom1YKRlGxHKsbAAHoQMvjZZA476.jpg

三、DNS查询方式

 DNS有两种查询方式,分别为递归查询和迭代查询,DNS的查询方式为先递归后迭代。

1.递归查询:只发起一次请求,最终能得到答案。

 由局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域的根域服务器进行查询,再由根域名服务器一级级向下查询。最后,将得到的查询结果返回结局部DNS服务器,再由局部DNS服务器返回给客户端。

2.迭代查询:发起一次请求,不一定得到答案。

 当局部DNS服务器自己不能回答客户机的DNS查询请求时,也可以通过迭代查询的方式进行域名解析,局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器发出查询请求,直到得到查询结果为止。

wKiom1YKSHyQHrLrAAGI6usOzN0548.jpg

四、DNS的解析库

  解析库是某种存储,可以是文本文件、关系型数据库,数据库每一个条目叫一个资源记录(Resource Record),资源记录有类型 ,用于表示资源的功能。每个RR标识数据库中的特定资源。我们在建立DNS服务器时,经常会用到SOA,NS,A之类的记录,在维护DNS服务器时,会用到MX,CNAME记录。一般正向解析和反向解析使用不同的解析库。

  资源记录的格式:Name  [ttl]  INRRType  value

1.SOA记录

  Start Of Authority:起始授权

  Name: 区域名称, 通常可以简写成@

  [ttl]: time to live, 此值可以省略

  IN: 是固定的,表示Internet

  RRType: 就是Record Resource Type, 可以使A,AAAA,SOA,NS,CNAME等等

  value: 主DNS服务器的FQDN,也可以是当前区域的区域名称

    例如:@ 600 IN SOA  na.magedu.com. 管理员邮箱(dnsadmin.magedu.com.)(

             序列号(serial number) ;注释内容,十进制数据,不能超过10位,

               通常使用日期,例如2015092901

             刷新时间(refresh time) ;即每隔多久到主服务器检查一次

             重试时间(retry time) ;应该小于refresh time

             过期时间(expire time)

             netgative answer ttl ;否定答案的ttl

         ) 

 注意:最后面的.不能省略,管理员的邮箱地址不能使用@,因为这里@有特殊意义,通常用.来代替。

2.NS记录

  name server:表明域名解析服务器的记录

  name: 区域名称

  value: DNS服务器的FQDN

    例如:@  600  IN   NS   ns.magedu.com.    

  注意:如果有多台NS服务器,每一个都必须有对应的NS记录,否则不会被识别成dns服务器,对于正向解析来讲,每个NS的FQDN都应该有一个A记录。

3.MX记录 

  Mail eXchanger:邮件服务记录

  name: 区域名称

  value: 邮件服务器的FQDN

    例如:@  600  IN   MX  10  mail.magedu.com.

  注意:如果有多台MX服务器,每一个都必须有对应的MX记录,单各MX记录还有优先级属性,对于正向解析文件来讲,每一个邮件服务器的FQDN都应该有一个A记录。

4.A记录

  IPv4 Address:iPv4地址

  name: FQDN

  value: IP

    例如:www.magedu.com.  600  IN  A  1.2.3.4

5.AAAA记录

  IPv6 Address 类似A记录

6.CNAME记录

  Canonical Name 别名记录

  name:FQDN

  value:FQDN

    例如:www.magedu.com.   600  IN  A  1.2.3.4

7.PTR记录

  pointer 反向解析记录

  name: 逆向主机IP地址(不包含网络地址)加后缀in-addr.arpa.  

  value: FQDN

    例如:7.10016.172.in-addr-arpa.  IN  PTR  www.magedu.com.

wKiom1YKUEyiTf2UAAI9vM3rUT4348.jpg

五、DNS服务器的设定

  在Linux系统中,最常用的DNS服务器软件是bind(Bekerley Internet Name Domain),是由isc.org维护更新。搭建内网DNS服务器,并不能对外网提供解析服务,如果需要对外提供DNS服务,还需要到域名注册商去注册域名绑定我们的DNS服务器才能实现对外DNS服务。

搭建内网DNS服务器如下:

  域名:magelinux.com  192.168.1.0

  dns服务器:dns      192.168.1.2

  邮件服务器:mail    192.168.1.3

  web服务器:www       192.168.1.4

  别名:pop -->mail

      ftp -->www

1.安装bind程序

[root@localhost named]# yum install bind

2.修改主配置文件

[root@localhost named]# vim /etc/named.conf

options {

//       listen-on port 53 { 127.0.0.1; };

//       listen-on-v6 port 53 { ::1; };

        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;

//       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"; //13个根节点

};


include "/etc/named.rfc1912.zones"; //定义区域内各种记录的zone配置文件

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

3.修改区域配置文件

[root@localhost named]# vim /etc/named.rfc1912.zones

zone "magelinux.com." IN{

        type master;

        file "magelinux.com.zone";

};   

4.创建并修改区域解析库文件

[root@localhost named]# touch /var/named/magelinux.com.zone 

[root@localhost named]# vim /var/named/magelinux.com.zone 

$TTL 600

@       IN      SOA     dns.magelinux.com.      admin.magelinux.com. (

                        2015092901

                        2H

                        10M

                        7D

                        1D

)

@       IN      NS      dns

@       IN      MX  10  mail

dns     IN      A       192.168.1.2

mail    IN      A       192.168.1.3

www     IN      A       192.168.1.4

pop     IN      CNAME   mail

ftp     IN      CNAME   www 

5.修改区域文件权限及属性信息

[root@localhost named]# chown root:named magelinux.com.zone 

[root@localhost named]# chmod 640 magelinux.com.zone

6.检查主配置文件和区域文件语法

[root@localhost named]# named-checkconf

[root@localhost named]# named-checkzone "magelinux" /var/named/magelinux.com.zone 

zone magelinux/IN: loaded serial 2015092901

OK

7.重启DNS服务

[root@localhost named]# service named restart

Stopping named:                                  [  OK  ]

Generating /etc/rndc.key:                           [  OK  ]

Starting named:                                  [  OK  ]

8.测试DNS服务器

[root@localhost ~]# dig -t A www.magelinux.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A www.magelinux.com

;; global options: +cmd

;; Got answer:

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

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


;; QUESTION SECTION:

;www.magelinux.com. IN A


;; ANSWER SECTION:

www.magelinux.com. 600 IN A 192.168.1.4


;; AUTHORITY SECTION:

magelinux.com. 600 IN NS dns.magelinux.com.


;; ADDITIONAL SECTION:

dns.magelinux.com. 600 IN A 192.168.1.2


;; Query time: 34 msec

;; SERVER: 192.168.1.2#53(192.168.1.2)

;; WHEN: Tue Sep 29 07:21:21 2015

;; MSG SIZE  rcvd: 85