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记录的。web
@ @表示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值,若是查询到没有此记录,那在缓存服务器中保留的时间为1Dvim
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.1ide
最后咱们再看根区域的文件,根区域文件中配置的是全球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,顺带咱们禁用iptablesspa
[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)
这样子,咱们就看到了查询的日志信息。