搭建环境:CentOS6.5 x86_64虚拟机2台,做DNS主从复制。

安装包:使用yum安装bind-9.8.2-0.17.rc1.el6_4.6.x86_64 rpm包。

主DNS服务器IP地址:172.16.32.10。

从DNS服务器IP地址:172.16.32.11。

测试bind view功能的win7系统IP:192.168.1.132


一.DNS工作原理及域名介绍 

1.)DNS端口协议

DNS,监听于TCP/53端口。UDP/53端口。

UDP是属于面向非连接协议,在DNS解析上速度会提升,一般用于域名解析,UDP最大传输512字节,而域名最长67字节。

TCP是属于面向连接协议,提供可靠传输,需要经过三次握手,一般用于区域传送(就是主从同步),来检验数据输是否可靠,不可能说别人给我传什么,我就接收什么。如果使用TCP协议解析域名,需要建立三次握手,并且还会经历迭代查询,影响解析速度。


2.)客户端访问网站简单的分析:

DNS工作原理及主从同步_第1张图片

客户端相要访问www.exmple.com的网站,在地址栏中输入域名或者主机名,而主机间的通信是基于IP地址加端口来实现的,想要访问www.exmple.com,就需要把www.exmple.com转换成对应的IP地址。这时候就是需要DNS来把域名或者主机名解析成IP地址。

客户端对DNS发起请求,如上图的数字1,相要访问www.exmple.com,而在DNS服务器中记录着www.exmple.com的IP地址,如图数字2。

DNS把解析出来的IP地址返回给客户端,如图数字3。客户端用IP地址去访问www.exmple.com 。如图数字4。www.exmple.com网站将网页内容显示到客户端的显示器上,如图数字5。


3.)域名 “www.exmple.com.”  拆分:

‘.’:根域名服务器。

‘com’:顶级域名,或者一级域名,还有net cn org等

‘exmple’:二级域名,由公司或者个人使用。

‘www’:主机名 ,主机名还有mall.ftp等都是主机名。

DNS工作原理及主从同步_第2张图片


4.)递归,迭代:

看看DNS是怎么查找163.com的

首先客户端想要去访问163.com,在地址栏输入www.163.com,对本地DNS服务器说,无论如何,要把163网站的IP给我返回正确结果。这种通常叫做递归查询。

而本地DNS服务器不知道163.com的IP地址,就会去找13台根服务器,根服务器不会直接给你返回IP地址,而是说,我知道.com归谁负责,而后把.com的授权域全部列出来。DNS找到负责.com的DNS服务器,在.com顶级域名下列出一串负责163.com的DNS服务器,最后找到负责163.com服务器返回IP地址。这种通常叫做迭代查询。


DNS工作原理及主从同步_第3张图片

DNS工作原理及主从同步_第4张图片


5.)DNS服务器分类:

master:主DNS服务器,拥有区域正反向配置文件,管理区域。          

slave:从DNS服务器,拥有主DNS服务器的区域数据,大部分的时间在同步数据,如果主DNS服务器出故障,就会暂时顶替主DNS进行域名解析。

forward:将查询请求发往其他的DNS服务器。

cache:缓存服务器,将客户端上一次的解析缓存到服务器,过一段时间刷新一下。

 hint:根DNS服务器


二.安装DNS

 1.)使用yum安装bind

# yum install -y bind
#vim /etc/named.rfc1912.zones
options {
       //listen-on port 53 { 127.0.0.1; };
       //listen-on-v6 port 53 { ::1; };
       directory      "/var/named";  #正向反向解析文件存放目录,前面加反斜线的代表注释
};


2.)修改/etc/named.rfc1912.zones,定义正反解析区域

# vim /etc/named.rfc1912.zones 
zone"zhang.com" IN { #指定配置区域参数
        type master;  #类型,主/从
        file "zhang.com.zone"; #.zone区域存放路径
};
zone"32.16.172.in-addr.arpa" IN { #反向解析
        type master;
        file"32.16.172.in-addr.arpa";
};


创建正向解析文件

区域解析库:
   资源记录rr
   SOA:起始授权记录,一个区域文件只能有一个。
   NS:授权区域(授权哪个DNS服务器)。
   MX:邮件交换器,MX记录有优先级属性0-99,数字越小越高。
   A:将FQDN转换成IP地址。
   PTR:IP转换成FQDN。
   AAAA:FQDN -- IPV6。
   CNAME:正式名称。
 
#touch zhang.com.zone
#chown :named zhang.com.zone
#chmod 640 zhang.com.zone
-rw-r-----1 root  named    0 Aug 4 03:28 zhang.com.zone
 
