|
CentOS Bind DNS自动化部署
最近研究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 <<EOF
- #`date +%Y-%m-%d` Add $NAME CONFIG
- zone "$NAME" IN {
- type master;
- file "$NAME.zone";
- allow-transfer { $SLAVE; };
- also-notify { $SLAVE; };
- allow-update { none; };
- };
- zone "$ARPA_IP.in-addr.arpa" IN {
- type master;
- file "$ARPA_IP.rev";
- allow-transfer { $SLAVE; };
- also-notify { $SLAVE; };
- allow-update { none; };
- };
- EOF
- else
- cat >>named.rfc1912.zones <<EOF
- #`date +%Y-%m-%d` Add $NAME CONFIG
- zone "$NAME" IN {
- type master;
- file "$NAME.zone";
- allow-transfer { $SLAVE; };
- also-notify { $SLAVE; };
- allow-update { none; };
- };
- EOF
- fi
- fi
- [ $? -eq 0 ]&& echo "The $NAME config name.rfc1912.zones success !"
- sleep 3 ;echo "Please waiting config $NAME zone File ............."
- cd $BND_VAR
-
- read -p "Please insert Name DNS A HOST ,EXample www or mail :" HOST
- read -p "Please insert Name DNS A NS IP ADDR ,EXample 192.168.111.130 :" IP_HOST
- echo $IP_HOST |egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
- ARPA_IP2=`echo $IP_HOST|awk -F. '{print $3"."$2"."$1}'`
- ARPA_IP3=`echo $IP_HOST|awk -F. '{print $4}'`
- while
- [ "$?" -ne "0" ]
- do
-
- read -p "Please Reinsert Name DNS A IPADDRESS ,EXample 192.168.111.130 :" IP_HOST
- echo $IP_HOST |egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
- done
- cat >$NAME.zone <<EOF
- \$TTL 86400
- @ IN SOA localhost. root.localhost. (
- 43 ; serial (d. adams)
- 1H ; refresh
- 15M ; retry
- 1W ; expiry
- 1D ) ; minimum
- IN NS $NAME.
- EOF
-
- REV=`ls *.rev`
- ls *.rev >>/dev/null
-
- if
- [ $? -ne 0 ];then
- cat >>$ARPA_IP.rev <<EOF
- \$TTL 86400
- @ IN SOA localhost. root.localhost. (
- 1997022703 ; Serial
- 28800 ; Refresh
- 14400 ; Retry
- 3600000 ; Expire
- 86400 ) ; Minimum
- IN NS $NAME.
- EOF
- echo "$HOST IN A $IP_HOST" >>$NAME.zone
- echo "$ARPA_IP3 IN PTR $HOST.$NAME." >>$ARPA_IP.rev
-
- [ $? -eq 0 ]&& echo -e "The $NAME config success:\n$HOST IN A $IP_HOST\n$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:\n$HOST IN A $IP_HOST\n$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:\n$i IN A $j\n$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
复制代码 http://www.it165.net/admin/html/201308/1743.html
CentOS Bind DNS自动化部署
|
|