BIND


Bind 是由BSD维护的一套域名解析系统,今天我们在CENTOS6.4中实现以下功能
1, 缓存DNS服务器
2, 主DNS服务器
3, 辅DNS助服务器
4, 子域授权
5, Acl和view
6, 日志系统
首先,我们查看是否安装了bind , rpm –qa |grep bind,否则使用yum install bind 安装
 bind-utils-9.8.2-0.17.rc1.el6.x86_64  为bind的客户端工具
bind-libs-9.8.2-0.17.rc1.el6.x86_64   为bind的库文件
bind-9.8.2-0.17.rc1.el6.x86_64  为bind的主文件
一, 缓存DNS服务器的实现
BIND安装完成后即为缓存DNS服务器,我们解析域名的一般先查询缓存DNS,如果缓存DNS没有,则需要去由缓存DNS代为查询,当然我们需要对其配置文件作一些设置,我们只需要对/etc/named.conf文件进行简单注释就可以达到缓存DNS 的效果,为了更好的认识DNS的配置文件,我们决定手动书写/etc/name.conf文件
[root@dns named]# vim /etc/named.conf
options {
        directory "/var/named";  //定义区域文件所在的位置
};
zone "." IN {      //声明根域
        type hint;
        file "named.ca";
};
zone "localhost" IN {   //声明本地正向域
        type master;
        file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN { //声明本地反向域
        type master;
        file "127.0.0.zone";
};
我们在/var/named下创建解析文件,以本地的正向与反向解析为例,我们创建localhost.zone
我们首先来看解析数据库的格式
NAME [TTL] IN  RR_TYPE  VALUE
RR_TYPE的类型有很多种,SOA ,NS, A ,AAA  ,  PTR , MX
SOA ,Start Of Authority, 起始资源录,不能省略的资源记录类型,来看看我是怎样书写SOA记录的。

@ @表示zone的名字,那我们zone的名字叫 localhost,那@就代表localhost
. .代表这条记录为的FQDN,而不是一个主机名,主机名+域名=FQDN
; 代表注释

 

发现我没有写TTL值,那什么是TTL值呢,为什么可以不写呢
在解析数据库中支持宏,而TTL就是其中的一种,常见的还有$ORIGIN
$TTL  TTL全名叫Time To live,存活时间,就是缓存服务器在迭代查询后资源记录保留的时间
$ORIGIN 这个设定可以重新设定zone的定义,在预设情况下这个正解的zone是由named.conf所设定的
@               IN      SOA     localhost.      admin.localhost.
Localhost. 为此区域的Master DNS
admin.localhost. 表示管理员的邮箱地址,因为@被当做zone的名字了,所以只能用点号(.)
表示@ 
接下来是SOA的5个重要参数,
2013081601 serial值,用于同步从DNS,此值需要手动修改,所以每次修改完别忘了修改,不然不能立马生效的,要等到刷新时常才可以和主DNS保持同步。
1H 刷新时常,多久和主DNS联系一次,看主DNS还活着嘛,并且同步数据
10M 重试时间,和主DNS联系不上时,过10分钟再试一次,然后过10分钟再试
7D 过期时间,7天后如果还联系不到主DNS,就代表主DosNS挂了,自己也要陪葬,对外比提供解析服务
1D 否定回答的TTL值,如果查询到没有此记录,那在缓存服务器中保留的时间为1D

NS,Name Server,名字服务器
                IN      NS      localhost.                                       
我们发现前面的NAME里面没有值,其实是自动继承上面的@,如果前面不写的话,那就是集成上面的值,
这条记录说明我们有一个Name-Server的FQDN为localhost.

A记录或者AAA记录 地址记录

localhost.      IN      A       127.0.0.1                                          
说明localhost对应的IP地址为 127.0.0.1
反向解析与此类似,我们看看反向解析的文件
最后一条为PTR记录 pointer,IP地址向域名解析的时候使用PTR记录
1代表主机名,自动与@ 即127.0.0.结合生成FQDN,说明localhost.的ip地址为127.0.0.1

最后我们再看根区域的文件,根区域文件中配置的是全球13台根DNS相对应IP地址,我们只需要将别人的根文件复制到我们这里就可以
dig -t NS . @172.16.0.1>>/var/named/named.ca

要对我们做出的配置做出测试,我们需要用到两条命令,named-checkzone ,named-checkconf

我们来启动bind,bind的守护进程为named,监听端口为UDP 53,其实BIN9以后出现了一个新的工具rndc,监听端口为953,顺带我们禁用iptables

[root@dns named]# service named start
我们来查看named进程监听的两个端口一个为53 ,另一个为953
[root@dns named]# netstat -utlnp
[root@dns named]# service iptables stop

我们将客户机的DNS设置为缓存服务就可以实现
Linux客户机
[root@dns named]# echo DNS1=172.16.11.17 >> /etc/resolv.conf

二, 主DNS的实现
我们在此DNS服务器上配置一个叫sysbo.com的区域
zone "sysbo.com" IN {
        type master;
        file "sysbo.com.zone";
};
在/var/named/添加新的文件sysbo.com.zone

重新加载配置文件 rndc reload,稍后我们会介绍dig命令还有rndc
我们添加添加反向解析
 zone "11.16.172.in-addr.arpa" IN {
        type master;
        file "172.16.11.zone";
};
我们来看区域配置文件  
最后别忘了该权限,默认为640权限,文件属组为named,
so,我们修改权限
[root@dns named]# chown :named 172.16.11.zone
使用dig 命令检测


这样子我们的主就配置成功了
三,辅助DNS
接下来我们看看辅助DNS的配置,辅助DNS要在主DNS新增记录,我们新增记录ns2.sysbo.com

接下来我们在172.16.1.1中修改配置文件


这样子就就好了,我们rndc reload 就可以在/var/named下瞅见传送过来的sysbo.com.zone与172.16.11.zone了,反向解析与此类似,就是修改两个文件

四,实现子域,
子域的实现也是非常简单,首先,我们现在父域中添加一条记录,添加一条子域的NS记录并且他所对应的A记录即可。


sysbo有个子域,子域的DNS由ns.dep.sysbo.com负责,接下来,我们在192.168.0.11中建立子域,在192.168.0.11中创建子域的过程和上面创建主域的过程一样,在/etc/named.conf 创建dep.sysbo.com的区域,然后/var/named/创建dep.sysbo.com.zone这样的区域文件,过程和创建主域类似,这里不再详述了

五,ACL和VIEW联合实现智能DNS
假设我是一家IDC的管理员,为了解决南北通信的问题,北方联通,南方电信,我们的website 来自全国各地的人来访问
我们来定义两个访问控制列表,当然是在我们的/etc/name.conf中定义

acl unicom {
        172.16.11.0/24;
        127.0.0.1/24;
};
acl telcom {
        172.16.111.0/24;
        192.168.0.0/24;
};
view "UNI" {
        match-clients { unicom; };   //这里匹配来自unicom的客户,他解析
        recursion yes;    //sysbo.com的时候,回去找sysbo.com.uni.zone
zone "sysbo.com" IN {
        type master;
        file "sysbo.com.uni.zone";
};
P
zone "11.16.172.in-addr.arpa" IN {
        type master;
        file "172.16.11.zone";
};
};
view "TEL" {        //匹配来自telcom的客户,他解析sysbo.com
        match-clients { telcom; };   //的时候去找sysbo.com.tel.zone
        recursion yes;
zone "sysbo.com" IN {
        type master;
        file "sysbo.com.tel.zone";
};
};
我们来测试,我们的智能DNS,哈哈
再看看另外一个

我们看到的是同样是解析www.sysbo.com 却解析到了不同的结果,这就是解决了南北问题
六,日志系统
接下来,我们看如何配置日志系统,bind 的日志系统主要涉及到两个东西,一个是channal(通道),另外一个是category(类别)
Channel,定义日志输出方式,一般有两种输出方式,文本文件和rsyslog,这里我们只介绍文本文件。
Category, 定义bind的哪个功能模块的产生出来的日志,如query (查询系统),有15种类别可供选择。
Channel 和 category都定义在logging中,而logging是在/etc/named.conf中定义,OK,我们现在定义一个查询日志系统。


我们使用dig 
www.sysbo.com来查询,然后再查看bindquery.log文件
[root@dns log]# cat /var/log/bindquery.log
17-Aug-2013 13:13:41.297 queries: info: client 127.0.0.1#57594: view UNI: query: 
www.sysbo.com IN A + (127.0.0.1)

这样子,我们就看到了查询的日志信息。


 

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