l 第一部分,Bind简介与安装配置


浏览网站对我们来说是一件简单的人人都会做的事情,可以我们有没有考虑过一个问题.数据包在网络中传输是经过路由器层层转发而达到目的地的,而路由器的转发机制是依赖ip寻址,可是访问一个网站的时候我们并没有在浏览器中输入ip这个东东吧!那计算机是怎么把我们的请求送到正确的目的地呢?

这就需要在我们的网络中存在一个服务器,这个服务器可以把我们在浏览器中输入的类似www.google.com网站地址转换为ip地址。随着互联网规模的扩大,单单一台服务器肯定不能担此重任。这就需要一种机制,把这些保存着众多由主机地址和ip地址的信息的数据库分层存放,DNS就是这次分层存放的解决办法。而Bind就是这种机制的实现软件。


一、Bind的安装配置

 首先我来说清楚几个容易让人混淆的概念,我们的服务协议是DNS,提供服务的程序叫bind,而程序运行时候进程名叫named。是不是很诡异?好了,我们来安装bind吧。

(养成一个习惯,安装后先查询一下生成了哪些文件,这里简要列举一下我们能常用到的。)

[root@localhost ~]# yum install bind
[root@localhost ~]# rpm -ql bind
  ....
/etc/named
/etc/named.conf-----------------------主程序的配置文件
/etc/named.rfc1912.zones------------区域文件列表
/etc/sysconfig/named-----------------程序启动脚本配置文件
.........
/usr/lib64/bind
/usr/sbin/named------------------------主程序二进制文件
/usr/sbin/named-checkconf-----------检查配置文件语法
/usr/sbin/named-checkzone-----------检查区域文件语法
/usr/sbin/named-compilezone
/usr/sbin/named-journalprint
......
/var/named/slaves----------------------辅助dns的数据库文件
/var/run/named-------------------------程序运行锁文件

二、配置文件介绍

1. 主配置文件

配置文件中必须包含三个区域,根区域,localhost区域和127.0.0.1区域,如果是用rpm安装的,则安装包也会在/var/named下自动生成这个三个区域文件的数据库文件,/var/named/{named.localhost,   named.loopback,   named.ca}

因为我们是使用rpm包安装的,所以会自动生成一个配置文件/etc/named.conf,可以在这个配置文件上修改,也可以自己写一个配置文件。先来带大家看一下安装包生成的配置文件吧

[root@localhost ~]# vim /etc/named.conf

DNS之bind,转发,子域转发,授权等配置_dns 解析 子域授权 主从复制 区域传

       2. 定义区域的文件

[root@localhost ~]# cat /etc/named.rfc1912.zones
.....
zone "localhost" IN {
type master;------------------------------类型为主dns
file "named.localhost";------------------对应的数据库文件相对路径
allow-update { none; };---------------用分号隔开的格式书写
};

       3. 这些是rpm自动给我们生产的数据库文件

[root@localhost ~]# ls /var/named/
data/            named.ca         named.localhost  slaves/
dynamic/         named.empty      named.loopback


l 第二部分,实例讲解bind实现主从,子域授权,转发,view功能的实现

一、正向解析,反正解析.

实例:

假设我们有一个域名为nyist.com的域名,域中有两台域名服务器

dns-----ns1.nyist.com:  ip:172.16.20.61

dns-----ns2.nyist.com:  ip:172.16.20.65

       1. 编辑主dns的主配置文件。

       注意:如果是使用rpm包提供的主配置文件的时候记得把监听的端口改一下,改成主机的网卡ip。或者直接将监听端口那一行注释掉,表示默认监听所以端口。(唉,博主有一次失误,害得我吧!唉,不说了...

   (记得除了我们需要的nyist区域以为还要包含另外3个区域哦。。。)

root@station57 ~]# vim /etc/named.conf
1 options {
  2    directory "/var/named";
  3 };
  4
  5 zone "." IN {
  6      type hint;
  7      file "named.ca";
  8
  9
 10 };
 11 zone "loalhost." {
 12       type master;
 13       file "named.localhost";
 14 };
 15 zone "1.0.0.127.in-addr.arpa." {
 16       type master;
 17       file "named.loopback";
 18 };
 19 zone "nyist.com" {
 20       type master;
 21       file "nyist.com.zone";
 22 };

   配置文件中几个安全控制选项(man named.conf请自查)

       Allow-transfer {};允许传送

Allow-query{}:开发查询功能

Allow-recursion{};递归白名单

Allow-upsate none }:允许动态更新数据库白名单

       2. 修改主配置文件权限和属主属组

[root@station57 ~]# ll /etc/named.conf
-rw-r--r-- 1 root root 253 Mar  9 23:01 /etc/named.conf
[root@station57 ~]# chown root:named /etc/named.conf
[root@station57 ~]# chmod 640 /etc/named.conf
[root@station57 ~]# ll /etc/named.conf
-rw-r----- 1 root named 253 Mar  9 23:01 /etc/named.conf

       3. 检查主配置文件的语法

