六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 786|回复: 0

CentOS Bind DNS自动化部署

[复制链接]
 楼主| 发表于 2015-5-20 11:48:36 | 显示全部楼层 |阅读模式
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系列)
  1. #!/bin/sh
  2. #auto install config bind server
  3. #wugk 2013-08-28
  4. #定义变量
  5. BND_ETC=/var/named/chroot/etc
  6. BND_VAR=/var/named/chroot/var/named
  7. BAK_DIR=/data/backup/dns_`date +%Y%m%d-%H%M`
  8. ##Backup named server
  9. if
  10.       [ ! -d  $BAK_DIR ];then
  11.       echo "Please waiting  Backup Named Config ............"
  12.       mkdir   -p  $BAK_DIR
  13.       cp -a  /var/named/chroot/{etc,var}   $BAK_DIR
  14.       cp -a  /etc/named.* $BAK_DIR
  15. fi
  16. ##Define Shell Install Function
  17. Install ()
  18. {
  19.   if
  20.      [ ! -e /etc/init.d/named ];then
  21.      rpm -e --nodeps bind-utils
  22.      rpm -e --nodeps bind-libs
  23.      rpm -e --nodeps bind
  24.      rpm -e bind-chroot
  25.      rpm -e caching-nameserver
  26.      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
  27.                                                       
  28. else
  29.      echo -------------------------------------------------
  30.      echo "The Named Server is exists ,Please exit ........."
  31.      sleep 1
  32. fi
  33. }
  34. ##Define Shell Init Function
  35. Init_Config ()
  36. {
  37.        cd $BND_ETC ;ls ./*
  38.        cp   -p  named.caching-nameserver.conf named.conf
  39.        sed  -i -e 's/localhost;/any;/g' -e '/port/s/127.0.0.1/any/g' named.conf
  40.        echo -------------------------------------------------
  41.        sleep 2
  42.        echo "The named.conf config Init success !"
  43. }
  44. ##Define Shell Add Name Function
  45. Add_named ()
  46. {
  47. ##DNS name
  48.        read -p  "Please  Insert Into Your Add Name ,Example 51cto.com :" NAME
  49.        echo $NAME |grep -E "com|cn|net|org"
  50.                                                            
  51.        while
  52.         [ "$?" -ne 0 ]
  53.                                                             
  54.          do
  55.         read -p  "Please  reInsert Into Your Add Name ,Example 51cto.com :" NAME
  56.         echo $NAME |grep -E "com|cn|net|org"
  57.                                                             
  58.      done
  59. ## IP address
  60.        read -p  "Please  Insert Into Your Name Server IP ADDress:" IP
  61.        echo $IP |egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
  62.        while
  63.        [ "$?" -ne "0" ]
  64.                                                            
  65.         do
  66.         read -p  "Please  reInsert Into Your Name Server IP ADDress:" IP
  67.        echo $IP |egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
  68.       done
  69.        ARPA_IP=`echo $IP|awk -F. '{print $3"."$2"."$1}'`
  70.        ARPA_IP1=`echo $IP|awk -F. '{print $4}'`
  71.        cd  $BND_ETC
  72.        grep  "$NAME" named.rfc1912.zones
  73.                                                          
  74. if
  75.          [ $? -eq 0 ];then
  76.          echo "The $NAME IS exist named.rfc1912.zones conf ,please exit ..."
  77.          exit
  78. else
  79.         read -p  "Please  Insert Into SLAVE Name Server IP ADDress:" SLAVE
  80.                                                          
  81.         echo $SLAVE |egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
  82.         while
  83.                                                      
  84.         [ "$?" -ne "0" ]
  85.         do
  86.         read -p  "Please  Insert Into SLAVE Name Server IP ADDress:" SLAVE
  87.         echo $SLAVE |egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
  88.         done
  89.         grep  "rev" named.rfc1912.zones
  90.                                                      
  91.        if
  92.          [ $? -ne 0 ];then
  93.        cat >>named.rfc1912.zones <<EOF
  94. #`date +%Y-%m-%d` Add $NAME CONFIG
  95. zone "$NAME" IN {
  96.         type master;
  97.         file "$NAME.zone";
  98.         allow-transfer { $SLAVE; };
  99.         also-notify { $SLAVE; };
  100.         allow-update { none; };
  101. };
  102. zone "$ARPA_IP.in-addr.arpa" IN {
  103.         type master;
  104.         file "$ARPA_IP.rev";
  105.         allow-transfer { $SLAVE; };
  106.         also-notify { $SLAVE; };
  107.         allow-update { none; };
  108. };
  109. EOF
  110.       else
  111.        cat >>named.rfc1912.zones <<EOF
  112. #`date +%Y-%m-%d` Add $NAME CONFIG
  113. zone "$NAME" IN {
  114.         type master;
  115.         file "$NAME.zone";
  116.         allow-transfer { $SLAVE; };
  117.         also-notify { $SLAVE; };
  118.         allow-update { none; };
  119. };
  120. EOF
  121.     fi
  122. fi
  123.        [ $? -eq 0 ]&& echo "The $NAME config name.rfc1912.zones success !"
  124.        sleep 3 ;echo "Please waiting config $NAME zone File ............."
  125.        cd  $BND_VAR
  126.                                                            
  127.        read -p "Please insert Name DNS A HOST ,EXample  www or mail :" HOST
  128.        read -p "Please insert Name DNS A NS IP ADDR ,EXample 192.168.111.130 :" IP_HOST
  129.        echo $IP_HOST |egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
  130.        ARPA_IP2=`echo $IP_HOST|awk -F. '{print $3"."$2"."$1}'`
  131.        ARPA_IP3=`echo $IP_HOST|awk -F. '{print $4}'`
  132.        while
  133.        [ "$?" -ne "0" ]
  134. do
  135.                                                            
  136.        read -p "Please Reinsert Name DNS A IPADDRESS ,EXample 192.168.111.130 :" IP_HOST
  137.        echo $IP_HOST |egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
  138. done
  139.        cat >$NAME.zone <<EOF
  140. \$TTL    86400
  141. @               IN SOA  localhost.      root.localhost. (
  142.                                         43              ; serial (d. adams)
  143.                                         1H              ; refresh
  144.                                         15M             ; retry
  145.                                         1W              ; expiry
  146.                                         1D )            ; minimum
  147.                 IN  NS          $NAME.
  148. EOF
  149.                                                          
  150.        REV=`ls  *.rev`
  151.        ls  *.rev >>/dev/null
  152.                                                       
  153. if
  154.        [ $? -ne 0 ];then
  155.        cat >>$ARPA_IP.rev <<EOF
  156. \$TTL    86400
  157. @       IN      SOA     localhost.    root.localhost.  (
  158.                                       1997022703 ; Serial
  159.                                       28800      ; Refresh
  160.                                       14400      ; Retry
  161.                                       3600000    ; Expire
  162.                                       86400 )    ; Minimum
  163.             IN  NS  $NAME.
  164. EOF
  165.         echo  "$HOST             IN  A           $IP_HOST" >>$NAME.zone
  166.         echo  "$ARPA_IP3         IN  PTR         $HOST.$NAME." >>$ARPA_IP.rev
  167.                                                             
  168.         [ $? -eq 0 ]&& echo -e "The $NAME config success:\n$HOST       IN  A           $IP_HOST\n$ARPA_IP3         IN  PTR         $HOST.$NAME."
  169. else
  170.                                                            
  171.                                                             
  172.         sed -i  "9a IN  NS  $NAME." $REV
  173.         echo  "$HOST             IN  A           $IP_HOST" >>$NAME.zone
  174.         echo  "$ARPA_IP3         IN  PTR         $HOST.$NAME." >>$REV
  175.                                                             
  176.         [ $? -eq 0 ]&& echo -e "The $NAME config success1:\n$HOST       IN  A           $IP_HOST\n$ARPA_IP3         IN  PTR         $HOST.$NAME."
  177. fi
  178. }
  179. ##Define Shell List A Function
  180. Add_A_List ()
  181. {
  182. if
  183.        cd  $BND_VAR
  184.        REV=`ls  *.rev`
  185.        read -p  "Please  Insert Into Your Add Name ,Example 51cto.com :" NAME
  186.        [ ! -e "$NAME.zone" ];then
  187.        echo "The $NAME.zone File is not exist ,Please ADD $NAME.zone File :"
  188.        Add_named ;
  189. else
  190.                                                            
  191.        read -p "Please Enter List Name A NS File ,Example /tmp/name_list.txt: " FILE
  192.     if
  193.                                                      
  194.                                                            
  195.        [ -e $FILE ];then
  196.                                                            
  197.        for i in  `cat $FILE|awk '{print $2}'|sed "s/$NAME//g"|sed 's/\.$//g'`
  198.        #for i in  `cat $FILE|awk '{print $1}'|sed "s/$NAME//g"|sed 's/\.$//g'`
  199. do
  200.        j=`awk -v I="$i.$NAME" '{if(I==$2)print $1}' $FILE`
  201.                                                          
  202.        echo -----------------------------------------------------------
  203.        echo "The $NAME.zone File is exist ,Please Enter insert NAME HOST ...."
  204.        sleep 1
  205.        ARPA_IP=`echo $j|awk -F. '{print $3"."$2"."$1}'`
  206.        ARPA_IP2=`echo $j|awk -F. '{print $4}'`
  207.        echo  "$i             IN  A           $j" >>$NAME.zone
  208.        echo  "$ARPA_IP2      IN  PTR      $i.$NAME." >>$REV
  209.        [ $? -eq 0 ]&& echo -e "The $NAME config success:\n$i      IN  A           $j\n$ARPA_IP2         IN  PTR         $i.$NAME."
  210. done
  211.                                                            
  212.                                                         
  213.      else
  214.                                                            
  215.        echo "The $FILE List File IS Not Exist .......,Please exit ..."
  216.                                                       
  217.      fi
  218. fi
  219. }
  220. ##Define Shell Select Menu
  221.                                                          
  222. PS3="Please select Menu Name Config: "
  223. select i in "自动安装Bind服务"  "自动初始化Bind配置" "添加解析域名"  "批量添加A记录"
  224. do
  225. case   $i   in
  226.        "自动安装Bind服务")
  227.        Install
  228. ;;
  229.        "自动初始化Bind配置")
  230.        Init_Config
  231. ;;
  232.        "添加解析域名")
  233.        Add_named
  234. ;;
  235.        "批量添加A记录")
  236.        Add_A_List
  237.                                                            
  238. ;;
  239.        * )
  240.        echo -----------------------------------------------------
  241.        sleep 1
  242.        echo "Please exec: sh  $0  { Install(1)  or Init_Config(2) or Add_named(3) or Add_config_A(4) }"
  243. ;;
  244. esac
  245. done
复制代码
http://www.it165.net/admin/html/201308/1743.html
CentOS Bind DNS自动化部署
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表