CentOS Bind DNS自动化部署

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

最近研究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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
#!/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
      [ !  - / etc / init.d / named ];then
      rpm  - - - nodeps bind - utils
      rpm  - - - nodeps bind - libs
      rpm  - - - 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   - - 's/localhost;/any;/g'  - '/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  - "com|cn|net|org"
                                                          
        while
         "$?"  - ne  0  ]
                                                            
          do
         read  - p   "Please  reInsert Into Your Add Name ,Example 51cto.com :"  NAME
         echo $NAME |grep  - "com|cn|net|org"
                                                           
      done
## IP address
        read  - p   "Please  Insert Into Your Name Server IP ADDress:"  IP
        echo $IP |egrep  - "([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  - "([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  - "([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  - "([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  - "Please insert Name DNS A HOST ,EXample  www or mail :"  HOST
        read  - "Please insert Name DNS A NS IP ADDR ,EXample 192.168.111.130 :"  IP_HOST
        echo $IP_HOST |egrep  - "([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  - "Please Reinsert Name DNS A IPADDRESS ,EXample 192.168.111.130 :"  IP_HOST
        echo $IP_HOST |egrep  - "([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  - "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  - "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
        [ !  - "$NAME.zone"  ];then
        echo  "The $NAME.zone File is not exist ,Please ADD $NAME.zone File :"
        Add_named ;
else
                                                          
        read  - "Please Enter List Name A NS File ,Example /tmp/name_list.txt: "  FILE
     if
                                                    
                                                          
        - e $ FILE  ];then
                                                          
        for  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  - "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://blog.csdn.net/crazw/article/details/8986504

http://www.xiaoxiaozi.com/2013/04/23/2409/

http://1567045.blog.51cto.com/1557045/724332



本文转自 wgkgood 51CTO博客,原文链接:http://blog.51cto.com/wgkgood/1284480


相关文章
|
1月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
1月前
|
机器学习/深度学习 存储 监控
深入解析软件测试中的自动化测试技术
本文旨在全面探讨软件测试中的自动化测试技术。通过对自动化测试的定义、优势、常见工具和实施步骤的详细阐述,帮助读者更好地理解和应用自动化测试。同时,本文还将讨论自动化测试的局限性及未来发展趋势,为软件测试人员提供有益的参考。
70 6
|
2月前
|
网络协议 网络安全
基于bind软件部署DNS服务器
关于如何使用bind软件部署DNS服务器的教程,包括DNS服务器的类型、基于bind软件的部署步骤、验证DNS服务器可用性的指导,以及如何进行DNS正向解析的实现。
90 2
基于bind软件部署DNS服务器
|
6月前
|
Web App开发 测试技术 API
自动化测试工具Selenium的深度解析
【5月更文挑战第27天】本文旨在深入剖析自动化测试工具Selenium,探讨其架构、原理及应用。通过对其核心组件、运行机制及在实际项目中的应用案例进行详细解读,以期为软件测试人员提供全面、深入的理解与实践指导。
|
3月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
87 1
|
3月前
|
测试技术 Python
python自动化测试中装饰器@ddt与@data源码深入解析
综上所述,使用 `@ddt`和 `@data`可以大大简化写作测试用例的过程,让我们能专注于测试逻辑的本身,而无需编写重复的测试方法。通过讲解了 `@ddt`和 `@data`源码的关键部分,我们可以更深入地理解其背后的工作原理。
59 1
|
3月前
|
数据采集 存储 JSON
自动化数据采集:Lua爬虫与JSON解析的深度整合
自动化数据采集:Lua爬虫与JSON解析的深度整合
|
3月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
78 0
|
3月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【8月更文挑战第31天】在软件开发的世界中,自动化测试是提高产品质量和开发效率不可或缺的一环。本文将深入探讨Selenium这一强大的自动化测试工具,从其架构、优势到实战应用,一步步揭示如何利用Selenium框架提升软件测试的效率和准确性。通过具体的代码示例,我们将展示Selenium如何简化测试流程,帮助开发者快速定位问题,确保软件的稳定性和可靠性。无论你是测试新手还是资深开发者,这篇文章都将为你打开一扇通往高效自动化测试的大门。
|
4月前
|
机器学习/深度学习 运维 监控
DevOps实践:从自动化部署到性能监控的全面解析
在当今快速发展的软件行业中,DevOps已经成为提升效率和质量的关键。本文将深入探讨DevOps的核心概念、实施步骤及其带来的益处,同时通过实际案例分析展示如何成功实施DevOps流程,并讨论面临的挑战及未来发展趋势。

相关产品

  • 云解析DNS
  • 下一篇
    无影云桌面