#vim zhang.com.zone
$TTL600
@       IN     SOA     ns1.zhang.com.  admin.zhang.com. (
                        2014080401 #解析库的版本号
                        2H         #周期性同步时间间隔
                        10M        #重试时间间隔
                        7D         #过期时长
                        1D         #否定答案的统一缓存时长
)
        IN     NS      ns1.zhang.com.
        IN     MX      10(优先级,越小越大)      mail.zhang.com.
ns1     IN     A       172.16.32.10 #正向解析
www     IN     A       172.16.32.10
mail    IN     A       172.16.32.11
pop     IN     A       172.16.32.12
icmp    IN     CNAME   www

   

创建反向解析文件

#cp -p zhang.com.zone 32.16.172.in-addr.arpa
#vim 32.16.172.in-addr.arpa
$TTL600
@       IN     SOA     ns1.zhang.com.  admin.zhang.com. (
                        2014080401
                        2H
                        10M
                        7D
                        1D
)
        IN     NS      ns1.zhang.com.
        IN     MX      10      mail.zhang.com.
10      IN     PTR     na1.zhang.com.
10      IN     PTR     www.zhang.com.
11      IN     PTR     mail.zhang.com.
12      IN     PTR     pop.zhang.com


3.)设置开机启动

#chkconfig named on
#chkconfig named --list
named             0:off  1:off  2:on   3:on   4:on   5:on   6:off
#这时候可以测试正反向解析了


4.)DNS主从备份:

时间同步,在主服务器上也需要像时间服务器同步。

#ntpdate 172.16.0.1
#crontab-e
*/3* * * *  /usr/sbin/ntpdate 172.16.0.1&>/dev/null


5.)需要添加从DNS的授权以及正向解析

#vim zhang.com.zone
$TTL600
@       IN     SOA     ns1.zhang.com.  admin.zhang.com. (
                        2014080406 #修改版本号
)
        IN     NS      ns1
        IN     NS      ns2 #授权从服务器
 
ns1     IN     A       172.16.32.10
ns2     IN     A       172.16.32.11 #添加正向解析


6.)从DNS配置

#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";
……
}


开始的时候我想以自己的方式去命名,但是主从不能同步

#vim /etc/named.rfc1912.zones 
zone"zhang.com.zone" IN {
        type slave;
        file "slaves/zhang.com.zone";
        masters { 172.16.32.10; };
};
#rndc reload
Warning:'empty-zones-enable/disable-empty-zone' not set: disabling RFC 1918 empty zones#log会报这总错误

正确配置:
zone"zhang.com" IN {
        type slave;
        file "slaves/zhang.com.zone";
        masters { 172.16.32.10; };
};
#ls
zhang.com.zone


7.)使用dig命令进行解析下

#dig -t A www.zhang.com @172.16.32.11
……
;;flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
 
;;QUESTION SECTION:
;www.zhang.com.          IN  A
 
;;ANSWER SECTION:
www.zhang.com.       600 IN  A   172.16.32.10
 
;;AUTHORITY SECTION:
zhang.com.    600 IN  NS  ns2.zhang.com.
zhang.com.    600 IN  NS  ns1.zhang.com.
 
;;ADDITIONAL SECTION:
ns1.zhang.com.       600 IN  A   172.16.32.10
ns2.zhang.com.       600 IN  A   172.16.32.11
……


8.)正向解析没有问题了,开始同步反向解析

#vim /etc/named.rfc1912.zones
zone"32.16.172.in-addr.arpa" IN {
        type slave;
        file"slaves/32.16.172.in-addr.arpa";
        masters { 172.16.32.10; };
};
#rndc reload
#ls
32.16.172.in-addr.arpa  zhang.com.zone


开始测试反向解析

# nslookup 
> 172.16.32.11
Server:       127.0.0.1
Address:   127.0.0.1#53
 
11.32.16.172.in-addr.arpa   name = mail.zhang.com.
> 172.16.32.10
Server:       127.0.0.1
Address:   127.0.0.1#53
 
10.32.16.172.in-addr.arpa   name = www.zhang.com.
10.32.16.172.in-addr.arpa   name = ns1.zhang.com.
 
也已经OK了,开始在主DNS添加一个地址,看看从服务器是否能够解析


9.)在主DNS zhang.com.zone添加一条,记得修改版本号,然后从服务器测试

2014080407
text   IN      A       192.168.132.10
重新加载配置文件
# rndc reload
server reload successful
 
从DNS服务器开始测试,之前没有把从服务器的DNS添加到/etc/resolv.conf,使用nslookup解析的时候就是server :127.0.0.1,而不是DNS地址。修改后就可以了
#nslookup 
>text.zhang.com
Server:       172.16.32.11
Address:   172.16.32.11#53
 
