DNS与BIND
1.BIND的安装配置
dns服务,程序报名bind,程序名named
#yum list all bind*
bind-libs.x84_64 ##64库文件
bind-chroot.x84_64 ##一定不要安装,会把服务圈禁在小范围内
bind-utils.x84_64
bind.x84_64 ##主包
bind-devel.x84_64 ##开发组件
bind-devel.i686
bind-libs.i686 ##32位库文件
bind-sdb.x84_64 ##下面这两个库实现将解析库放在非文件中,放在数据库中
bind-dyndb-lap.x84_64
程序包:
bind ##提供服务
bind-libs ##提供库文件
bind-utils ##提供测试工具
#rpm -qi bind-libs
#rpm -qi bind-utils ##测试的命令行工具,dig
#rpm -ql bind-utils
#yum info bind-chroot
bind-chroot:/var/named/chroot/
bind:
服务脚本:/etc/rc.d/init.d/named
可以用systemctl start|status|stop等命令
主配置文件:/etc/named.conf,/etc/named.rfc1912.zones,/etc/rndc.key
rfc:请求注解文档
rndc:remote name domain controller,只允许控制本地,默认与bind安装在同一主机,
且只能通过127.0.0.1来连接named进程,提供辅助性的管理功能
rndc也是一个服务,953/tcp
rndc.key就是rndc在连接named时的域共享密钥,只能在本机进行连接
解析库文件;/var/named/ZONE_NAME.ZONE_NAME
负责保存本地区域数据
注意:
(1)一台物理服务器可同时为多个区域提供解析
(2)必须要有根区域文件,named.ca
(3)应该有两个(甚至更多,如果包括IPv6的),实现localhost和本地回环的解析库
named.loacalhost
named.localback
#yum install bind -y
#rpm -ql bind | less ##查看安装生成的文件
启动脚本:/etc/rc.d/init.d/named
脚本配置文件:/etc/sysconfig/named
/etc/sbin/named-checkconf:检查主配置文件是否还有语法错误的文件
/etc/sbin/named-checkzone:检查区域配置文件是否还有语法错误的文件
主配置文件:/etc/named.conf
options{}:全局配置
logging{}:日志子系统配置
zone:定义一个区域,本机能够为哪些zone进行解析,就要定义哪些zone
zone “ZONE_NAME” IN {}
type:
include:
注意:任何服务程序如果期望其能够通过网络被其他网络被其他主机访问,至少应该监听在一个能与外部主机通信的IP地址上
#cp /etc/named.conf[,.bak] ##把自己复制成.bak的文件
/etc/named.conf的语法规则:
注释://,/**/注释符不能嵌套
{},两边需要有空格,
每句的结尾都要有;
#ss -tunlp | grep :53
dnssec:关闭掉
allow-query
recursion:是否允许递归查询
directory:区域解析库文件的存放路径,除了这个不可以删,其他都可删
2.主DNS名称服务器
在缓存名称服务器的基础上加zone
1)在主配置文件定义一个域
zone “ZONE_NAME” IN {
type {master|slave|hint|forward};
file "ZONE_NAME.znoe"
};
2)定义区域解析库文件
出现的内容:
宏定义
资源定义
$TTL 86400 刷新时间间隔
$ORIGIN magedu.com 当前区域的名字
@(当前区域的名字) IN SOA 主DNS服务器,在上级服务器定义了, 管理员邮箱地址
序列号
刷新时间
重试时间
过期时间
否定的最小TTL值)
IN NS ns1 | ns1.magedu.com.
IN MX 10 mx1
ns1 IN A 172.16.100.11
mx2 IN A 172.16.100.12
www IN A 172.16.100.11
ftp IN CNAME www
#named-checkconf:检查配置文件知否有语法错误
#named-checkzone "magedu.com" /var/named/magedu.com.zone:检查区域
3)修改文件的权限,magedu.com.zone为named属组
#chown :named /var/named/magedu.com.zone
#dig -t A www.magedu.com @172.16.100.11 ##@的作用是去11上解析,如果resolv.conf是配置的DNS服务器的话就可以不用写
#service named reload :重读文件
#rndc reload:
一个主机名,多个iP地址:轮询
3.测试命令:dig的使用
dig [-t type] name [@SERVEER] [query options]
dig用于测试DNS系统,不会查询hosts文件进行解析;
aa:权威答案
查询选项:
+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析
测试反向解析:
dig -x IP @SERVER
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
例如:dig -t axfr magedu.com @172.16.100.11
测试命令:host命令
host [-t type] name [SERVER]
host -t A www.magedu.com 172.16.100.11:查看www的A记录
host -t NS magedu.com 172.16.100.11 :查看magedu.com.的主名称服务器
测试命令:nslookup命令,交互式查询工具
nslookup [-option] [name | -] [server]
交互式模式:
nslookup>
server IP:指明使用哪个DNSserver进行查询;
set q=RR_TYPE:指明查询的资源记录类型
NAME:要查询的名称
4.反向区域
区域名称:注册所得的网络地址反写.in-addr.arpa.172.16.100.-->100.16.172.in-addr.arpa.
注意:是不变的地址加上后缀,若是100也变化,就只留172.16
(1)定义区域
zone “ZONE_NAME” IN {
type {master|slave|forward};
file "网络地址.znoe" //若是有多个域,就将网络地址后面加上.1|.2等等加以区别就行
};
(2)区域解析库文件
注意:不需要MX和A,只需要PTR和CNAME
#vim -o magedu.com.zone 172.16.100.zone ##只要有文件就行,名字是什么无所谓
$TTL 86400
$ORIGIN 100.16.172.in-addr.arpa.
@ IN SOA ns1.magedu.com. admin.magedu.com. (
2014.04201
1H
5M
7D
1D)
IN NS ns1.magedu.com.(不能只写ns1)
IN NS ns1.magedu.com.
11(会补上$ORIGIN) IN PTR www.magedu.com.
(3)修改文件权限
#chmod 640 172.16.100.zone
#chown :named 172.16.100.zone
检查语法错误
#named-checkzone "100.16.172.in-addr.arpa" 172.16.100.zone
#named-checkconf
测试:
#host -t PTR 172.16.100.11 172.16.100.11
#dig -x 172.26.100.11 @172.16.100.11
5. 泛域名解析
在magedu.com.zone 添加记录:
* IN A 172.16.100.11 ##任何写错的域名都访问172.16.100.11
magedu.com IN A 172.16.100.11 ##不支持CNAME
6.主从复制
正反是两个不同的系统,两台主机
一台正主,一台反主,互为从,
一台正反主,一台正反从
总之,怎么都行
配置从服务器:
(1)修改主配置文件/etc/named.conf
(2)启动服务
此时就配置好了缓存DNS服务器
(3)添加域
zone “magedu.com” IN {
type slave;
masters { 172.16.100.11; };
file "slaves/magedu.com.zone";
}
(4)修改主服务器
主服务器上必须把这台主机定义为从服务器,否则不会通知改从主机
IN NS ns2
ns2 IN A 172.16.100.12
(5)rndc reload
链式传送:
只要主服务器的记录发生改变,就会通知从服务器
模拟:
修改主服务器的区域配置文件:
注意:修改了之后必须手动修改序列号
#rndc reload
#tail /var/log/messages
总结:
1.应该为一台独立的名称服务器
2.主服务器的区域解析库文件必须有一条NS记录是指向从服务器
3.从服务器只需要定义区域,而无需提供解析库文件:解析库文件应该放置于/var/named/slaves/目录中
4.主从服务器允许从服务器做区域传送
5.主从服务器的时间应该同步,可通过ntp进行
6.bind程序的版本应该保持一致,或者是从高,主低
7.配置反向解析从服务器
1.修改主从的主配置,让其中有从服的记录
2.在从服添加域
zone "100.16.172.in-addr.arpa" IN {
type slave;
masters { 172.16.100.11; };
file "slaves/172.16.100.zone";
}
3.#named-checkconf
#rndc reload
#tail /var/log/messages
8.rndc:远程管理
在远程客户机上连接服务器上的rndc,通过rndc来管理named服务,但是这样很有可能会被入侵,所以一般只允许本地连接rndc-->rndc (95/tcp)
rndc COMMAND
COMMEND:
reload:重载主配置文件和区域解析库文件
reload zone:重载区域解析库文件
retransfer zone:手动启动区域传送过程,而不管序列号是否增加
notify zone:重新对区域传送发通知;
reconfig:重载主配置文件
querylog:开启或关闭查询日志
DEBUG日志:只有需要找错时才需要打开
trace:递增debug级别
trace LEVEL:指定使用的级别
9.子域授权
类似根域授权tld:
.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 1.1.1.1
ns2.com. IN A 1.1.1.2
magedu.com.在.com的名称服务器上,解析库中添加资源记录
magedu.com. IN NS ns1.magedu.com.
magedu.com. IN NS ns2.magedu.com.
ns1.magedu.com. IN A 3.3.3.1
ns2.magedu.com. IN A 3.3.3.2
正向解析区域子域方法
定义一个子区域:
nps.magedu.com. IN NS ns1.magedu.com.
nps.magedu.com. IN NS ns2.magedu.com.
ns1.magedu.com. IN A 1.1.1.1
ns2.magedu.com. IN A 1.1.1.2
定义转发区域:
当子域内的某台主机想访问父域的父域的某台主机,就需要给子域转发区域
1 ) 找根
2)找别的服务器
注意:被转发的服务器要能给请求者做递归,否则转发不予进行
(1)全部转发,凡是对非本机所有负责解析的区域的请求,统统转发给指定服务器
options {
forward {first|only}; //转发模式
//first:先递归后迭代
//only:只递归
forwarders
}forward only;
(2)区域转发,仅仅转发对特定的区域的请求至某服务器
zone “ZONE_NAME” IN {
type forward;
forward {first|only}
forwarders
}
当父域内某个主机要访问子域内的某个主机,因为父域知道子域在什么地方,所以直接告诉
子域的区域解析库文件:
$TTL 1D
@ORIGIN ops. magedu.com.
@ IN SOA ns1.ops.magedu.com. admin.ops.magedu.com. (
2015042501
1M
10M
3D
1D)
IN NS ns1
IN NS ns2
ns1 IN A 172.16.100.12
ns2 IN A 172.16.100.19
www IN A 172.16.100.20
* IN A 172.16.100.21
定义转发域:
1)全局转发
#vim /etc/named.conf
forwrd first;
forwarders { 172.16.100.1; };
2)区域转发(子域转发给父域):
zone “magedu.com” IN {
type forward;
forward only;
forwarders { 172.16.100.11; };
}
遇到问题:子域解析不到父域,父域解析不到父域
dessec:vim /etc/named.conf
dessec-enable no;
dessec-validation no;
当全局转发和区域转发都定义了;举例
子域内有全局转发和区域转发,当子域要访问父域的某主机则用区域转发,访问其他域的用全局转发
10.bind中基础的安全相关的配置
acl:访问控制列表:把一个或多个主机归并为一个集合,并通过一个统一的名称调用
acl acl_name {
ip;
ip;
net/prelen;
}
bind有四个内置的acl:
none:没有一个主机;
any:任意主机;
local:本机
localnet:本机的IP同掩码运算后得到的网络地址;
注意:只能先定义,后使用
示例:
acl mynet {
172.16.0.0/16;
}
访问控制的指令:
allow-query {}; 允许查询的主机,白名单;
allow-transfer {};允许区域传送的主机,白名单;
allow-recursion {}; 允许递归的主机
allow-update {}; 允许更新区域数据库的内容,一般是none,为了安全
11.BIND view
为了好的用户体验,会将服务器放到每个网络,如果用户访问就访问最近的服务器
当一个私网内部有一台服务器,外网的某台主机想访问该服务器,DNS就必须解析成公网IP,通过NAT转换成私网IP
视图:
1.一个bind服务器可定义多个view,每个view可定义一个或多个zone;
2.每个view用来匹配一组客户端;
3.多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
当一个服务器收到客户端的请求,会先判断客户端的来源是什么
view VIEW_NAME {
match-clients {};
}
注意:
(1)一旦启用了view,所有的zones都只能定义在view中
(2)仅有必要再匹配到允许递归请求的客户(本地主机)所在view中定义根区域;
(3)客户端请求到达时,是自上而下检查每个view所服务的客户端列表
12.编译安装BIND
isc.org:
yum grouplist
yum groupinstall “Development Tools” “Server Platform Development”
bind-9.10
#tar
#cd
#groupadd -gr 53 named
#useradd -u 53 -glue named named -r
#./configure --prefix=/usr/logcal.bind9 --sysconfigdir=/etc/named/ --disable-ipv6 --disable-chroot --enable-threads
#make //编译
#make install
问题:
1.没有配置文件
2.没有区域解析库文件
3.没有rndc的相关配置文件
逐步解决:
一、
1.导出二进制程序的搜索路径
#vim /etc/profile.d/named.sh
export PATH=/usr/local/bind9:/usr/local/bind9/sbin:$PATH
#./etc/profile.d/named.sh
以上操作完就可以用named-checkconf等工具,
2.导出库文件搜索路径
#vim /etc/ld.so.conf.d/named.conf
/usr/local/bind9/lib
#ldconfig(可省略,因为都是静态文件)
3.导出头文件搜索路径
#ln -sv /usr/local/bind9/include /usr/include/named
4.导出帮助文件搜索路径
#vim /etc/man.config
MANPATH /usr/local/bind9/share/man
可以使用man
这样就算是吧named的基本配置就做好了
二、
1.
#vim /etc/named.conf
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
2.
#mkdir /var/named/
#dig -t NS . @172.16.0.1 //访问能连接到外网的DNS服务器,获得13个跟服务器的地址
#dig -t NS . @172.16.0.1 > /var/named/named.ca
#vim /var/named/localhost.zone
$TTL 1D
@ IN SOA localhost. admin.localhost. (
2015042501
1H
5M
7D
1D)
IN NS localhost.
localhost. IN A 127.0.0.1
#cp -p /var/named/localhost.zone /var/named/named.local
#vim /var/named/named.local
#vim /var/named/localhost.zone
$TTL 1D
@ IN SOA localhost. admin.localhost. (
2015042501
1H
5M
7D
1D)
IN NS localhost.
1 IN PTR localhost.
#chmod 640 /var/named/*
#chown :named /var/named/*
#chmod 640 /etc/named/named.conf
#chown :named /etc/named/named.conf
#named -u named -f -g -d 3 //手动启动named服务在前台
#named -u named //在后台运行
#killall named //通过杀死进程来关闭服务
解析:
1.添加域
2.写区域解析库文件
3.改属组
生成rndc的配置文件:
#rndc-confgen -r /dev/urandom //不从熵池中取随机数,而是从urandom
#rndc-confgen -r /dev/urandom > /etc/named/rndc.conf
生成rndc.conf或rndc.key,
#rndc-confgen -r /dev/urandom > /etc/named/named.conf
:.,$-1s@^# @@g //将文件中# 开头的去掉
#killall named
#named -u named
#killall -SIGHUP named //reload
bind源码目录下,有
contrib/
queryperf/:评估查询性能,是能对DNS做压力测试的工具
#less README:查看如何使用
#./configure //queryperf/下的
#make
#cp queryperf /usr/local/bind9/bin/
#queryperf -d test -s 172.16.100.11 //对11座压力测试,测试内容在test下
test内容:越多才能测试的出来
www.magedu.com A
magedu.com NS
#top //
#rndc querylog //开启查询日志
#vmstat 1|dstat //看IO压力
#iostat 1 //查看IO压力