DNS概述

DNS 为Domain NameSystem(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种机制。其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析。我们平时访问网站比如www.baidu.com我们只需要记住这个域名就可以访问到远程的服务器了,但实际上在我们向远程输入一个域名的时候,是有一个把域名转化为IP的过程,这个过程其实就是DNS服务器在起作用。

DNS的工作流程

假如我们想解析www.googl.com这个域名,首先浏览器将调用本地stub resolver解析器(存根解析器)会试图查看本地host文件,查看此域名有没有对应的IP地址如果没有则向DNS服务器发起查询请求,经过DNS查询,如果发现不是自己负责的区域则向上找根,根收到请求之后,返回查找答案则去查找comcom返回答案则去查找输入的域名服务器,返回的答案则先放入存根服务器再返回给浏览器,这时才可以跟真实服务器进行交互。

DNS服务器搭建之DNS主辅的实现_DNS日志

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进行解析

验证正向解析

DNS服务器搭建之DNS主辅的实现_DNS详解_02

验证反向解析

DNS服务器搭建之DNS主辅的实现_DNS详解_03

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.