视频:http://edu.51cto.com/lesson/id-41421.html

一、DNS基本概念
       DNS(Domain Name System)域名系统,DNS使用了UDP协议和TCP协议,端口号为 53,UDP 53端口用来查询和接受应答,TCP 53端口用于主服务器和从服务器之间的传送。
       域的划分:根域:全球13个根服务器,后缀如.com,.net等;根域下来就是顶级域或者叫一级域,一级域之后就是二级域,三级域,如 baidu.com就是一个顶级域名;域名服务器就是能提供域名解析的服务器,上面的记录类型有A(address)记录,NS(name server),MX(mail),CNAME等;
二、域名解析的方式
      递归解析:DNS客户端只是发出原始的域名查询请求报文,然后一直处于等待状态,直到本地域名服务器发来了最终的查询记录。
      迭代解析:以本地DNS服务器为中心,本地域名服务器扮演DNS客户端的角色向其他的DNS服务器提出域名解析的请求,每次返回认为可以解析这个查询IP的地址,直到找到该域名的授权服务器。
三、解析过程
     1,当用户在浏览器中输入域名www.qq.com后,浏览器会先检查本地缓存中是否 有此域名对应的解析ip(缓存时间有TTL属性来设置),如果有,解析结束;如果没有,浏览器就会查询操作系统缓存中(hosts文件中)是否有域名的 DNS解析,如果hosts文件中没有这个域名的映射,则就会到resolve.conf文件中查看指定的本地DNS服务器;

     2,如果本地DNS服务器收到请求,如果在本地资源记录中查到IP的解析结果,则返回解析结果给客户机,解析结束;
     3,如果要查询的域名不再本地DNS解析中并且没有转发模式,则本地DNS服务器就向根域服务器发送qq.com域名解析请求;
     4,根域服务器收到请求,向本地服务器返回一个顶级域名服务器的一个IP;
     5,本地DNS服务器收到IP信息后,向负责顶级域名服务器发送www.qq.com的解析请求;
     6,如果无法解析,则返回给本地域名服务器一个二级域名(www.qq.com)解析服务器地址IP;
     7,本地DNS服务器收到地址后,就向该地址发送解析www.qq.com请求,若该域名服务器在自己的资源配置中找到解析,则返回www.qq.com主机的IP;
     8,本地域名服务器将www.qq.com主机的ip地址返回给客户机;
四、DNS详细配置过程
      实验环境:redhat 6.5
      实验主机:    172.25.16.250 实现转发
                          172.25.16.1   server1    DNS服务器
                          172.25.16.2  server2     客户端
      DNS主配置文件:/etc/named.conf
      指定DNS服务器解析地址:/etc/reslov.conf
[root@server1 ~]# yum install bind -y                    //安装bind软件包
[root@server1 ~]# rpm -qc bind                           //查找bind的配置文件
[root@server1 ~]# rpm -qa | grep bind                 //查看已经安装的软件
bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64                      
bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64           //客户端工具,用于搜索域名指令,如dig
bind-9.8.2-0.17.rc1.el6_4.6.x86_64                         //DNS服务的主程序包
[root@server1 ~]# vim /etc/named.conf              //修改主配置文件
options {
        listen-on port 53 { any; };                  //监听权限改为any,允许任何主机都可以通过TCP 53端口连接此dns服务器
        listen-on-v6 port 53 { ::1; };                   
        directory       "/var/named";               //指定dns工作目录,存放数据资源文件
        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     { any; };                  //允许任何主机访问A记录文件
        forwarders { 172.25.16.250; };        //这条参数后面的ip所在的服务器为备选dns服务器,也就是设置转发功能,当本机无法查询解析到域名,就可以转发到此ip服务器上查询
        recursion yes;

        dnssec-enable yes;
        dnssec-validation no;                   //关闭dns安全认证
        dnssec-lookaside auto;

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

        managed-keys-directory "/var/named/dynamic";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {                                   //该zone定义语句定义了dns服务器的根和根记录文件
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";                 //定义子配置文件
include "/etc/named.root.key";
[root@server1 ~]# vim /etc/named.rfc1912.zones       //指定要维护的域qq.com
zone "qq.com" IN {
        type master;
        file "test";                                      //test文件为所要维护的域名中主机与ip的对应关系
        allow-update { none; };
};
[root@server1 ~]# cd /var/named
[root@server1 named]# ls
data     named.ca     named.localhost  slaves
dynamic  named.empty  named.loopback   test
[root@server1 named]# cp -p named.localhost test         //使用模板生成test
[root@server1 named]#vim test                                      //添加主机与ip对应关系
$TTL 1D
@       IN SOA lijiajing.qq.com. root.qq.com. (                //SOA表示授权的主机名字
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      lijiajing.qq.com.
lijiajing       A       172.25.16.1
haha            A       172.25.16.111
aa              A       172.25.16.222
[root@server1 named]# /etc/init.d/named restart
//在客户端指定dns服务器的地址ip
[root@server2 ~]# vim /etc/resolv.conf
nameserver 172.25.16.1
//测试
[root@server2 ~]# dig haha.qq.com                      //或者用   nslookup haha.qq.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> haha.qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21743
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;haha.qq.com.            IN    A

;; ANSWER SECTION:
haha.qq.com.        86400    IN    A    172.25.16.111

;; AUTHORITY SECTION:
qq.com.            86400    IN    NS    lijiajing.qq.com.

;; ADDITIONAL SECTION:
lijiajing.qq.com.    86400    IN    A    172.25.16.1

;; Query time: 58 msec
;; SERVER: 172.25.16.1#53(172.25.16.1)
;; WHEN: Tue Aug  4 00:10:45 2015
;; MSG SIZE  rcvd: 85