最新消息:

DNS bind 主从服务搭建

Bind admin 3320浏览 0评论

最近研究DNS主从服务,也是参考了很多文章,这里记录一下,方便大家少走弯路,DNS服务可以算是Linux服务中比较难的一个了,尤其是配置文件书写,少一个字符都有可能造成错误。

那什么是DNS呢?简单的说就是完成域名到IP的解析过程。简洁的域名能让人们更方便记忆,不需要记那么长的IP访问某一个网站。
DNS解析过程到底是怎样的呢?
第一步:客户机访问某个网站,请求域名解析,首先查找本地HOST文件,如果有对应域名、IP记录,直接返回给客户机。如果没有则将该请求发送给本地的域名服务器:
第二步:本地DNS服务器能够解析客户端发来的请求,服务器直接将答案返回给客户机。
第三步:本地DNS服务器不能解析客户端发来的请求,分为两种解析方法
1、采用递归解析:本地DNS服务器向根域名服务器发出请求,根域名服务器对本地域名服务的请求进行解析,得到记录再给本地DNS服务器,本地DNS服务器将记录缓存,并将记录返给客户机。
2、采用迭代解析:本地DNS服务器向根域名服务器发出请求,根域名服务器返回给本地域名服务器一个能够解析请求的根的下一级域名服务器的地址,本地域名服务器在向根返回的IP地址发出请求,最终得到域名解析记录。
如上只是简单介绍了一下DNS相关知识,言归正传,如下通过脚本自动安装并添加域名解析,脚本可以根据自己的需求修改:(脚本适用于CentOS x86_64 5.8系列)

