一、介绍

DNS(Domain Name System)域名系统,是一种用于TCP/IP应用程序的分布式数据库,他提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。DNS最常用的版本是BIND(Berkeley Internet Name Domain)——伯克利Internet域名服务器。

1、服务器类型

   缓存DNS服务器:不需要注册,内部客户端使用,数据由客户端请求后将结果缓存到服务器上

   主DNS服务器(master):保存本域的NS记录、主机A记录、MX记录、子域服务器记录等数据库更新由管理员手动完成

   辅助DNS服务器(slave):也叫从服务器,数据库跟新从主服务器或其他辅助DNS服务器那里同步获取

   子域服务器:需要在父域服务器授权

2、域名分级结构

顶级域:“.”也称之为根域,全球总共有13台根服务器,装完bind后在/var/named/named.ca 中保存的就是全球的13台根DNS信息

一级域:

   国家域:.cn, .hk, .iq, .us, .jp, .uk

   组织域:.com, .net, .edu, .org, .gov, .mil, .cc, .mobi

   反向域:arpa    FQDN <--IP

3、解析过程

153419848.png

(1)客户端client发起查询请求www.shohu.com,客户机首先查询自己的缓存了有没有,然后在查看自己的hosts文件,如果没有,把请求提交给local DNS

(2)local DNS接受到请求后,首先检查本地缓存中,有没有客户请求的地址,如果有就直接将缓存中的结果相应给客户,否则就开始迭代查询,去找根服务器root DNS

(3)根服务器root DNS接收到local DNS的请求并查找自己的区域文件记录,发现没有www.sohu.com的记录,但是我这里有.com的记录,我把.com以下的解析都授权给.com了, 然后将.com的地址回应给local DNS

(4)local DNS收到根root DNS的返回结果后,就知道了.com的地址,并且这不是client所需要的结果,所以local DNS再去找.com

(5).com接收到local DNS的请求后查询自己的区域文件记录。发现他这里也没有www.sohu.com的记录,但是有sohu.com的记录,并且已经将解析权限授权给了sohu.com,然后将sohu.com的地址回应给local DNS

(6)local DNS收到.com的回应,发现依然不是最终clent需求的的结果,于是乎local DNS再去找sohu.com

(7)sohu.com接收到local DNS的请求后,查询自己的区域文件记录,自己这里就有local DNS所要的答案,于是就将结果回应给localDNS

(8)local DNS收到sohu.com的结果后,发现这就是clent请求的地址,于是local DNS现将结果缓存一份然后就将最终结果通知clent

(9)client收到最终结果后就可以顺利的访问到www.sohu.com了

二、测试命令汇总

bind的测试工具就包含在bind-utils软件包中,

1、dig

   基本语法:dig -t 资源记录类型 名称 @server(使用那台DNS服务器去查询,也可以不跟)

dig -t A    #主机A记录
       NS   #NS服务器记录
       MX   #邮件记录
       x    #反向解析
       axfr #查询所有记录,也叫区域传输
实例:
使用DNS服务器172.16.0.1查询NS记录root-server.net
# dig -t NS root-server.net @172.16.0.1
使用DNS服务器172.16.0.1查询全球13台根DNS的NS记录
# dig -t NS . @172.16.0.1
使用DNS服务器172.16.0.1查询www.sohu.com
# dig -t A www.sohu.com @172.16.0.1


2、host

基本语法与dig命令基本相同:host -t 资源记录类型 名称

例如:

# host -t A www.baidu.com

3、rndc

这个命令功能可以查看DNS服务的运行状态,可以重新加载配置文件和清空缓存

rndc status             #查看服务器状态
rndc reload             #重新装载配置文件及区域解析库文件
rndc reconfig           #仅重读配置文件      
rndc flash              #清空缓存
rndc trace              #提升调试级别,级别越高信息越详细
rndc trace LEVEL
    rndc trace 3        #指定调试级别为3
rndc notrace            #关闭调试
rndc querylog           #打开查询日志功能

