搭建环境: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工作原理及主从同步_dns工作原理

客户端相要访问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工作原理及主从同步_地址栏 dns _02


4.)递归,迭代:

看看DNS是怎么查找的

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

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


DNS工作原理及主从同步_地址栏 dns _03

DNS工作原理及主从同步_服务器_04


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  .
.      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 
/IN: loaded serial 2014080407
OK
#named-checkzone "zhang.com" /var/named/zhang.com.uni 
/IN: loaded serial 2014080407
OK
#rndc reload
serverreload successful

DNS工作原理及主从同步_地址栏 dns _05

DNS工作原理及主从同步_dns工作原理_06


目的达到了


总结:

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