DNS and BIND

 

一、DNSbind简介

DNS,Domain Name Service,简称域名服务,BIND(Berkeley Internet Name Domain)是DNS协议的实现,DNS是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

    

二、DNS解析过程

 

wKioL1YH8y6A8Vh2AAIty2HdDuU994.jpg

(图片来自magedu)

过程解析:当用户通过域名访问一个网站时,现在本地查找HOSTS文件中的解析条目,没有对应的条目,则会查找本地DNS缓存,如果没有此域名的缓存,则会把解析请求发送给电脑中配置的本地DNS服务器(本地DNS服务器必须支持对客户端递归)。本地DNS服务器接到请求后,如果是其直接负责区域内的主机,则会返回权威答案(aa),否则,查看是否有此条目的缓存记录,有则返回非权威解析,没有则将请求发送给根,一层一层迭代请求,直到找到主机所属直接区域的DNS服务器,如果该区域内有此主机,则返回对应的IP给本地DNS,本地DNS再发送给客户端,如果该区域内没有此主机,则查询失败,终止查询过程。

    

三、相关概念

 

根域(.)-->一级域(ICCNA)-->二级域(组织域)

一级域:

    组织域:.com,.org,.mil,.gov,.edu,

    国家域:.cn,.hk,.tw,.jp,.ir,.us,.uk

    反向域:.in-addr.arpa

 

domain:域

zone:区域

namespace:名称空间

FQDN:full queritify domain name,全称域

 

查询:

   递归查询:只发起一次请求,最终能得到答案

   迭代:发起一次请求,不一定得到答案

 

DNS监听端口:

    UDP:53   用户客户端查询域名的请求

    TCP:53   用于主从DNS间的区域传送

 

DNS服务器的类型:

      主DNS服务器:维护所负责解析的域内解析库服务器;解析库管理维护;

      辅助DNS服务器:从主DNS服务器或其它的从DNS服务器那里“复制”(区域传递)一份解析库;

      缓存DNS服务器:缓存查询记录

      转发服务器:只负责转发请求,不负责查询

 

资源记录的格式:

   name   [ttl(缓存时间)]   IN    资源记录类型(RRtype)  Value

 

1、SOA

     SOA,start of authority,起始授权记录,一个区域文件有且只能有一个SOA记录,且为资源记录的第一条.

  name: 只能是区域名称,通常可以简写为@,例如:.

  value:有n个数值,最主要的是主DNS服务器的FQDN,点不可省略

  例子:

     @ 600 IN SOA  na.magedu.com. 管理员邮箱(admin.dnsstudy.com.)(

             serial number   ;序列号注释,十进制数据,不能超过10位,通常使用日期

             refresh time ;刷新时间,从服务器从主服务器请求同步解析库的时间间隔

             retry time      ;重试时间,从服务器到主服务器请求同步解析库失败时,再次尝试的

                              ;时间间隔;应该小于refresh time

             expire time ;过期时间,若主服务器在这个时间内仍无法通信则放弃同步

             netgative answer ttl ; 否定答案的缓存时长

         )

   

2、NS:NAME Server,名称服务器,可以有多条记录

   name:区域名称,通常可以简写为@

   value:DNS服务器的FQDN(可以使用相对名称)

   例子:

            @ 600 IN NS ns

 

3、A:Address,主机名到IP的正向解析,只能定义在正向区域数据文件中

   name:FQDN(可以使用相对名称)

   value:IP

   例子:

       www  600(单位s) IN A 1.2.3.4

       www  600(单位s) IN A 1.2.3.5      # 相同FQDN的对应不同的IP时可以做轮询

       www  600(单位s) IN A 1.2.3.4

       ftp  600(单位s) IN A 1.2.3.4


4、AAAA:主机名到IPv6的正向解析

5、CNAME:cononical NAME,设置别名

       name :FQDN

      value :FQDN

      例子:

          ftp IN CHANE www  

6、MX:Mail  eXchanger,邮件交换服务器,可以有多个

       name:区域名称,用于标识smtp服务器

       value:包含优先级和FQDN

           优先级:0-99,数字越小,级别越高,

       例子:

        @ 600 IN MX 10 mail

        @ 600 IN MX 20 mail2

 

7、PRT:Pointer,反向域名解析记录,IP 到FQDN,只能定义在反向区域数据文件中,反向区域名称为

逆向网络地址加.in-addr.arpa后缀组成

     name:IP,逆向的主机地址,例如172.16.100.7的name为7.100,完全格式为7.100.16.172.in-addr.arpa.

     value:FQDN

         例子:

          4.3.2. 600 IN PTR www.test.com.

 