4、named-checkconf

检查配置文件有没有错误,直接输入named-checkconf命令就可以测试,没返回任何信息就是没有错误。

5、named-checkzone

检查区域库文件有没有错误

基本语法:named-checkzone "区域名" 区域库文件路径

例如:

[root@localhost named]# named-checkzone "lyd.com" /var/named/lyd.com.zone
zone lyd.com/IN: loaded serial 20130826
OK

如果返回OK表示没有错误

三、实现过程

1、安装

   安装很简单,如果配置好yum源的话直接yum安装,如果没有yum源可以把光盘做成yum源,或者直接挂载光盘安装就可以了。可以一起将bind-utils工具包装上

  # yum install bind bind-utils

2、主配置文件介绍

主配置文件:/etc/name.conf,每个语句都要使用分号结尾;
    定义各区域的全局配置;options{};
    定义视图;view {};
    定义日志:logging {};
    定义区域:zong "." IN {};    #这里定义的是根提示
    引用其他配置文件:include "";
程序文件:/usr/sbin/named  
区域配置文件:/etc/named.rfc1912.zones
配置文件中的控制命令
allow-transfer {};      #允许区域传送的主机地址
allow-query {};         #允许查询的主机地址
allow-recursion {};     #允许递归的客户端列表,一般只给本地客户端做递归
allow-update {};        #允许更新的主机

3、配置最简单的DNS缓存服务器

(1)修改主配置文件

# vi /etc/named.conf
options {
//      listen-on port 53 { 127.0.0.1; };  #注释掉或者改成本机的IP
//      listen-on-v6 port 53 { ::1; };   
//      allow-query     { localhost; };    #允许查询的客户端IP范围改成all或者直接注释,
        }

(2)然后启动服务就可以了

[root@localhost ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]

注意:Centos6启动可能要等一会才能启动,Centos5上没有这问题。

(3)启动成功后就是一台DNS缓存服务器了

4、区域配置

(1)编辑区域配置文件/etc/named.rfc1912.zones添加一个正向区域

# vi /etc/named.rfc1912.zones

zone "lyd.com" IN {
        type master;                #定义区域类型
        file "lyd.com.zone"         #指定区域库文件
};

检查配置文件有没有错误

# named-ceckconf

(2)添加区域库文件

# vi /var/named/lyd.com.zone

$TTL 3600
@       IN      SOA     ns.lyd.com.     admin.lyd.com. (
                        2013082601     #序列号 
                        2H             #刷新时间
                        10M            #重试时间
                        7D             #过期时间
                        6H)            #否定回答的ttl
        IN      NS      ns             #主及NS记录
        IN      MX  10  mail           #邮件记录
ns      IN      A       172.16.3.3     #主机A记录
mail    IN      A       172.16.3.2
www     IN      A       172.16.3.5
www     IN      A       172.16.3.6
ftp     IN      CNAME   www            #别名记录

修改区域配置文件权限

# chown :named lyd.com.zone

检查区域配置文件有没有语法错误

# named-checkzone "lyd.com" /var/named/lyd.com.zone

重新加载配置文件

# rndc reload

验证结果

185957612.png

5、反向区域

(1)添加区域配置文件

# vi /etc/named.rfc.1912.zones

zone "3.16.172.in-addr.arpa" IN {
        type master;
        file "172.16.3.zone";
};

检查配置文件

# named-checkconf

(2)添加区域库配置文件

$TTL 3600
@       IN      SOA     ns.lyd.com.     admin.lyd.com. (
                        20130826
                        2H
                        10M
                        7D
                        6H)
        IN      NS      ns.lyd.com.
3       IN      PTR     ns.lyd.com.
2       IN      PTR     mail.lyd.com.
5       IN      PTR     www.lyd.com.
6       IN      PTR     www.lyd.com.

修改区域库文件权限

# chown :named 172.16.3.zone

检查区域库文件有没有错误