Name:  text.zhang.com
Address:192.168.132.10


10.)主从同步区域控制

主服务器仅允许从服务器同步

#vim /etc/named.rfc1912.zones
zone"zhang.com" IN {
        type master;
        file "zhang.com.zone";
        allow-transfer { 172.16.32.11; }; #仅允许从服务器的IP地址同步区域
};
 
#rndc reload
serverreload successful


再次测试,看配置是否生效

已经获取不到任何信息,这一步在添加记录之前测试过,是可以看到本地有多少服务器和IP的,这里为了节约空间,就没把之前测试的贴出来

#dig -t AXFR zhang.com @172.16.32.10
 
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -tAXFR zhang.com @172.16.32.10
;;global options: +cmd
;Transfer failed.


同样的命令,换成从DNS服务器来试试

#dig -t AXFR zhang.com @172.16.32.10
 
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -tAXFR zhang.com @172.16.32.10
;;global options: +cmd
zhang.com.    600 IN  SOA ns1.zhang.com.admin.zhang.com. 2014080407 7200 600 604800 86400
zhang.com.    600 IN  NS  ns1.zhang.com.
zhang.com.    600 IN  NS  ns2.zhang.com.
zhang.com.    600 IN  MX  10mail.zhang.com.
icmp.zhang.com.      600 IN  CNAME  www.zhang.com.
mail.zhang.com.      600 IN  A   172.16.32.11
ns1.zhang.com.       600 IN  A   172.16.32.10
ns2.zhang.com.       600 IN  A   172.16.32.11
pop.zhang.com.       600 IN  A   172.16.32.12
text.zhang.com.      600 IN  A   192.168.132.10
www.zhang.com.       600 IN  A   172.16.32.10
zhang.com.    600 IN  SOA ns1.zhang.com.admin.zhang.com. 2014080407 7200 600 604800 86400
;;Query time: 3 msec
;;SERVER: 172.16.32.10#53(172.16.32.10)
;;WHEN: Tue Aug  5 19:44:28 2014
;;XFR size: 12 records (messages 1, bytes 290)
效果出来了。


11.)区域同步分几个级别的:

none:所有机器都不允许同步

any:任何机器都允许同步

localhost:仅本机允许同步

all-transfer{ ip; };:指定ip地址可以同步


12.)rndc命令

reload:重新加载

flush:刷新缓存

status:查看状态


13.)bind view

根据不同客户端,返回不同的IP地址。

编辑主配置文件

# vim /etc/named.rfc1912.zones
view unicom {
       match-clients { 172.16.249.0/16; };
……#其他默认的我这边就不贴上来了
//zone "zhang.com" IN {
//      typemaster;
//      file"zhang.com.zone";
//};
zone "32.16.172.in-addr.arpa" IN {
        typemaster;
        file"32.16.172.in-addr.arpa";
};
zone "zhang.com" IN {
        typemaster;
        file"zhang.com.uni";
};
};

view telecom {
       match-clients { 192.168.1.0/24; };
zone "zhang.com" IN {
        typemaster;
        file"zhang.com.telecom";
};
};


14.)新touch两个区域文件,注意权限

zhang.com.telecom

zhang.com.uni

#vimzhang.com.uni #主要是为了实现智能DNS,要的是结果,这个区域文件我是直接复制原来zhang.com.zone的,就不贴命令了。

#vim zhang.com.telecom
$TTL600
@  IN SOA   ns1.zhang.com.   admin.zhang.com. (
        2014080407
        2H
        10M
        7D
        1D 
)
   IN NS ns1
   IN MX 10 mail.zhang.com.
ns1   IN A  172.16.32.10
www   IN A  192.168.32.10
mail  IN A  192.168.32.11
pop   IN A  192.168.32.12


15.)配置完成后检查配置文件是否正确

#named-checkconf 
#named-checkzone "zhang.com" /var/named/zhang.com.telecom 
zonezhang.com/IN: loaded serial 2014080407
OK
#named-checkzone "zhang.com" /var/named/zhang.com.uni 
zonezhang.com/IN: loaded serial 2014080407
OK
#rndc reload
serverreload successful

DNS工作原理及主从同步_第5张图片

DNS工作原理及主从同步_第6张图片


目的达到了


总结:

DNS服务器的进程是named,而用户和组也是named,为了安全起见。而这时候也需要修改/var/named下的文件权限,例如touch zhang.com.zone的时候权限为644,这个权限过于大了,修改权限为640,但是named用户属主,属组都不属于root,就需要修改zhang.com.zone的属组为named。不然解析的时候会出错,因为named用户无法读取配置文件。