[root@station57 ~]# named-checkconf

       4. Ok,语法没有错误我们就可以启动了

[root@station57 ~]# service named start
Starting named: named: already running      [  OK  ]

       5. 增加自定义nyist的区域文件

[root@station57 ~]# vim /var/named/nyist.com.zone
  1 $TTL 1D
  2 @       IN     SOA      @ nyist.com. (
  3                                 2014031302      ; serial
  4                                         1D      ; refresh
  5                                         1H      ; retry
  6                                         1W      ; expire
  7                                         3H )    ; minimum
  8         IN      NS      ns1
  9         IN      NS      ns2
 10 ns1     IN      A       172.16.20.61
 11 ns2     IN      A       172.16.20.51
 12 www     IN      A       172.16.20.61
 13 ftp     IN      A       172.16.20.63

       6. 检查区域文件语法

[root@station57 ~]# named-checkzone "nyist.com" /var/named/nyist.com.zonezone nyist.com/IN: loaded serial 2014031302
OK

       7. 没有问题我们就可以启动了,此时主机dns1就已经可以工作了。

             可以用dig验证

[root@station57 ~]# dig -t A ftp.nyist.com @172.16.20.61

       8. 配置反向

       (先在配置文件中添加区域文件)

[root@station57 ~]# vim /etc/named.conf
 zone "20.16.172.in-addr.arpa."IN{
       type master;
       file "172.16.20.zone";
  };

       (再添加反向数据库文件)

[root@station57 named]# vim 172.16.20.zone
  1 $TTL 1D
  2 @       IN     SOA      ns1.nyist.com    adm.nyist.com. (
  3                                 2014031302      ; serial
  4                                         1D      ; refresh
  5                                         1H      ; retry
  6                                         1W      ; expire
  7                                         3H )    ; minimum
  8         IN      NS      ns1
  9         IN      NS      ns2
 10 61      IN      PTR     ns1.nyist.com.
 11 51     IN      PTR      ns2.nyist.com.
 12 61     IN      PTR      www.nyist.com.
 13 63     IN      PTR      ftp.nyist.com.

       (检查区域文件语法)

[root@station57 named]# named-checkzone "20.16.172.in-addr.arpa." /var/named/172.16.20.zone
zone 20.16.172.in-addr.arpa/IN: loaded serial 2014031302
OK
[root@station57 named]# dig -x 172.16.20.63 @172.16.20.61

二、主从配置

       1. 完全区域传送

[root@localhost ~]# dig -t axfr nyist.com @172.16.20.65

   (如果在区域文件中定义allow-transfer 限制,则被限制的主机不能完成区域传送)