四、配置文件和工具

主配置文件:定义区域 /etc/named.conf

格式:

   options{

        //全局选项

   }

   zone "zone name" {

      //定于区域

   }

   logging{

       //日志文件

   }

   include:加载别的文件

 

语法检查:

name-checkconf 检查主配置文件

name-checkzone "区域文件"  配置文件

 

dig 命令:

  格式:dig [-t type] [-x addr] name @DNS服务器

   选项:+[no]trace [不]适用迭代

               +[no]tcp 是否使用tcp

               +[no]recurse:是否使用递归

 

 

五、DNS配置

1、主从DNS服务器正向以及反向同步设置

 

主服务器(192.168.52.10/etc/named.conf  配置:

--------------------------start--------------------------------------------------

acl allow_clients {            # 设定允许递归IP的ACL
   192.168.52.0/24;
   127.0.0.0/8;
};
 

listen-on port 53 { 192.168.52.10; };        # 监听主机IP地址192.168.52.10的DNS端口
//allow-query     { localhost;};             # 将此项注释,即允许所有主机查询
allow-recursion { allow-clients; };          # 允许对应ACL中的IP递归,默认yes为允许所有
//include "/etc/named.root.key";             #  将此项注释
 
/*-----------建立正向区域---------------------*/
zone "ops.com" IN {        # 增加区域ops.com
    type master;               # 设置为主区域
    file "ops.com.zone";
};
 
/*-----------建立反向区域---------------------*/
zone
"52.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.52.ptr.zone";
    allow-transfer { 192.168.52.20; 
};

 

/*-----------正向区域文件ops.com.zone设置--------*/

[root@Centos6_6-1 ~]# cat /var/named/ops.com.zone 
 
$TTL    1D    @    IN  
SOA  dns1.ops.com.  admin.ops.com. (
        2015091612
        8H
        15M
        7D
        1D
)
 
        IN   NS    dns1
        IN   NS    dns2
dns1    IN   A     192.168.52.10
dns2    IN   A     192.168.52.20
www     IN   A     192.168.52.10

 

/*-----------正向区域文件192.168.52.ptr.zone设置---------------------*/

[root@Centos6_6-1 ~]# cat /var/named/192.168.52.ptr.zone
$TTL    1D    @    IN    
SOA    dns1.ops.com.  admin.ops.com. (
            2015091612
            8H
            15M
            1W
            1D
)
 
       IN    NS   dns1.ops.com.
       IN    NS   dns2.ops.com.
       IN    MX  10  mail.ops.com.
10     IN    PTR  dns1.ops.com.
20     IN    PTR  dns2.ops.com.
10     IN    PTR  www.ops.com.
15     IN    PTR  mail.ops.com.

 

# 设置区域文件访问权限

[root@Centos6_6-1 named]# chown :named ops.com.zone              
[root@Centos6_6-1 named]# chown :named 192.168.52.ptr.zone
[root@Centos6_6-1 named]# chmod 640 ops.com.zone 192.168.52.ptr.zone

检测区域语法

[root@Centos6_6-1 ~]# named-checkzone ops.com /var/named/ops.com.zone   
zone ops.com/IN: loaded serial 2015091611
OK

检测named配置文件语法

[root@Centos6_6-1 ~]# named-checkconf
[root@Centos6_6-1 ~]# service named restart
[root@Centos6_6-1 ~]# cat /var/named/ops.com.zone
$TTL    1D    @    IN  
SOA  dns1.ops.com.  admin.ops.com. (
        2015091612 8H 15M    7D  1D
)
        IN   NS    dns1
        IN   NS    dns2
        IN   MX 10 mail
dns1    IN   A     192.168.52.10
dns2    IN   A     192.168.52.20
www     IN   A     192.168.52.10
mail    IN   A     192.168.52.15
pop     IN   CNAME mail
[root@Centos6_6-1 ~]# cat /var/named/192.168.52.ptr.zone
$TTL    1D    @    IN    
SOA    dns1.ops.com.  admin.ops.com. (
        2015091612 8H 15M    7D  1D
)
 
       IN    NS   dns1.ops.com.
       IN    NS   dns2.ops.com.
       IN    MX  10  mail.ops.com.
10     IN    PTR  dns1.ops.com.
20     IN    PTR  dns2.ops.com.
10     IN    PTR  www.ops.com.
15     IN    PTR  mail.ops.com.

--------------------------- end -----------------------------------------------

DNS从服务器(192.168.52.20)配置(配置后需重启服务)

/etc/named.conf 

zone "ops.com" IN {
    type slave;
    masters { 192.168.52.10; };
    file "slaves/ops.com.zone";
    allow-transfer { none; };
};
 
zone "52.168.192.in-addr.arpa" IN {
    type slave;
    masters { 192.168.52.100; };
    file "slaves/192.168.52.arpa.zone";
    allow-transfer { none; };
};

验证

[root@Centos6_6-1 ~]# tail /var/log/messages     #查看日志文件
...
Sep 18 23:30:59 Centos6_6-1 named[4445]: zone ops.com/IN: sending notifies (serial
2015091611)
Sep 18 23:34:07 Centos6_6-1 named[4445]: client 192.168.52.20#52910: transfer of
'ops.com/IN': AXFR started
Sep 18 23:34:07 Centos6_6-1 named[4445]: client 192.168.52.20#52910: transfer of
'ops.com/IN': AXFR ended
...
Sep 19 00:54:27 Centos6_6-1 named[4793]: zone ops.com/IN: sending notifies (serial
2015091612)
Sep 19 00:56:01 Centos6_6-1 named[4793]: client 192.168.52.20#54891: transfer of
'52.168.192.in-addr.arpa/IN': AXFR started
Sep 19 00:56:01 Centos6_6-1 named[4793]: client 192.168.52.20#54891: transfer of
'52.168.192.in-addr.arpa/IN': AXFR ended
[root@Centos6_6-2 ~]# ll /var/named/slaves/        # 文件已经生成,可以用cat查看里面内容
                                                    是否和主DNS的是否一致
-rw-r--r--. 1 named named 443 Sep 17 07:05 192.168.52.ptr.zone
-rw-r--r--. 1 named named 452 Sep 17 07:09 ops.com.zone

 # dig工具查询相关RR是否正常

[root@Centos6_6-1 ~]# dig -t NS ops.com @192.168.52.10   
;;
QUESTION SECTION:
;ops.com.                        IN        NS
;;
ANSWER SECTION:
ops.com.                86400        IN        NS        dns2.ops.com.
ops.com.                86400        IN        NS        dns1.ops.com.
;;
ADDITIONAL SECTION:
dns1.ops.com.                86400        IN        A        192.168.52.10
dns2.ops.com.                86400        IN        A        192.168.52.20
 
[root@Centos6_6-1 ~]# dig -x 192.168.52.10    @192.168.52.10
[root@Centos6_6-1 ~]# dig -t A www.ops.com   @192.168.52.20
[root@Centos6_6-1 ~]# dig -t MX ops.com    @192.168.52.20

六、子域授权及转发

子域授权:

1、在父域服务器(192.168.52.10)上区域文件/var/named/ops.com.zone添加一下两行:

linux     IN   NS      dns.linux
dns.linux   IN   A       192.168.52.30

2、子域服务器(192.168.52.30)上的配置文件/etc/named.conf

# 新增区域 linux.ops.com
zone "linux.ops.com" IN {
    type master;
    file "linux.opscom.zone";
};

# 子域服务器新建对应linux.ops.com.zone 区域文件

[root@Centos6_6-3 ~]# vim /var/named/linux.ops.com.zone 
$TTL    1D    @    IN  
SOA   dns.linux.ops.com.   admin.ops.com. (
        2015091610
        8H
        15M
        7D
        1D
)
 
       IN  NS    dns
dns     IN  A    192.168.52.30
www     IN  A    192.168.52.30
[root@Centos6_6-1 named]# chown :named linux.ops.com.zone
[root@Centos6_6-1 named]# chmod 640 linux.ops.com.zone
 
[root@Centos6_6-1 ~]# dig -t A [email protected]
...
;;QUESTION SECTION:
;www.linux.ops.com.                IN        A
 
;;ANSWER SECTION:
www.linux.ops.com.        86400        IN        A        192.168.52.30
 
;;AUTHORITY SECTION:
linux.ops.com.                86400        IN        NS        dns.linux.ops.com.
 
;;ADDITIONAL SECTION:
dns.linux.ops.com.        86400        IN        A        192.168.52.30

区域转发:

1、子域域名服务器(192.168.52.30)上的配置文件/etc/named.conf

zone "ops.com" IN {    # ops.com区域解析请求转发到父域域名服务器192.168.52.10
    type forward;
    forwarders { 192.168.52.10; };
};
[root@Centos6_6-3 ~]# dig -t A www.ops.com @192.168.52.30        # 解析父域的域名验证转发是否成功
...
;;QUESTION SECTION:
;www.ops.com.                        IN        A
;;ANSWER SECTION:
www.ops.com.                86400      IN        A        192.168.52.10
;;AUTHORITY SECTION:
ops.com.                86400        IN        NS        dns1.ops.com.
ops.com.                86400        IN        NS        dns2.ops.com.
;;ADDITIONAL SECTION:
dns2.ops.com.                86400     IN        A        192.168.52.20
dns1.ops.com.                86400     IN        A        192.168.52.10

 

六、view(视图)

    视图可以实现不同的请求返回不同的解析值,这对不同运营商的用户访问web服务器时返回解析IP时有非常重要的作用,由于国情原因,跨运营商访问会出现互联互通问题,而view就可以结合acl实现联通用户访问web服务器可以解析返回联通IP,而电信用户访问返回电信IP。定义view之后,所有的zone都需要放置在view中,此处在/etc/named.rfc1912.zones 文件中定义视图,需要把/etc/named.conf文件中的根zone删除,重新定义到此文件view中,否则会报错。

配置:

[root@localhost named]# cat /etc/named.rfc1912.zones
...
acl ct_ip { 192.168.0.0/16; };      # 模拟定义电信IP ACL
acl cnc_ip { 172.16.0.0/16; };      # 模拟定义联通IP ACL
view telecom {                       # 模拟定义电信view
        match-clients { ct_ip; };      # 匹配电信 ACL
---------------------------------------------------------------------------------------
zone "." IN  
zone "localhost.localdomain" IN
zone "localhost" IN zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa"
IN zone "1.0.0.127.in-addr.arpa" IN zone "0.in-addr.arpa" IN
注意:节省篇幅,里面的value值不列出来。
--------------------------------------------------------------------------------------------------------------------------------------
zone "devops.com." IN {
        type master;
        file "devops.com.telecom";
    };
};
 
view unicom {              # 模拟定义联通view
    match-clients { cnc_ip;any; };  # 匹配联通ACL,其他不匹配的也默认以联通视图解析
    zone "devops.com." IN {
        type master;
        file "devops.com.unicom";
    };
};
[root@localhost named]# cat devops.com.telecom   # 定义区域telecom的zone文件
$TTL    1D    @     IN  
SOA     dns.devops.com.   admin.devops.com. (
        2015091612   8H     15M  1W   1D )
 
      IN   NS    dns
dns   IN   A     192.168.52.100
www   IN   A     192.168.52.200
[root@localhost named]# cat devops.com.unicom   # 定义区域unicom的zone文件d
$TTL    1D    @     IN  
SOA     dns.devops.com.   admin.devops.com. (
        2015091612   8H     15M  1W   1D )
 
      IN   NS    dns
dns   IN   A     172.16.0.100
www   IN   A     172.16.0.200

 

[root@localhost ~]# ifconfig       # 实验要求,定义了一个模拟电信段IP:192.168.52.100 
                                   #和一个模拟联通段的IP::172.16.0.100
eth0      Link encap:Ethernet  HWaddr 00:0C:29:9B:17:8B 
          inet addr:192.168.52.100  Bcast:192.168.52.255  Mask:255.255.255.0
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:9B:17:8B 
          inet addr:172.16.0.100  Bcast:172.16.255.255  Mask:255.255.0.0

验证:

[root@localhost named]# dig -t A www.devops.com @192.168.52.100       # 验证电信用户的访问解析
;;QUESTION SECTION:
;www.devops.com.                        IN       A
;;ANSWER SECTION:
www.devops.com.           86400        IN        A   192.168.52.200  # 成功返回了电信IP
;;AUTHORITY SECTION:
devops.com.               86400        IN        NS        dns.devops.com.
;;ADDITIONAL SECTION:
dns.devops.com.           86400        IN        A        192.168.52.100

 

[root@localhost named]# dig -t A www.devops.com @172.16.0.100  # 验证联通用户的访问解析
 
;;QUESTION SECTION:
;www.devops.com.                      IN        A
;;ANSWER SECTION:
www.devops.com.            86400      IN        A    172.16.0.200    # 成功返回了联通IP
;;AUTHORITY SECTION:
devops.com.                86400      IN        NS     dns.devops.com.
;;
ADDITIONAL SECTION:
dns.devops.com.            86400      IN       A        172.16.0.100

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章