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

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

    [ ! -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 <

#`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 <

#`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 <

\$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 <

\$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://blog.csdn.net/crazw/article/details/8986504

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



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


相关文章
|
Web App开发 测试技术 API
自动化测试工具Selenium的深度解析
【5月更文挑战第27天】本文旨在深入剖析自动化测试工具Selenium,探讨其架构、原理及应用。通过对其核心组件、运行机制及在实际项目中的应用案例进行详细解读,以期为软件测试人员提供全面、深入的理解与实践指导。
|
11月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
442 7
|
11月前
|
监控 数据管理 测试技术
API接口自动化测试深度解析与最佳实践指南
本文详细介绍了API接口自动化测试的重要性、核心概念及实施步骤,强调了从明确测试目标、选择合适工具、编写高质量测试用例到构建稳定测试环境、执行自动化测试、分析测试结果、回归测试及集成CI/CD流程的全过程,旨在为开发者提供一套全面的技术指南,确保API的高质量与稳定性。
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
网络协议 网络安全
基于bind软件部署DNS服务器
关于如何使用bind软件部署DNS服务器的教程,包括DNS服务器的类型、基于bind软件的部署步骤、验证DNS服务器可用性的指导,以及如何进行DNS正向解析的实现。
485 2
基于bind软件部署DNS服务器
|
机器学习/深度学习 存储 监控
深入解析软件测试中的自动化测试技术
本文旨在全面探讨软件测试中的自动化测试技术。通过对自动化测试的定义、优势、常见工具和实施步骤的详细阐述,帮助读者更好地理解和应用自动化测试。同时,本文还将讨论自动化测试的局限性及未来发展趋势,为软件测试人员提供有益的参考。
374 6
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
282 1
|
测试技术 Python
python自动化测试中装饰器@ddt与@data源码深入解析
综上所述,使用 `@ddt`和 `@data`可以大大简化写作测试用例的过程,让我们能专注于测试逻辑的本身,而无需编写重复的测试方法。通过讲解了 `@ddt`和 `@data`源码的关键部分,我们可以更深入地理解其背后的工作原理。
328 1
|
数据采集 存储 JSON
自动化数据采集:Lua爬虫与JSON解析的深度整合
自动化数据采集:Lua爬虫与JSON解析的深度整合
|
机器学习/深度学习 运维 监控
DevOps实践:从自动化部署到性能监控的全面解析
在当今快速发展的软件行业中,DevOps已经成为提升效率和质量的关键。本文将深入探讨DevOps的核心概念、实施步骤及其带来的益处,同时通过实际案例分析展示如何成功实施DevOps流程,并讨论面临的挑战及未来发展趋势。

相关产品

  • 云解析DNS