搭建环境: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.)客户端访问网站简单的分析:
客户端相要访问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等都是主机名。
4.)递归,迭代:
看看DNS是怎么查找的
首先客户端想要去访问,在地址栏输入www.,对本地DNS服务器说,无论如何,要把163网站的IP给我返回正确结果。这种通常叫做递归查询。
而本地DNS服务器不知道的IP地址,就会去找13台根服务器,根服务器不会直接给你返回IP地址,而是说,我知道.com归谁负责,而后把.com的授权域全部列出来。DNS找到负责.com的DNS服务器,在.com顶级域名下列出一串负责的DNS服务器,最后找到负责服务器返回IP地址。这种通常叫做迭代查询。
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.zone7.)使用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服务器的进程是named,而用户和组也是named,为了安全起见。而这时候也需要修改/var/named下的文件权限,例如touch zhang.com.zone的时候权限为644,这个权限过于大了,修改权限为640,但是named用户属主,属组都不属于root,就需要修改zhang.com.zone的属组为named。不然解析的时候会出错,因为named用户无法读取配置文件。






















