安哥网络 发表于 2015-5-20 11:48:36

CentOS Bind DNS自动化部署

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 waitingBackup 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 --nodepsbind-9.3.6-20.P1.el5_8.6.x86_64.rpmbind-chroot-9.3.6-20.P1.el5_8.6.x86_64.rpm    bind-libs-9.3.6-20.P1.el5_8.6.x86_64.rpmbind-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   -pnamed.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"PleaseInsert Into Your Add Name ,Example 51cto.com :" NAME
       echo $NAME |grep -E "com|cn|net|org"
                                                         
       while
      [ "$?" -ne 0 ]
                                                            
         do
      read -p"PleasereInsert Into Your Add Name ,Example 51cto.com :" NAME
      echo $NAME |grep -E "com|cn|net|org"
                                                            
   done
## IP address
       read -p"PleaseInsert Into Your Name Server IP ADDress:" IP
       echo $IP |egrep -o "({1,3}\.){3}{1,3}"
       while
       [ "$?" -ne "0" ]
                                                         
      do
      read -p"PleasereInsert Into Your Name Server IP ADDress:" IP
       echo $IP |egrep -o "({1,3}\.){3}{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"PleaseInsert Into SLAVE Name Server IP ADDress:" SLAVE
                                                         
      echo $SLAVE |egrep -o "({1,3}\.){3}{1,3}"
      while
                                                   
      [ "$?" -ne "0" ]
      do
      read -p"PleaseInsert Into SLAVE Name Server IP ADDress:" SLAVE
      echo $SLAVE |egrep -o "({1,3}\.){3}{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 ,EXamplewww 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 "({1,3}\.){3}{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 "({1,3}\.){3}{1,3}"
done
       cat >$NAME.zone <<EOF
\$TTL    86400
@               IN SOAlocalhost.      root.localhost. (
                                        43            ; serial (d. adams)
                                        1H            ; refresh
                                        15M             ; retry
                                        1W            ; expiry
                                        1D )            ; minimum
                INNS          $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
            INNS$NAME.
EOF
      echo"$HOST             INA         $IP_HOST" >>$NAME.zone
      echo"$ARPA_IP3         INPTR         $HOST.$NAME." >>$ARPA_IP.rev
                                                            
      [ $? -eq 0 ]&& echo -e "The $NAME config success:\n$HOST       INA         $IP_HOST\n$ARPA_IP3         INPTR         $HOST.$NAME."
else
                                                         
                                                            
      sed -i"9a INNS$NAME." $REV
      echo"$HOST             INA         $IP_HOST" >>$NAME.zone
      echo"$ARPA_IP3         INPTR         $HOST.$NAME." >>$REV
                                                            
      [ $? -eq 0 ]&& echo -e "The $NAME config success1:\n$HOST       INA         $IP_HOST\n$ARPA_IP3         INPTR         $HOST.$NAME."
fi
}
##Define Shell List A Function
Add_A_List ()
{
if
       cd$BND_VAR
       REV=`ls*.rev`
       read -p"PleaseInsert 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             INA         $j" >>$NAME.zone
       echo"$ARPA_IP2      INPTR      $i.$NAME." >>$REV
       [ $? -eq 0 ]&& echo -e "The $NAME config success:\n$i      INA         $j\n$ARPA_IP2         INPTR         $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
donehttp://www.it165.net/admin/html/201308/1743.html
CentOS Bind DNS自动化部署
页: [1]
查看完整版本: CentOS Bind DNS自动化部署