zone "nyist.com." IN {
        type slave;
        masters { 172.16.20.61; };
        file "slaves/nyist.com";
     allow-transfer { none; };----------------禁止所有主机区域传送

       2. 配置从服务器区域文件。


[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "nyist.com" IN {
        type slave;
        masters { 172.16.20.61; };
        file "slaves/nyist.com";
};


       3. 因为是从服务器,所以区域文件不用自己写,重启一下服务从服务器就可以工作了。

[root@localhost ~]# service named restart

       4. 此时从服务器就会自动去主服务器那里完成第一次完全区域传送。

           传送的内容在/var/named/slaves/nyist.com中

       5. 好了,用dig试一下你的从服务器工作情况吧,可以通过tail命令及时查看服务器工作信息呀。

[root@station57 named]# tail -F /var/log/messages

三、Rndc的几个用法

       Rndc是bind的一个远程管理工具,是bind软件中的一个管理组件,它的配置文件在/etc/rndc.conf。通过它可以安全的管理我们的bind运行,可以通过他让bind重读配置文件,打开日志开关、清空缓存,定义调试级别等等。干说不练不行,带大家看一下它的几个主要用法吧。


      1. 重载区域文件

[root@localhost ~]# rndc reload
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
server reload successful

       2. 重读配置文件并加载新增区域

[root@station57 named]# rndc reconfig

       3. 关闭或开启查询日志

       建议正常工作时候关闭查询日志,因为查询日志会造成大量硬盘写操作,会降低性能。

[root@station57 named]# rndc querylog

       4. 查看bind运行详情

[root@station57 named]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6
CPUs found: 2
worker threads: 2
number of zones: 20
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is ON
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

       5. 改变debug级别

             把级别调为4

[root@station57 named]# rndc status 4

       6. 如果rndc无法正常工作,可尝试使用rndc-confgen 生成/etc/rndc.conf配置文件,并将配置文件中的后半部分复制到BIND的主配置文件中并按指示启用即可

[root@station57 named]# rndc-confgen [-r /dev/urandom] > /etc/rndc.conf

四、子域授权

   如果一个公司有几个比较大的部分,一个域可能就无法完成需求,这就需要划分子域了。而子域要能正常解析工作就需要父域来授权。

   (接上边案例扩展)

假设我们有一个域名为nyist.com的域名,域中有两台域名服器

dns-----ns1.nyist.com:  ip:172.16.20.61

dns-----ns2.nyist.com:  ip:172.16.20.65

现在为nyist.com增加一个子域 soft.nyist.com

dns--------ns3.soft.nyist.com   ip:172.16.20.51

       1. 首先在父域的主dns上为子域soft.nyist授权

       在父域的nyist的区域文件中添加一个子域的ns记录

DNS之bind,转发,子域转发,授权等配置_dns 解析 子域授权 主从复制 区域传_02


       2. Ok,父域已经授权,那么让我们去配置子域dns吧。

[root@station64 ~]# vim /etc/named.rfc1912.zones
zone "soft.nyist.com." IN {
        type master;
        file "soft.nyist.com.zone";
};

       3. 编辑添加文件

[root@station64 ~]# vim /var/named/soft.nyist.con.zone
$TTL=600
@         IN   SOA     dns.soft.nyist.com.  xuqimin.nyist.com.(
                                              2014031401
                                               1H
                                               5M
                                               6D
                                               12H)
         IN    NS     dns
         IN    MX     10 mail
dns      IN    A      172.16.20.51
www      IN    A      172.16.20.51
ftp      IN    A      172.16.20.53
help     IN    CNAME   www

       4. 记得修改配置文件和区域数据库文件属主数组和权限640

[root@station64 named]# chown root:named /etc/named.rfc1912.zones
[root@station64 named]# chown root:named /etc/named.conf
[root@station64 named]# chown root:named /var/named/named*

       5. 好了,检查配置文件并启动就可以工作了



五、子域转发机制(在ns3.soft.nyist.com上配置)

假设我们子域soft.nyist.com不能上互联网,它只负责管理它的子域的查询,那么如果有主机把dns指向了ns1.soft.nyist.com这个主机让它解析非soft.nyist.com的域的时候就需要用到dns的转发机制了。

   (注意:配置转发的时候如果你使用的是rpm包生成的配置文件的时候,记得要将//include "/etc/named.root.key";这一个包含文件去掉。因为转发的时候它会验证合法性)

你要启用转发,请确保要转发的主机(ns1.nyist.com)开通了允许递归的选项.   recursion yes;

Forward first;如果对发无应答,就去找跟继续查询

Forward only;如果对方无应答,不再去找跟查询。

       1. 配置一个转发区间,转发父域负责的区域。

[root@station64 named]# vim /etc/named.rfc1912.zones
zone "nyist.com." IN {
        type forward;
         forwarders { 172.16.20.61; };
         forward only;
};

       2. 将所有子域不负责的区域都转发给父域

   编辑主配置文件,在全局段添加一个转发配置

[root@station64 named]# vim /etc/named.conf

DNS之bind,转发,子域转发,授权等配置_dns 解析 子域授权 主从复制 区域传_03

       Ok.。。。转发配置好了,现在ns3.soft.nyist.com 这个台主机就可以把他不负责的区域的请求解析转发给ns1.nyist.com 这台dns解析了。

六、View的实现

View实现了将不同ip的请求解析为不同的服务器地址。解决了多个服务器满足不同网络、地区,人员的请求。分担了服务器的访问压力,提供了简单的负载均衡。

假如我们需要将来自172.16.120.0/16这个网络中的请求访问www.soft.nyist.com返回的解析结果为192.168.1.1.其他的返回跟上面实例一样。

(注意,使用view之后,所以区域都应该在view中包含,特别注意主配置文件中定义的跟区域,要将它包含在view中)

       这里我们在子域soft.nyist.com中完成view的实现:

       1. 编辑区域配置文件

view in {
    match-clients { 172.16.120.0/24; }
    zone "soft.nyist.com." IN {
          type master;
          file "soft.nyist.com.zone.in";
    };
};
view default {
    match-clients { any; };
zone "." IN {
        type hint;
        file "named.ca";
};
.......
........
zone "soft.nyist.com." IN {
        type master;
        file "soft.nyist.com.zone";
};
zone "nyist.com." IN {
        type forward;
         forwarders { 172.16.20.61; };
         forward only;
        };
};


       2. 编辑区域数据库文件

[root@station64 named]# vim /var/named/soft.nyist.com.zone.in
$TTL 600
@    IN    SOA  ns.soft.nyist.com   xuqimin.nyist.com (
                                 2014031401
                                 1D
                                 5M
                                 6D
                                 12H)
     IN      NS      ns
ns   IN      A      192.168.1.1
www  IN      A      192.168.1.2
ftp  IN      A      192.168.1.3


       3. 使用不同主机测试返回结果。


DNS之bind,转发,子域转发,授权等配置_dns 解析 子域授权 主从复制 区域传_04

DNS之bind,转发,子域转发,授权等配置_dns 解析 子域授权 主从复制 区域传_05

       (nds服务器通过view实现了将来自不同网络的主机解析到不同的ip地址,这里的ip范围可以自由设定,本例子以最简单的一种方式实现了view的功能,能多复杂繁琐的设置也都是在这上面的扩展,慢慢研究吧!)