DNS概述
DNS 为Domain NameSystem(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种机制。其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析。我们平时访问网站比如www.baidu.com我们只需要记住这个域名就可以访问到远程的服务器了,但实际上在我们向远程输入一个域名的时候,是有一个把域名转化为IP的过程,这个过程其实就是DNS服务器在起作用。
DNS的工作流程
假如我们想解析www.googl.com这个域名,首先浏览器将调用本地stub resolver解析器(存根解析器)会试图查看本地host文件,查看此域名有没有对应的IP地址如果没有则向DNS服务器发起查询请求,经过DNS查询,如果发现不是自己负责的区域则向上找根,根收到请求之后,返回查找答案则去查找com,com返回答案则去查找输入的域名服务器,返回的答案则先放入存根服务器再返回给浏览器,这时才可以跟真实服务器进行交互。
DNS返回结果可以缓存,所以当存根解析器先查找本地DNS缓存,如果没有则 再去找与本地主机递归的DNS服务器,如此服务器发现曾经解析过此域名则用缓存直接响应,如果没有缓存则查询自己负责的域,如果是则将权威答案返回,如果不是自己负责的域则直接迭代查询
授权是自上而下的 上级知道下级的存在而下级并不知道上级在什么地方
子域授权记录:.com只需要在自己的机构上面注册域名即在自己服务器上建立一条NS记录,明确说明此主机有一A记录并追加IP地址
1.根域服务器的地址、位置、IP
·A INTERNIC.NET(美国,弗吉尼亚州) 198.41.0.4
· B 美国信息科学研究所(美国,加利弗尼亚州) 128.9.0.107
· C PSINet公司(美国,弗吉尼亚州) 192.33.4.12
· D 马里兰大学(美国马里兰州) 128.8.10.90
· E 美国航空航天管理局(美国加利弗尼亚州) 192.203.230.10
· F 因特网软件联盟(美国加利弗尼亚州) 192.5.5.241
· G 美国国防部网络信息中心(美国弗吉尼亚州) 192.112.36.4
· H 美国陆军研究所(美国马里兰州) 128.63.2.53
· I Autonomica公司(瑞典,斯德哥尔摩) 192.36.148.17
· J VeriSign公司(美国,弗吉尼亚州) 192.58.128.30
· K RIPE NCC(英国,伦敦) 193.0.14.129
· L IANA(美国,弗吉尼亚州) 198.32.64.12
· M WIDE Project(日本,东京) 202.12.27.33
2.域名
·域名大致分为以下几类:
(1)顶级域:中间由点号分隔开,最右边的那个词称为顶级域名
(2)组织域:net com org mil edu gov cc
(3)国家域:jp tw hk iq cn 等
*反向域:通过FQDN来解析为IP地址
·DNS解析类型:
(1)正向解析:正向解析是指域名到IP地址的解析过程。
(2)反向解析:反向解析是从IP地址到域名的解析过程,反向解析的作用为服务器的身份验证。
通常如果一个企业想使用域名在公网使用时需申请顶级域,如www.google.com ,启动 www.google.com 为FQDN 而域名则是google.com.
3.资源记录
SOA资源记录
NS资源记录
A资源记录
PTR资源记录
CNAME资源记录
MX资源记录
dig命令
在部署Bind服务之前先来了解一下常用域名解析命令,这里最常用的就是dig和nslookup,首先来熟悉一下dig命令:
dig命令是一个用于询问 DNS域名服务器的灵活的工具。它执行 DNS 搜索,显示从受请求的域名服务器返回的答复。
常规用法:
dig-t <指定资源记录类型><名称> @server-ip +trace
如下所示:
# +trace参数表示查看整个解析的过程
[root@test ~]# dig -t NS www.baidu.com +trace
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -tNS www.baidu.com +trace
;;global options: +cmd
#可以看到请求会先去找根DNS服务器,如下所示
. 518281 IN NS c.root-servers.net.
. 518281 IN NS l.root-servers.net.
. 518281 IN NS a.root-servers.net.
. 518281 IN NS j.root-servers.net.
. 518281 IN NS g.root-servers.net.
. 518281 IN NS k.root-servers.net.
. 518281 IN NS e.root-servers.net.
. 518281 IN NS b.root-servers.net.
. 518281 IN NS i.root-servers.net.
. 518281 IN NS f.root-servers.net.
. 518281 IN NS m.root-servers.net.
. 518281 IN NS h.root-servers.net.
. 518281 IN NS d.root-servers.net.
;;Received 512 bytes from 219.141.136.10#53(219.141.136.10) in 2299 ms
#DNS回复请求,指向.com服务器,所以用户要去向com服务器发送查询请求
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
#由此服务器告诉用户由此台主机进行解析
;;Received 491 bytes from 193.0.14.129#53(193.0.14.129) in6851 ms
baidu.com. 172800 IN NS dns.baidu.com.
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
;;Received 201 bytes from 192.48.79.30#53(192.48.79.30) in 111 ms
#百度服务器如下,则挑选一台为用户解析
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
;;Received 228 bytes from 202.108.22.220#53(202.108.22.220) in 30 ms
2.查看其域的NS记录
[root@test~]# dig -t NS www.baidu.com
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -tNS www.baidu.com
;;global options: +cmd
;;Got answer:
;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48823
;;flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;;QUESTION SECTION:
;www.baidu.com. IN NS
;;ANSWER SECTION:
www.baidu.com. 502 IN CNAME www.a.shifen.com.
;;AUTHORITY SECTION:
a.shifen.com. 600 IN SOA ns1.a.shifen.com.baidu_dns_master.baidu.com. 1312040003 5 5 86400 3600
;;Query time: 5 msec
;;SERVER: 219.141.136.10#53(219.141.136.10)
;;WHEN: Thu Dec 12 01:12:27 2013
;;MSG SIZE rcvd: 115
常用命令参数还包括:
dig-x ip @server-ip
dig-t axfr zone #验证增量区域
dig-t ixfr zone
之后会在后面一一出现
Bind服务
Bind是BerkeleyInternet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件。Bind原本是美国DARPA资助伯克里大学(Berkeley)开设的一个研究生课题,后来经过多年的变化发展,已经成为世界上使用最为广泛的DNS服务器软件,目前Internet上绝大多数的DNS服务器有都是用Bind来架设的。Bind经历了第4版、第8版和最新的第9版,第8版漏洞百出因此第9版修正了以前版本的许多错误,并提升了执行时的效能。
其bind名称解析库位于 /var/named/
文本文件:只能包含资源记录和宏定义 每一行称为一个资源记录
资源记录有类型:
·FQDN: ip将主机名解析为ip 称为A记录(IPV4),AAA记录(IPV6)
·Domain: DNS Server NS记录 又被称为nameserver
·Domain: MasterDNS:明确说明主DNS服务器是谁 SOA 定义主辅之间数据如何同步,也说明主服务器对应的地址是什么
·FQDN: FQDN:CNAME(正式名称)
·IP: FQDN : PTR 指针记录
·Domain: Mail Server:MX 有优先级:0-99
各资源类型其名称有要求:一般而言其名称必须是当前区域的名称,如下所示
SOA: zone
NS: zone
A: FQDN
CNAME: FQDN
FTR: 反向FQDN (RerversIP.in-addr.arpa.)
而各资源记录类型其value有要求:
SOA:主DNS服务器的FQDN
NS:对应DNS服务器的FQDN
A: IP地址
PTR: FQDN
MX: zone
1.Bind配置文件初探:
[root@test~]# cat /var/named/test.com.zone
SOA:
zone ttl IN FQDN admin_mailbox ()
版本号, ;可使用日期标示(+1)
2H(小时) ;刷新时间 refreshtime,通知(notify) #主服务器通知只通知给本区域解析库中定义了NS记录的所有主机
5M(分钟) ;重试时间,trtry time
7d(天) ;过期时间,expiretime
1d ;否定答案的ttl(缓存时间)
)
某一条记录的后条记录:
zone IN NS ns.test.com. #如果不写zone则默认使用上一条的zone名称
#还可以用@来标示zone
2.安装Bdind
[root@test~]# yum install bind
#安装完成后会生成以下配置文件,这里我们需要了解以下3个配置文件,为最常用配置文件
[root@testnetwork-scripts]# rpm -qc bind
/etc/logrotate.d/named
/etc/named.conf #主配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones #事先定义好区域
/etc/named.root.key #事物签名
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
#安装完named会自动创建用户named系统用户
[root@test~]# grep name /etc/passwd
named:x:25:25:Named:/var/named:/sbin/nologin
3.服务配置文件
(1)主配置文件
bind的主配置文件位于/etc/named.conf,其主配置文件主要分为3个区域,分别为:
options #定义区域的全局配置,所有配置都生效
logging #定义日志
zone #定义区域
每个语句都要使用分号结尾,否则视为语法错误
(2)定义加载配置的文件
include"/etc/named.rfc1912.zones";
include"/etc/named.root.key";
(3)初次启动bind
启动bind之前首先编辑/etc/named.conf
[root@test~]# vim /etc/named.conf
将以下参数注释:
注释,此意为需要监听的ip地址,将其注释
// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };
// allow-query { localhost; };
保存退出并且启动named
[root@test~]# /etc/init.d/named start
Generating/etc/rndc.key: #第一次启动会生成rndc.key文件,耐心等待即可
查看是否启动监听端口,dns服务TCP和UDP协议的53端口
[root@test~]# netstat -lntup | grep 53
tcp 0 0 172.23.215.49:53 0.0.0.0:* LISTEN 1794/named
tcp 0 0 10.0.10.60:53 0.0.0.0:* LISTEN 1794/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1794/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 1794/named
tcp 0 0 ::1:953 :::* LISTEN 1794/named
udp 0 0 172.23.215.49:53 0.0.0.0:* 1794/named
udp 0 0 10.0.10.60:53 0.0.0.0:* 1794/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 1794/named
查看根的DNS记录,如果能通过DNS协议访问互联网则没有任何问题,因为.不是谁负责的域,如下所示:
[root@test~]# dig -t NS . @127.0.0.1
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -tNS . @127.0.0.1
;;global options: +cmd
;;Got answer:
;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1194
;;flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0
;;QUESTION SECTION:
;. IN NS
;;ANSWER SECTION:
. 479286 IN NS j.root-servers.net.
. 479286 IN NS k.root-servers.net.
. 479286 IN NS h.root-servers.net.
. 479286 IN NS c.root-servers.net.
. 479286 IN NS d.root-servers.net.
. 479286 IN NS a.root-servers.net.
. 479286 IN NS e.root-servers.net.
. 479286 IN NS b.root-servers.net.
. 479286 IN NS l.root-servers.net.
. 479286 IN NS i.root-servers.net.
. 479286 IN NS f.root-servers.net.
. 479286 IN NS g.root-servers.net.
. 479286 IN NS m.root-servers.net.
;;Query time: 1 msec
;;SERVER: 127.0.0.1#53(127.0.0.1)
;;WHEN: Thu Dec 12 18:51:54 2013
;;MSG SIZE rcvd: 228
4.配置DNS正向解析
(1)定义一个本地区域的DNS解析,规划如下
IP地址 | SOA类型 | FQDN |
10.0.10.60 | NS | test.com. |
10.0.10.60 | A | www.test.com |
10.0.10.60 | NS | dns.test.com |
10.0.10.60 | MX | mail.test.com |
ftp.test.com | CNAME | www.test.com |
(2) 编辑zones文件,此文件为解析配置文件
[root@test~]# vim /etc/named.rfc1912.zones
追加内容
zone"test.com.zone" IN { #定义域
type master; #类型为master
file "test.com.zone"; #定义域文件名
};
#区域文件存放路径可在named.conf全局配置里去配置定义或修改
[root@testetc]# grep 'directory' /etc/named.conf
directory "/var/named";
编辑完毕后保存退出并创建zone文件:
[root@testnamed]# cd /var/named
[root@testnamed]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
#其中named.localhost为模板文件,如不知格式,则可以复制模板文件来进行修改。
[root@test named]# cpnamed.localhost test.com.zone
#创建zone:
#定义宏,如果没有定义ttl,则默认ttl值都为600秒
$TTL 600
@ IN SOA dns.test.com. admin.test.com. (
20131213 #定义序列号
2H #定义刷新时间为2小时
10M #重置时间,10分钟重置一次
7D #过期时间,7天过期
6H ) #缓存时间,假设每条缓存6个小时
IN NS dns #如果第二条记录与第一条记录对应则可以省略简写为dns,必须交代清楚区域的主DNS服务器是谁,这里为dns.test.com. (可以简写为dns,会自动找到named.conf对应的域)只要写全一定加.
IN MX 10 mail #mail必须定义在前面与@对应不然则记录头上一条的记录
dns IN A 10.0.10.60 #必须给dns指定A记录
www IN A 10.0.10.60 #必须给予A记录
mail IN A 10.0.10.60
ftp IN CNAME www.test.com. #CNAME不用指定IP,这里的意思为www还有另外一条记录叫ftp
保存退出并授权
[root@testnamed]# chmod 640 test.com.zone
[root@testnamed]# chown named.named test.com.zone
检查配置文件
[root@testnamed]# named-checkconf
检查域
用法:命令+域名+域配置文件
检查zone文件配置是否正确
[root@testnamed]# named-checkzone"test.com" /var/named/test.com.zone
zonetest.com/IN: loaded serial 20131210
OK
oot@testnamed]# /etc/init.d/named reload
Reloadingnamed: [ OK ]
[root@testnamed]# echo "nameserver 10.0.10.60" >> /etc/resolv.conf
通过本地来查找解析域名
[root@testnamed]# dig -t A www.test.com @127.0.0.1
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -tA www.test.com @127.0.0.1
;;global options: +cmd
;;Got answer:
;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58113
;;flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;;QUESTION SECTION:
;www.test.com. IN A
;;ANSWER SECTION:
www.test.com. 600 IN A 10.0.10.60
;;AUTHORITY SECTION:
test.com. 600 IN NS dns.test.com.
;;ADDITIONAL SECTION:
dns.test.com. 600 IN A 10.0.10.60
;;Query time: 0 msec
;;SERVER: 127.0.0.1#53(127.0.0.1)
;;WHEN: Thu Dec 12 21:20:48 2013
;;MSG SIZE rcvd: 80
以上可以看到此域名可以被正常解析,一切正常
4.1总结:
1.当安装(yum安装)完成后,主配置文件位于/etc/named.conf
2.编辑主配置文件,将以下参数注释:
// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };
// allow-query { localhost; };
当这些注释掉以上参数之后,即可启动named服务,之后则自动成为缓存DNS服务器,但给用户递归的结果数量是有限的,只有一千个。
3.配置为主DNS服务器需要以下步骤:
(1)在/etc/named.frc1912.zones新建一个区域,每行以分号结尾
zone"zone_name" IN {
type master|slave|forword;
file "zone_name.zone";
};
(2).建立在/var/named下"zone_name.zone"文件,经常只包含宏定义和资源记录,第一个记录必须是SOA记录
则记录格式:
$ttl 600 #配置ttl默认为600秒
named ttl IN RR_Type(资源类型) value
可以配置多个FQDN可对应多一个IP地址,从而可以实现负载均衡;
可以配置多个FQDN也可对应一个IP (一台主机有多个域名);
4.创建完毕需要检测主配置文件语法错误:
#检查主配置文件:
[root@testnamed]# named-checkconf
#检查区域配置文件:
[root@testnamed]# named-checkzone "test.com" /var/named/test.com.zone
5.确保主配置文件和各区域域名解析库文件的权限为640属主为root属组为named
6.服务启动后,如有需求修改配置文件,不建议重启,可以使用rndc reload 或/etc/init.d/named reload 来平滑加载named服务配置文件
5.配置DNS反向解析
反向区域的区域名称格式:网络地址反过来.in-addr.arpa. 如:假设网络地址为172.16.100.1 那么规则命名为100.16.172.in-addr.arpa
这里我本地的内网IP为10.0.10.60 所以则写成10.0.10.in-addr.arpa
5.1.创建配置反向区域
编辑配置文件:
[root@test ~]# vim/etc/named.rfc1912.zones
加入以下参数:
zone"10.0.10.in-addr.arpa" IN {
type master;
file "10.0.10.zone";
};
保存退出并编辑10.0.10.zone
将之前创建好的正向zone文件拷贝一份并命名为10.0.10.zone
[root@test~]# cd /var/named/
[root@testnamed]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves test.com.zone
[root@testnamed]# cp test.com.zone 10.0.10.zone
[root@testnamed]# vim 10.0.10.zone
修改参数为:
$TTL 600
@ IN SOA dns.test.com. admin.test.com. (
20131213
2H
10M
7D
6H )
IN NS dns.test.com.
60 IN PTR www.test.com.
60 IN PTR mail.test.com.
60 IN PTR dns.test.com.
其中,MX类型绝对不可以在反向记录里出现;
60相当于60.10.0.10.in-addr-arpa. 所以如果写网络地址最后一段则可以自动补全;
CNAME则不需要做反向;
保存退出检查语法:
[root@testnamed]# named-checkzone "10.0.10.in-addr-arpa"/var/named/10.0.10.zone
zone10.0.10.in-addr-arpa/IN: loaded serial 20131213
OK
授权
[root@testnamed]# chown named.named 10.0.10.zone
重新加载配置文件
[root@testnamed]# /etc/init.d/named reload
也可以使用rndc命令来重新加载
[root@testnamed]# rndc status
version:9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6
CPUsfound: 1
workerthreads: 1
numberof zones: 21
debuglevel: 0
xfersrunning: 0
xfersdeferred: 0
soaqueries in progress: 0
querylogging is OFF
recursiveclients: 0/0/1000
tcpclients: 0/100
serveris up and running
[root@testnamed]# rndc reload
serverreload successful
其rndc最常用参数有:
[root@testnamed]# rndc reconfig #重新加载
[root@testnamed]# rndc status #查看当前状态
[root@testnamed]# rndc flush #刷新
[root@testnamed]# rndc reload #重新加载配置
验证:
使用 dig -x ip 来查看此ip地址的反向解析
[root@testnamed]# dig -x 10.0.10.60
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x10.0.10.60
;;global options: +cmd
;;Got answer:
;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5902
;;flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1
;;QUESTION SECTION:
;60.10.0.10.in-addr.arpa. IN PTR
;;ANSWER SECTION:
60.10.0.10.in-addr.arpa.600 IN PTR mail.test.com.
60.10.0.10.in-addr.arpa.600 IN PTR dns.test.com.
60.10.0.10.in-addr.arpa.600 IN PTR www.test.com.
;;AUTHORITY SECTION:
10.0.10.in-addr.arpa. 600 IN NS dns.test.com.
;;ADDITIONAL SECTION:
dns.test.com. 600 IN A 10.0.10.60
;;Query time: 0 msec
;;SERVER: 10.0.10.60#53(10.0.10.60)
;;WHEN: Thu Dec 12 22:33:43 2013
;;MSG SIZE rcvd: 134
验证NS:
[root@testnamed]# dig -t NS 10.0.10.in-addr.arpa
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -tNS 10.0.10.in-addr.arpa
;;global options: +cmd
;;Got answer:
;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25092
;;flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;;QUESTION SECTION:
;10.0.10.in-addr.arpa. IN NS
;;ANSWER SECTION:
10.0.10.in-addr.arpa. 600 IN NS dns.test.com.
;;ADDITIONAL SECTION:
dns.test.com. 600 IN A 10.0.10.60
查找此区域所有的资源记录
[root@testnamed]# dig -t axfr 10.0.10.in-addr.arpa
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -taxfr 10.0.10.in-addr.arpa
;;global options: +cmd
10.0.10.in-addr.arpa. 600 IN SOA dns.test.com.admin.test.com. 20131213 7200 600 604800 21600
10.0.10.in-addr.arpa. 600 IN NS dns.test.com.
60.10.0.10.in-addr.arpa.600 IN PTR www.test.com.
60.10.0.10.in-addr.arpa.600 IN PTR mail.test.com.
60.10.0.10.in-addr.arpa.600 IN PTR dns.test.com.
10.0.10.in-addr.arpa. 600 IN SOA dns.test.com.admin.test.com. 20131213 7200 600 604800 21600
;;Query time: 1 msec
;;SERVER: 10.0.10.60#53(10.0.10.60)
;;WHEN: Thu Dec 12 22:38:09 2013
5.2.总结
(1)创建反向区域名必须是域名称格式:网络地址反过来.in-addr.arpa. ;
(2)配置zone文件内容时,MX类型绝对不可以在反向记录里出现;
(3)所以如果写网络地址最后一段则可以自动补全,否则必须写全,如10.0.10.in-addr.arpa;
(4)CNAME则不需要做反向;
(5)可以通过dig命令来详细查询DNS解析过程;
配置Bind主辅
首先master服务器每次修改完成并重启服务后,将传送notify给所有的slave服务器 slave服务器将查询master服务器的SOA记录,master服务器收到请求后将SOA记录发送给Slave 服务器,Slave服务器收到后同时对比查询结果中的serial值,如果serial值不大于本机的话将结束数据同步过程;但是如果serial值大于本机的话,slave将发送zone transfer请求要求(AXFR/IXFR)。Master响应zone transfer请求并传送结果,直到整个slave更新完成。
主要工作在区域内,如果有多台DNS服务器则必须为每一个DNS服务器建立NS记录否则无法接收通知(主DNS讲不向其发起通知)
区域定义
/var/named/slaves/ 此目录存在主要目的就是为从服务器保存其同步过来的区域文件,所以定义辅DNS区域时候则将其保存到slaves/目录
[root@test~]# ls -ld /var/named/slaves/
drwxrwx---.2 named named 4096 Aug 27 23:55 /var/named/slaves/
1.准备工作:
新开一台虚拟机,并yum安装bind服务,使其内外网畅通,其服务角色如下所示:
服务器角色 | 服务器IP |
Master | 10.0.10.60 |
Slave | 10.0.10.61 |
2.创建Slave
·准备工作略
·配置Slave,编辑 /etc/named.rfc1912.zones 加入以下参数:
zone"test.com" IN {
type slave; #创建类型为slave
file "slaves/test.com.zone"; #文件存放目录
masters { 10.0.10.60; }; #其授权master主机ip
};
保存退出检测语法
[root@test2named]# named-checkconf
确保无误,回到masters编辑test.com.zone 添加记录,如下所示
[root@testnamed]# cat test.com.zone
$TTL 600
@ IN SOA dns.test.com. admin.test.com. (
20131213
2H
10M
7D
6H )
IN NS dns
IN NS dns2
IN MX 10 mail
dns IN A 10.0.10.60
dns2 IN A 10.0.10.61 #每个NS必须对应一个主机名
www IN A 10.0.10.60
mail IN A 10.0.10.60
ftp IN CNAME www.test.com.
保存退出检查语法
[root@testnamed]# named-checkzone"test.com" /var/named/test.com.zone
zonetest.com/IN: loaded serial 20131213
OK
重新加载配置文件
[root@testnamed]# rndc reload
serverreload successful
查看其NS记录是否生效
[root@testnamed]# dig -t NS test.com
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -tNS test.com
;;global options: +cmd
;;Got answer:
;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 556
;;flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2
;;QUESTION SECTION:
;test.com. IN NS
;;ANSWER SECTION:
test.com. 600 IN NS dns.test.com.
test.com. 600 IN NS dns2.test.com.
;;ADDITIONAL SECTION:
dns.test.com. 600 IN A 10.0.10.60
dns2.test.com. 600 IN A 10.0.10.61
;;Query time: 0 msec
;;SERVER: 10.0.10.60#53(10.0.10.60)
;;WHEN: Thu Dec 12 23:25:26 2013
;;MSG SIZE rcvd: 95
回到slave服务器,启动辅DNS
[root@test2named]# /etc/init.d/named start
先来查看是否可以拉取主dns的数据,使用dig -t axfr 来拉取其DNS服务器的数据,如下所示,默认可以全部解析:
[root@test2named]# dig -t axfr test.com @10.0.10.60
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -taxfr test.com @10.0.10.60
;;global options: +cmd
test.com. 600 IN SOA dns.test.com. admin.test.com. 201312137200 600 604800 21600
test.com. 600 IN NS dns.test.com.
test.com. 600 IN NS dns2.test.com.
test.com. 600 IN MX 10 mail.test.com.
dns.test.com. 600 IN A 10.0.10.60
dns2.test.com. 600 IN A 10.0.10.61
ftp.test.com. 600 IN CNAME www.test.com.
mail.test.com. 600 IN A 10.0.10.60
www.test.com. 600 IN A 10.0.10.60
test.com. 600 IN SOA dns.test.com.admin.test.com. 20131213 7200 600 604800 21600
;;Query time: 1 msec
;;SERVER: 10.0.10.60#53(10.0.10.60)
;;WHEN: Fri Dec 13 10:52:10 2013
;;XFR size: 10 records (messages 1, bytes 248)
启动从服务器后再来查看slaves目录下是否有数据生成:
[root@test2named]# ll slaves/
total4
-rw-r--r--.1 named named 427 Dec 13 10:49 test.com.zone
更改dns解析千万不要在从上操作,否则就不同步了,一定要在主DNS上更改。而且只需要更改主的配置文件并重启主的named服务后,从就会跟着变
3.使用windows自带的nslookup进行解析
验证正向解析
验证反向解析
4.验证:如果主DNS配置文件被修改,那么从服务器是否会更新
编辑主DNS服务器,修改配置文件test.com.zone 追加记录:
echo " www IN A 10.0.10.61" >>/var/named/test.com.zone
echo " icmp IN A 10.0.10.60" >>/var/named/test.com.zone
并且将其序列号+1
20131213+1=20131214:
把”20131213”修改为”20131214”
这个是至关重要的,这个就是所谓的序列id,只有这个id号变了,从发现这个号变了,才会从主上获取数据,否则从不会改变,需要注意的是修改后的id号要比修改前的号要大才行
如下所示:
$TTL 600
@ IN SOA dns.test.com. admin.test.com. (
20131214 #ID号+1
2H
10M
7D
6H )
IN NS dns
IN NS dns2
IN MX 10 mail
dns IN A 10.0.10.60
dns2 IN A 10.0.10.61
www IN A 10.0.10.60
mail IN A 10.0.10.60
ftp IN CNAME www.test.com.
www IN A 10.0.10.61
icmp IN A 10.0.10.60
保存退出并重新加载配置文件
[root@testnamed]# rndc reload
切换至从服务器,查看其配置文件
[root@test2named]# cat slaves/test.com.zone | head-5
$ORIGIN.
$TTL600 ; 10 minutes
test.com IN SOA dns.test.com.admin.test.com. (
20131214 ; serial
7200 ; refresh (2 hours)
可以看到,其ID号已经发生变化,内容更不用说了
5.查看DNS日志变化
DNS日志大部分都保存在/var/log/messages
以刚才主辅DNS为例,来看一下同步过程中是做了什么操作的:
切换至slave,查看日志:
[root@test2named]# tail -F /var/log/messages
Dec13 10:49:53 test2 named[2065]: zone test.com/IN: sending notifies (serial20131213)
Dec13 10:53:04 test2 init: tty (/dev/tty1) main process ended, respawning
#主DNS10.0.10.60通知其区域test.com发生变化
Dec13 11:10:16 test2 named[2065]: client 10.0.10.60#44102: received notify forzone 'test.com'
#已经开始传送相关数据
Dec13 11:10:16 test2 named[2065]: zone test.com/IN: Transfer started.
#已经从10.0.10.60收到其修改文件的数据内容
Dec13 11:10:16 test2 named[2065]: transfer of 'test.com/IN' from 10.0.10.60#53:connected using 10.0.10.61#43047
#已经将test.com域的ID号修改为20131214
Dec13 11:10:16 test2 named[2065]: zone test.com/IN: transferred serial 20131214
#已经完成同步test.com域,耗时多久
Dec13 11:10:16 test2 named[2065]: transfer of 'test.com/IN' from 10.0.10.60#53:Transfer completed: 1 messages, 12 records, 285 bytes, 0.002 secs (142500bytes/sec)
#日志是非常重要的,会看日志是基本中的基本
6.创建slave反向解析
在slave服务器编辑/etc/named.rfc1912.zones 加入以下参数:
zone"10.0.10.in-addr.apra" IN {
type slave;
file "slaves/10.0.10.zone";
masters { 10.0.10.60; };
};
保存退出并检查语法
[root@test2named]# named-checkconf
切换至master服务器
编辑/etc/named.rfc1912.zones加入以下参数:
需要注意的是初次序列号不用更改
IN NS dns2.test.com. #此条需在最上面
61 IN PTR dns2.test.com.
保存退出,检查语法无误并重新加载服务
[root@testnamed]# named-checkconf
[root@testnamed]# rndc reload
serverreload successful
注意:
如果是CentOS6.x 发现日志出现 received notify for zone 'xxx.com': not authoritative或 master named-sdb[6324]: error (network unreachable)resolving信息,原因是IPv6 寻址的缘故,编辑配置文件/etc/sysconfig/named 将参数OPTIONS="whatever" 改为 OPTIONS="-4"保存退出重启服务即可
切至slave服务器重新加载服务并查看结果
[root@test2named]# ll /var/named/slaves/
total8
-rw-r--r--.1 named named 422 Dec 13 11:42 10.0.10.zone
-rw-r--r--.1 named named 463 Dec 13 11:10 test.com.zone
在从上查看配置文件,可看到内容已发生变化,此步骤略
7.总结:
(1)创建slave的时候,其配置文件类型必须是type slve; 必须指定主服务器的 IP地址 ;其格式:
zone"test.com" IN {
type slave; #创建类型为slave
file "slaves/test.com.zone"; #文件存放目录
masters { 10.0.10.60; }; #其授权master机ip 中括号内两侧必须有空格
};
(2)可以使用dig -t axfr test.com @10.0.10.60 来拉取其服务器所有解析;
(3)主辅同步完成后,将自动在slave服务器上的slaves/目录下生成zone文件,不建议更改slave的zone文件;
(4)修改配置文件时,必须将其ID在其基础上加数字1 因为slave是通过其ID来进行判断更新的;
(5)DNS的日志默认全部保存在/var/log/messege 文件中;
DNS安全
如果在公司里做了一DNS服务器任何人通过互联网连接到此DNS服务器都可以做一次区域传送。通过区域文件可以传递出公司的内部网络结构,为了避免此现象发生,必要仅让从服务器可以同步,其他IP全部禁止同步,如下所示:
参数 allow-transfer { ip; }; 定义白名单,仅限于指定IP可以定义在区域内也可以定义在全局配置。
一般主服务器只允许从服务器传送,而从服务器没有其他需求则不允许任何人传送。
编辑主配置文件:
[root@testnamed]# vim /etc/named.rfc1912.zones
加入以下参数:
zone"test.com" IN {
type master;
file "test.com.zone";
allow-transfer { 10.0.10.61; }; #明确指定白名单,只有列表内的ip才有权限传送
};
保存退出检查语法并且重新加载服务
[root@test~]# rndc reload
serverreload successful
切换至从服务器,加入参数:allow-transfer{ none; }; 如下所示
zone"test.com" IN {
type slave;
file "slaves/test.com.zone";
masters { 10.0.10.60; };
allow-transfer { none; }; #none表示拒绝任何主机对其获取dns数据
};
[root@test2~]# named-checkconf
[root@test2~]# rndc reload
serverreload successful
验证:
在另一台不相干的服务器仅限dig -axfr 命令来获取数据。这里新开一台虚拟机其IP为10.0.10.90
查看网络是否畅通:
[root@mode~]# ping -c 1 10.0.10.60 | head -2
PING10.0.10.60 (10.0.10.60) 56(84) bytes of data.
64bytes from 10.0.10.60: icmp_seq=1 ttl=64 time=0.500 ms
[root@mode~]# ping -c 1 10.0.10.61 | head -2
PING10.0.10.61 (10.0.10.61) 56(84) bytes of data.
64bytes from 10.0.10.61: icmp_seq=1 ttl=64 time=0.411 ms
在slave获取master数据,可以看到,可以正常获取,如下所示:
[root@test2~]# dig -t axfr test.com @10.0.10.60 | head -10
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -taxfr test.com @10.0.10.60
;;global options: +cmd
test.com. 600 IN SOA dns.test.com.admin.test.com. 20131214 7200 600 604800 21600
test.com. 600 IN NS dns.test.com.
test.com. 600 IN NS dns2.test.com.
test.com. 600 IN MX 10mail.test.com.
dns.test.com. 600 IN A 10.0.10.60
dns2.test.com. 600 IN A 10.0.10.61
ftp.test.com. 600 IN CNAME www.test.com.
在其他服务器上使用dig命令来解析获取master数据将会失败,证明白名单功能已经生效,加大了对服务的安全保护,如下所示
[root@mode~]# dig -t axfr test.com @10.0.10.60
;<<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> -taxfr test.com @10.0.10.60
;;global options: printcmd
;Transfer failed.