前言:
了解named
如果说我们安装的rpm包不符合我们的要求怎么办、比如说我们想起用named的线程模式、比如说我想让他禁用IPv6、比如说我们想启用某种特性、而rpm在编译时没有提供、那这时我们只能去手动编译安装了,那如何去编译安装named:
编译安装named有一个麻烦之处、所有的配置文件你都得自己去建立、像/var/named/这个目录、编译安装时连这个目录都不会存在、得自己去创建这个目录、里面的各种配置文件、区域文件、像根的、localhost的、以及localhost的反向的、都得手动去做、连我们service启动脚本都没、所以不到万不得以最好别去编译他、因为很麻烦、但对于我们学习来讲、我们应该是变得法的去折腾自己、活着就是折腾嘛、那我们各种方法都去摸索一遍、将来我们真要用得着了也好应对。
首先上来就同步一下我们的时间:
# hwclock -s
然后检查一下安装环境所需要的开发包组、确保所依赖的开发包组都装有了、我这里没有装、那我就用yum来装一下吧:
# yum -y groupinstall "Development Tools"
# yum -y groupinstall "Server Platform Development"
# yum grouplist
装好后查看一下、最主要两项:Development tools和Server Platform Development
然后我们就去下载源码包了、这里我就去www.isc.org/donloads/官方网站下载了、支持使用的版本是9.9.5、当前使用的稳定版、这个版本中已经自带dlz了、以前的版本没有自带的、安装时要装这个dlz的、如果我们将来人希望指资源记录基于数据库的方式存放的话、而且要能够现场检索、现场响应的话、则自定义启用dlz功能即可、下载好我们就去解压缩:
# tar xf bind-9.9.5.tar.gz
这里注意一下:我们要去编译安装一个服务、首先要去看他的README、然后看他的INSTALL、大体了解一下有没有我们所需要的信息、当然我们这里就不多说了、直接往下走:
# ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named --enable-threads --enable-epoll --disable-chroot
--prefix=/usr/local/bind9:指定编译存放的路径
--sysconfdir=/etc/named:指定配置文件存放路径
--enable-threads:启用了多线程的功能
然后make和make install就OK了、安装完成就可以去配置了
# make && make install
我们前面说过、编译安装named什么都得自己创建、用户也没有的、所以我们得给他创建一个用户先、而且用户是系统用户、要加-r、系统用户不会给他创建家目录的:
先创建用户组:
# groupadd -g 53 -r named
# useradd -g named -r named
这里我们先去创建named的工作目录、然后创建named.ca这个文件:
# mkdir /var/named
这里@后面的IP是能访问互联网的服务器、生成的数据存在到/var/named/named.ca中去
# dig -t NS . @172.16.0.1 > /var/named/named.ca
然后再去编辑/etc/named/named.conf的配置文件、这个文件也没有、需要自己去编写的:
# vim /etc/named/named.conf
options {
directory "/var/named" ;
};
zone "." IN {
type hint;
file "named.ca" ;
};
zone "localhost" IN {
type master;
file "named.localhost" ;
allow-transfer { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback" ;
allow-transfer { none; };
};
配置文件中的三个文件named.ca、named.localhost、named.loopback上面已经提供有一个了named.ca了、还有这两个named.localhost、named.loopback、同样我们也得提供、也是在/var/named目录下创建:
# vim /var/named/named.localhost
$TTL 86400 ;定义宏
@ IN SOA localhost admin.localhost. (
2014031101 ;序列号
2H ;刷新时间
10M ;失败时重试间隔时间
7D ;过期时间
1D) ;否定答案的时间
IN NS localhost.
localhost. IN A 172.0.0.1
然后复制一份改写named.loopback的文件:
# cp /var/named/named.localhost /var/named/named.loopback
# vim named.loopback
$TTL 86400
@ IN SOA localhost admin.localhost. (
2014031101
2H
10M
7D
1D )
IN NS localhost.
1 IN PTR localhost.
如果想用rndc远程登录可以生成一个/etc/named/rndc.conf的配置文件:
# /usr/local/bind9/sbin/rndc-confgen -r /dev/urandom > /etc/named/rndc.conf
到这里我们别忘了给named.conf和rndc.conf修改属主属组和权限:
# chown root:named /etc/named/named.conf
# chown root:named /etc/named/rndc.conf
# chown root:named /var/named/*
# chmod 640 /etc/named/named.conf
# chmod 640 /etc/named/rndc.conf
# chmod 640 /var/named/*
为了方便、我们在PATH下加个的路径、/etc/profile.d/named.sh:
# vim /etc/profile.d/named.sh
export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH
在我们的终端重新登录一下就可以生效了
好的、检查一下我们的区域文件有没有语法错误、然后就可以启动了:
# named-checkzone "localhost" /var/named/named.localhost
# named-checkzone "0.0.127.in-addr.arpa" /var/named/named.loopback
# named -u named #这个表示以named用户启动named
# ss -tunl | grep "\<53\>" 然后再查看一下有没有监听53号端口
最后、因为他是一个服务、所以我们要为他提供一个服务脚本、以后可以利用脚本启动、编辑/etc/rc.d/init.d/named:
pidFile= /usr/local/bind9/var/run/named .pid
lockFile= /var/lock/subsys/named
confFile= /etc/named/named .conf
[ -r /etc/rc .d /init .d /functions ] && . /etc/rc .d /init .d /functions
start() {
if [ -e $lockFile ]; then
echo "named is already running..."
exit 0
fi
echo -n "Starting named:"
daemon --pidfile "$pidFile" /usr/local/bind9/sbin/named -u named -c "$confFile"
RETVAL=$?
echo
if [ $RETVAL - eq 0 ]; then
touch $lockFile
return $RETVAL
else
rm -f $lockFile $pidFile
return 1
fi
}
stop() {
if [ ! -e $lockFile ]; then
echo "named is stopped."
fi
echo -n "Stopping named:"
killproc named
RETVAL=$?
echo
if [ $RETVAL - eq 0 ]; then
rm -f $lockFile $pidFile
return 0
else
echo "Cannot stop named."
failure
return 1
fi
}
restart() {
stop
sleep 2
start
}
reload() {
echo -n "Reloading named: "
killproc named -HUP
RETVAL=$?
echo
return $RETVAL
}
status() {
if pidof named &> /dev/null ; then
echo -n "named is running..."
success
echo
else
echo -n "named is stopped..."
success
echo
fi
}
usage() {
echo "Usage: named {start|stop|restart|status|reload}"
}
case $1 in
start)
start ;;
stop)
stop ;;
restart)
restart ;;
status)
status ;;
reload)
reload ;;
*)
usage
exit 4 ;;
esac
OK、到这里保存退出,给他个执行权限
# chmod +x /etc/rc.d/init.d/named
再加到chkconfig里面去:
# chkconfig --add named
# chkconfig --list named
=============================我是分隔线==========================================
DNS正反向解析
DNS(Domain Name Service)域名服务、就是域名解析服务器、所谓名称解析的过程就是某个应用程序基于某个搜索键在指定的数据库中查询、而后查询到某些对应的键以后与之对应的键导出来的过程。
NDS是互联网的基础设施类的服务、这是一种协议、协议最后是要实现的、协议实现的软件很多、我们前面安装配置好的就是其中一个、我们也是用这个BIND来实现DNS的、他运行时监听在UDP的53号端口上、同时监听TCP的53号端口、两种协议的53号端口都被监听了。
域名:如 http://tanxw.blog.51cto.com/ --> IP地址
一级域分为三类
组织域:.com、.org、.mil、.gov、.edu、.net、
国家域:.cn、.hk、.tw、.us、.jp、.ir、.uk
反向域:.in-addr.arpa
DNS服务器类型:
主DNS服务器
辅助DNS服务器
缓存DNS服务器
全球有13组DNS根服务器、11台在美国、一组在挪威、一组在日本、DNS服务重兵把守、他的安全性有多重要、一旦被攻击全球都互联网中断、可想而知。
那DNS服务是怎么实现的呢、接下来我们就来说说他的实现过程及基本步骤,上一篇我们已经安装好了BIND这个软件包了、基于这个软件我们来实现DNS服务器:
先来个案例,假如我们注册了一个域名:tanxw.com、有域名了、解析IP地址就可以挂你的网站上去了、这里我们的网段为172.16.251.、在这个服务内我们
提供mail服务:172.16.251.128
提供web服务:172.16.251.176
提供pop服务:是mail的别名,指向mail
提供ftp服务:是www的别名,指向www
还有一台DNS服务器:当前服务器地址 172.16.251.171
看看我们怎么解析:
正向解析
首先配置主配置文件,定义区域、配置文件在/etc/named.confg下、有哪些区域需要定义的、一般主配置文件中通常有三个区域、一个是根、还有本地localhost、以及127.0.0.1的反向区域。
其次我们每个区域要完成解析要有区域数据文件、所以还要定义区域数据库文件、而区域数据文件一般都在/var/named/中、运行named的进程还是named这个用户、组也是、这些区域文件或配置文件都不允许额外的其他用户访问、所以他们的权限通常都为640的。
查看全球13个根节点的服务:
# dig -t NS .
于是我们就来配置一下以上案例的相关配置信息了、定义我们的区域
# vim /etc/named/named.conf
在后定义我们注册的那个域
zone "tanxw.com." IN {
type master;
file "tanxw.com.zone";
};
再切换到/var/named/下创建tanxe.com.zone数据文件、根据我们上规划好的:
# vim /var/named/tanxe.com.zone
然后修改一下权限和属主属组:
# chown root:named /var/named/tanxe.com.zone
# chmod 640 /var/named/tanxe.com.zone
检查主配置文件和区域数据文件有没有语法错误:
# named-checkconf 这个是检查主配置文件语法的
这个是检查区域数据文件语法的、指定区域和指定文件
# named-checkzone "tanxe.com" /var/named/tanxw.com.zone
即检查区域、又检查主配置文件的
# service named configtest
重启服务后、解析域名:
# service named restart
# dig -t A www.tanxw.com @172.16.251.171
反向解析
好了、这样我们就可以解析域名了,这个是正向解析、正向解析就是把域名解析成IP地下、而反向的则是把IP地址解析成域名、那我们再来看看反向的怎么解析呢:
第一步:在我们的named的配置文件中定义一个反向的区域、把我们的网络地址反过来写:如下
# vim /etc/named/named.conf
zone "251.16.172.in-addr.arpa" IN {
type master;
file "251.16.172.zone";
};
再切换到/var/named/目录下创建区域数据文件、这里我们复制正向的那个区域数据文件进行修改:
# cp /var/named/tanxw.com.zone /var/named/251.16.172.zone
# vim /var/named/251.16.172.zone
$TTL 43200
@ IN SOA dns.tanxw.com. admin.tanxw.com. (
2014031202
2H
10M
7D
1D )
IN NS dns.tanxw.com.
171 IN PTR dns.tanxw.com.
128 IN PTR mail.tanxw.com.
176 IN PTR www.tanxw.com.
这两个配置好之后还要改一下你的NDS服务器的指向、编辑/etc/resolv.conf:
# vim /etc/resolv.conf
检查主配置文件和区域数据文件有没有语法错误:
# named-checkconf 这个是检查主配置文件语法的
这个是检查区域数据文件语法的、指定区域和指定文件
# named-checkzone "tanxe.com" /var/named/tanxw.com.zone
重启服务后、解析域名:
# service named restart
然后我们就可以来测试一下看了:
# dig -x 172.16.251.176
OK、到此为止我们的正反向域名解析也都算是完也了、那接下来我们再来说说DNS服务器的主从复制关系
DNS服务器的主从复制关系
首先我们要有两台NDS服务器、我这里就启动了两台虚拟机了、要想为域内的DNS服务器必须要在上级获得授权的前提下、添加从服务器的关键的一步:那就是在你主服务器的区域文件中为从服务器添加一条ND记录和对应的A记录。
启动我们另一台虚拟机后、安装上BIND、安装过程上一篇文章我们已经说过了、你也可以用yum来安装、安装完后我们查看一下他的版本:
版本为9.9的、跟我们前面安装的的主服务器的版本一致、这里要注意的是、从服务器的版本一定要高于主服务器的版本、如果主服务器的版本高于从服务器的、那么主服务器的一些新功能可以在从服务器上不兼容了。
安装好后根据我们上面说的、切换去我们的主服务器的区域文件目录下、注意、这里是主服务器的区域文件、编辑tanxw.com.zone这个文件加一条新的NS记录、两台DNS服务都可以互相成为主从:
# cd /var/named/
# vim /var/named/tanxw.com.zone
切换到从服务器这里、首先保证从服务器可以跟我们的主服务器可以通信、那我们ping一下:
# ping 172.16.251.171
好了、没问题、那我们就去配置一下从服务器的主配置文件了、我们注释掉一些我们不要的项:
# vim /etc/named.conf
然后再定义我们的区域数据文件、在最后定义一个区域:
# vim /etc/named.rfc1912.zones
再改一下你的从NDS服务器地址、编辑/etc/resolv.conf:
# vim /etc/resolv.conf
然后启用named服务、同时查看一下监听的端口是否有了:
# service named start
# ss -tnul |grep "53"
服务启动后都要看一下日志、这个是一个好习惯、不管有没有问题都要看一眼、下面说明数据已经开始传输了:
再去看一下/var/named/salves/目录下有没有生成一个tanxw.com.zone的文件:
# ls /var/named/salves/
# vim /var/named/salves/tanxw.com.zone
然后我们再用从服务器解析一下看、完全没问题、是不是:
# dig -t NS tanxw.com @172.16.251.127
好了、一切OK了、到这里我们的主从复制也完成了!
=======================================我是分隔线、我又出来了============================
子区域授权和转发机制
BIND子域授权的实现:假我们一家公司获得了某一个域的使用权、而我们想在这个域下分出几个子域来分别分给一些部门使用、这样也方便管理、举个例子:tanxw.com下有两个子域、分别是tech.tanxw.com、fin.tanxw.com、而他们两个下面也他别有自己的www和mail等主机、而每一个域内最主要的一台主机就是dns主机、所谓子域授权就是在父域的配置文件中添加如下项:
1、要授权给谁要明确说明、也就是授权的子区域名称
2、指定子区域的名称服务器
3、子区域的名称服务器的IP地址
首先找到你的父域名称服务器、我这里就是主服务器了、再找到正向解析区域数据配置文件、添加一项:
# vim /var/named/tanxw.com.zone
然后我们再找一台服务器、我这里再启用一个虚拟机(IP为172.16.251.134)、当然、可以设置在不同的网段、用作子域的服务器、同样安装好BIND、配置好匹配数据文件等相关的配置、这个我们前面都做了很多了、轻车熟路了:
# vim /etc/named.conf
# vim /etc/named.rfc1912.zones
zone "tech.tanxw.com" IN {
type master;
file "tech.tanxw.com.zone"
};
# vim /var/named/tech.tanxw.com.zone
$TTL 600
@ IN SOA dns.tech.tanxw.com. admin.tech.tanxw.com. (
2014031301
1H
10M
7D
1D )
IN NS dns
IN MX 10 mail
dns IN A 172.16.251.134
www IN A 172.16.251.121
mail IN A 172.16.251.120
修改他的属主和属组、还有权限:
# chown root:named /var/named/tech.tanxw.com.zone
# chmod 640 /var/named/tech.tanxw.com.zone
启动服务:
测试一下、看看可不可以解析:
# dig -t A www.tech.tanxw.com @172.16.251.134
在父域的服务器上解析看:
# dig -t NS tech.tanxw.com @172.16.251.171
在此、我们的子域授权功能也能够顺利完了、你可以了吗?
当然、我们@172.16.251.134这台子域服务器当接收到不负责的区域请求时都会转发给根、比如:
# dig -t A www.tanxw.com @172.12.251.134
他不负责解析父域名、所以他会转发给根、那如果我们不想转发给根、我们想转发给指定的DNS服务器、如果指定的服务器也不响应我们的转发请求、那不是再得去找根呢、这里我们配置他如果转发的那个服务器不响应我们就不去找根了、那要怎么完全区域转发呢;
这里我们以@172.12.251.134这台服务为转发不解析的区域:
# vim /etc/named.rfc1912.zones
这里注意一个、编辑/etc/named.conf配置文件、把最后一行注释了、因为转了时要递归、递归时要验证信息的合法性、可能不会通过。
保存退、重启服务、测试一下:
OK、服务器转发的我们也完成了、接下来我们还是DNS服务的功能、视图的性能压力测试!
接下篇:总结之:CentOS6.5 DNS服务BIND配置、正反向解析、主从及压力测试(4)
本文出自 “我拿青春换酒钱” 博客,请务必保留此出处http://tanxw.blog.51cto.com/4309543/1376091
(责任编辑:IT) |