#!/bin/sh
#auto install config bind server
#wugk 2013-08-28
#定义变量
BND_ETC=/var/named/chroot/etc
BND_VAR=/var/named/chroot/var/named
BAK_DIR=/data/backup/dns_`date +%Y%m%d-%H%M`
##Backup named server
if
[ ! -d $BAK_DIR ];then
echo “Please waiting Backup Named Config …………”
mkdir -p $BAK_DIR
cp -a /var/named/chroot/{etc,var} $BAK_DIR
cp -a /etc/named.* $BAK_DIR
fi
##Define Shell Install Function
Install ()
{
if
[ ! -e /etc/init.d/named ];then
rpm -e –nodeps bind-utils
rpm -e –nodeps bind-libs
rpm -e –nodeps bind
rpm -e bind-chroot
rpm -e caching-nameserver
rpm -ivh –nodeps bind-9.3.6-20.P1.el5_8.6.x86_64.rpm bind-chroot-9.3.6-20.P1.el5_8.6.x86_64.rpm bind-libs-9.3.6-20.P1.el5_8.6.x86_64.rpm bind-utils-9.3.6-20.P1.el5_8.6.x86_64.rpm caching-nameserver-9.3.6-20.P1.el5_8.6.x86_64.rpm

else
echo ————————————————-
echo “The Named Server is exists ,Please exit ………”
sleep 1
fi
}
##Define Shell Init Function
Init_Config ()
{
cd $BND_ETC ;ls ./*
cp -p named.caching-nameserver.conf named.conf
sed -i -e ”s/localhost;/any;/g” -e ”/port/s/127.0.0.1/any/g” named.conf
echo ————————————————-
sleep 2
echo “The named.conf config Init success !”
}
##Define Shell Add Name Function
Add_named ()
{
##DNS name
read -p “Please Insert Into Your Add Name ,Example 51cto.com :” NAME
echo $NAME |grep -E “com|cn|net|org”

while
[ "$?" -ne 0 ]

do
read -p “Please reInsert Into Your Add Name ,Example 51cto.com :” NAME
echo $NAME |grep -E “com|cn|net|org”

done
## IP address
read -p “Please Insert Into Your Name Server IP ADDress:” IP
echo $IP |egrep -o “([0-9]{1,3}\.){3}[0-9]{1,3}”
while
[ "$?" -ne "0" ]

do
read -p “Please reInsert Into Your Name Server IP ADDress:” IP
echo $IP |egrep -o “([0-9]{1,3}\.){3}[0-9]{1,3}”
done
ARPA_IP=`echo $IP|awk -F. ”{print $3″.”$2″.”$1}”`
ARPA_IP1=`echo $IP|awk -F. ”{print $4}”`
cd $BND_ETC
grep “$NAME” named.rfc1912.zones

if
[ $? -eq 0 ];then
echo “The $NAME IS exist named.rfc1912.zones conf ,please exit …”
exit
else
read -p “Please Insert Into SLAVE Name Server IP ADDress:” SLAVE

echo $SLAVE |egrep -o “([0-9]{1,3}\.){3}[0-9]{1,3}”
while

[ "$?" -ne "0" ]
do
read -p “Please Insert Into SLAVE Name Server IP ADDress:” SLAVE
echo $SLAVE |egrep -o “([0-9]{1,3}\.){3}[0-9]{1,3}”
done
grep “rev” named.rfc1912.zones

if
[ $? -ne 0 ];then
cat />;/>;named.rfc1912.zones <;/>;named.rfc1912.zones <;$NAME.zone <;/>;/dev/null

if
[ $? -ne 0 ];then
cat />;/>;$ARPA_IP.rev <;/>;$NAME.zone
echo “$ARPA_IP3 IN PTR $HOST.$NAME.” />;/>;$ARPA_IP.rev

[ $? -eq 0 ]; echo -e “The $NAME config success:
$HOST IN A $IP_HOST
$ARPA_IP3 IN PTR $HOST.$NAME.”
else

sed -i “9a IN NS $NAME.” $REV
echo “$HOST IN A $IP_HOST” />;/>;$NAME.zone
echo “$ARPA_IP3 IN PTR $HOST.$NAME.” />;/>;$REV

[ $? -eq 0 ]; echo -e “The $NAME config success1:
$HOST IN A $IP_HOST
$ARPA_IP3 IN PTR $HOST.$NAME.”
fi
}
##Define Shell List A Function
Add_A_List ()
{
if
cd $BND_VAR
REV=`ls *.rev`
read -p “Please Insert Into Your Add Name ,Example 51cto.com :” NAME
[ ! -e "$NAME.zone" ];then
echo “The $NAME.zone File is not exist ,Please ADD $NAME.zone File :”
Add_named ;
else

read -p “Please Enter List Name A NS File ,Example /tmp/name_list.txt: ” FILE
if

[ -e $FILE ];then

for i in `cat $FILE|awk ”{print $2}”|sed “s/$NAME//g”|sed ”s/\.$//g”`
#for i in `cat $FILE|awk ”{print $1}”|sed “s/$NAME//g”|sed ”s/\.$//g”`
do
j=`awk -v I=”$i.$NAME” ”{if(I==$2)print $1}” $FILE`

echo ———————————————————–
echo “The $NAME.zone File is exist ,Please Enter insert NAME HOST ….”
sleep 1
ARPA_IP=`echo $j|awk -F. ”{print $3″.”$2″.”$1}”`
ARPA_IP2=`echo $j|awk -F. ”{print $4}”`
echo “$i IN A $j” />;/>;$NAME.zone
echo “$ARPA_IP2 IN PTR $i.$NAME.” />;/>;$REV
[ $? -eq 0 ]; echo -e “The $NAME config success:
$i IN A $j
$ARPA_IP2 IN PTR $i.$NAME.”
done

else

echo “The $FILE List File IS Not Exist …….,Please exit …”

fi
fi
}
##Define Shell Select Menu

PS3=”Please select Menu Name Config: ”
select i in “自动安装Bind服务” “自动初始化Bind配置” “添加解析域名” “批量添加A记录”
do
case $i in
“自动安装Bind服务”)
Install
;
“自动初始化Bind配置”)
Init_Config
;
“添加解析域名”)
Add_named
;
“批量添加A记录”)
Add_A_List

 

;
* )
echo —————————————————–
sleep 1
echo “Please exec: sh $0 { Install(1) or Init_Config(2) or Add_named(3) or Add_config_A(4) }”
;
esac
done

 

转载请注明:爱开源 » DNS bind 主从服务搭建

您必须 登录 才能发表评论!