# named-checkzone "3.16.172.in-addr" /var/named/172.16.3.zone

重新加载配置文件和库文件

# rndc reload

验证

194835474.png

四、主从复制

先介绍一下环境吧,前边的DNS 作为主DNS服务器IP:172.16.3.3

再配置一台服务器安装DNS做辅助DNS服务器IP:172.16.3.4

1、配置主DNS配置文件

zone "lyd.com" IN {
        type master;
        file "lyd.com.zone";
        allow-transfer { 172.16.3.4; };    #允许区域传输的地址
};
zone "3.16.172.in-addr.arpa" IN {
        type master;
        file "172.16.3.zone";
        allow-transfer { 172.16.3.4; };
};

# named-checkconf

2、配置主DNS的区域库文件添加从DNS的NS记录和主机A记录

$TTL 3600
@       IN      SOA     ns.lyd.com.     admin.lyd.com. (
                        2013082601     #修改完区域文件后增大序列号
                        2H
                        10M
                        7D
                        6H)
        IN      NS      ns
        IN      NS      ns2            #从DNS的NS记录
        IN      MX  10  mail
ns      IN      A       172.16.3.3
ns2     IN      A       172.16.3.4     #从DNS的A记录
mail    IN      A       172.16.3.2
www     IN      A       172.16.3.5
www     IN      A       172.16.3.6
ftp     IN      CNAME   www

# named-checkzone "lyd.com" /var/named/lyd.com.zone

反向区域要添加从DNS的NS和PTR记录,修改序列号

3、配置从服务器添加区域配置文件

zone "lyd.com" IN {
        type slave;                    #区域类型为slave从
        file "slaves/lyd.com.zone";
        masters { 172.16.3.3; };       #指定主DNS
        allow-transfer { none; };      #不允许任何主机区域传送
};
zone "3.16.172.in-addr.arpa" IN {      #反向区域
        type slave;
        file "slaves/172.16.3.zone";
        masters { 172.16.3.3; };
        allow-transfer { none; };
};

检查配置文件有没有错误

named-checkconf

启动服务

service named start

4、在从DNS验证

214814754.png

区域文件已经传送过来了。

注意:区域文件传送不成功防火墙端口开放或者关闭防火墙,SELinux是否关闭

五、转发

1、转发所有针对非本机负责解析的区域的请求

options {
    forward only;    #only仅占发,first转发返回没结果时自己去查询
    forwarders { 172.16.0.1; };
};

2、仅转发特定区域的请求

zone "sohu.com" IN {
    type forward;
    forward only;
    forwarders { 172.16.0.1; };
};

转发前提:接收转发请求的服务器必须能够为请求者做递归查询

3、注释以下行

//      dnssec-enable yes;
//      dnssec-validation yes;
//      dnssec-lookaside auto;
//      managed-keys-directory "/var/named/dynamic";
//      include "/etc/named.root.key";

这几行都在主配置文件中但不是连续的,都找出来注释掉

4、测试指定使用172.16.3.3做解析

222507717.png

六、子域

域内:划分出小域即为子域

授权:委派,将请求委派给子域来管理

   在父域区域记录中添加子域的NS记录

1、在父域给子域授权

$TTL 3600
@       IN      SOA     ns.lyd.com.     admin.lyd.com. (
                        2013082601
                        2H
                        10M
                        7D
                        6H)
        IN      NS      ns
        IN      NS      ns2
        IN      NS      dep            #子域的NS记录
        IN      MX  10  mail
dep     IN      A       172.16.3.7     #子域的A记录
ns      IN      A       172.16.3.3
ns2     IN      A       172.16.3.4
mail    IN      A       172.16.3.2
www     IN      A       172.16.3.5
www     IN      A       172.16.3.6
ftp     IN      CNAME   www

2、在子域服务器上建立子域区域,和区域库文件

父域是可以直接解析子域的,子域默认是不能解析父域的,但可以进行转发进行访问父域

未完待续

七、view试图


八、压力测试