天天看點

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

<code>#!/bin/sh</code>

<code>#auto install config bind server</code>

<code>#wugk 2013-08-28</code>

<code>#定義變量</code>

<code>BND_ETC</code><code>=</code><code>/</code><code>var</code><code>/</code><code>named</code><code>/</code><code>chroot</code><code>/</code><code>etc</code>

<code>BND_VAR</code><code>=</code><code>/</code><code>var</code><code>/</code><code>named</code><code>/</code><code>chroot</code><code>/</code><code>var</code><code>/</code><code>named</code>

<code>BAK_DIR</code><code>=</code><code>/</code><code>data</code><code>/</code><code>backup</code><code>/</code><code>dns_`date </code><code>+</code><code>%</code><code>Y</code><code>%</code><code>m</code><code>%</code><code>d</code><code>-</code><code>%</code><code>H</code><code>%</code><code>M`</code>

<code>##Backup named server</code>

<code>if</code>

<code>      </code><code>[ ! </code><code>-</code><code>d  $BAK_DIR ];then</code>

<code>      </code><code>echo </code><code>"Please waiting  Backup Named Config ............"</code>

<code>      </code><code>mkdir   </code><code>-</code><code>p  $BAK_DIR</code>

<code>      </code><code>cp </code><code>-</code><code>a  </code><code>/</code><code>var</code><code>/</code><code>named</code><code>/</code><code>chroot</code><code>/</code><code>{etc,var}   $BAK_DIR</code>

<code>      </code><code>cp </code><code>-</code><code>a  </code><code>/</code><code>etc</code><code>/</code><code>named.</code><code>*</code> <code>$BAK_DIR</code>

<code>fi</code>

<code>##Define Shell Install Function</code>

<code>Install ()</code>

<code>{</code>

<code>  </code><code>if</code>

<code>     </code><code>[ ! </code><code>-</code><code>e </code><code>/</code><code>etc</code><code>/</code><code>init.d</code><code>/</code><code>named ];then</code>

<code>     </code><code>rpm </code><code>-</code><code>e </code><code>-</code><code>-</code><code>nodeps bind</code><code>-</code><code>utils</code>

<code>     </code><code>rpm </code><code>-</code><code>e </code><code>-</code><code>-</code><code>nodeps bind</code><code>-</code><code>libs</code>

<code>     </code><code>rpm </code><code>-</code><code>e </code><code>-</code><code>-</code><code>nodeps bind</code>

<code>     </code><code>rpm </code><code>-</code><code>e bind</code><code>-</code><code>chroot</code>

<code>     </code><code>rpm </code><code>-</code><code>e caching</code><code>-</code><code>nameserver</code>

<code>     </code><code>rpm </code><code>-</code><code>ivh </code><code>-</code><code>-</code><code>nodeps  bind</code><code>-</code><code>9.3</code><code>.</code><code>6</code><code>-</code><code>20.P1</code><code>.el5_8.</code><code>6.x86_64</code><code>.rpm  bind</code><code>-</code><code>chroot</code><code>-</code><code>9.3</code><code>.</code><code>6</code><code>-</code><code>20.P1</code><code>.el5_8.</code><code>6.x86_64</code><code>.rpm    bind</code><code>-</code><code>libs</code><code>-</code><code>9.3</code><code>.</code><code>6</code><code>-</code><code>20.P1</code><code>.el5_8.</code><code>6.x86_64</code><code>.rpm  bind</code><code>-</code><code>utils</code><code>-</code><code>9.3</code><code>.</code><code>6</code><code>-</code><code>20.P1</code><code>.el5_8.</code><code>6.x86_64</code><code>.rpm   caching</code><code>-</code><code>nameserver</code><code>-</code><code>9.3</code><code>.</code><code>6</code><code>-</code><code>20.P1</code><code>.el5_8.</code><code>6.x86_64</code><code>.rpm</code>

<code>                                                    </code> 

<code>else</code>

<code>     </code><code>echo </code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>     </code><code>echo </code><code>"The Named Server is exists ,Please exit ........."</code>

<code>     </code><code>sleep </code><code>1</code>

<code> </code><code>fi</code>

<code>}</code>

<code>##Define Shell Init Function</code>

<code>Init_Config ()</code>

<code>       </code><code>cd $BND_ETC ;ls .</code><code>/</code><code>*</code>

<code>       </code><code>cp   </code><code>-</code><code>p  named.caching</code><code>-</code><code>nameserver.conf named.conf</code>

<code>       </code><code>sed  </code><code>-</code><code>i </code><code>-</code><code>e </code><code>'s/localhost;/any;/g'</code> <code>-</code><code>e </code><code>'/port/s/127.0.0.1/any/g'</code> <code>named.conf</code>

<code>       </code><code>echo </code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>       </code><code>sleep </code><code>2</code>

<code>       </code><code>echo </code><code>"The named.conf config Init success !"</code>

<code>##Define Shell Add Name Function</code>

<code>Add_named ()</code>

<code>##DNS name</code>

<code>       </code><code>read </code><code>-</code><code>p  </code><code>"Please  Insert Into Your Add Name ,Example 51cto.com :"</code> <code>NAME</code>

<code>       </code><code>echo $NAME |grep </code><code>-</code><code>E </code><code>"com|cn|net|org"</code>

<code>                                                         </code> 

<code>       </code><code>while</code>

<code>        </code><code>[ </code><code>"$?"</code> <code>-</code><code>ne </code><code>0</code> <code>]</code>

<code>                                                           </code> 

<code>         </code><code>do</code>

<code>        </code><code>read </code><code>-</code><code>p  </code><code>"Please  reInsert Into Your Add Name ,Example 51cto.com :"</code> <code>NAME</code>

<code>        </code><code>echo $NAME |grep </code><code>-</code><code>E </code><code>"com|cn|net|org"</code>

<code>                                                          </code> 

<code>     </code><code>done</code>

<code>## IP address</code>

<code>       </code><code>read </code><code>-</code><code>p  </code><code>"Please  Insert Into Your Name Server IP ADDress:"</code> <code>IP</code>

<code>       </code><code>echo $IP |egrep </code><code>-</code><code>o </code><code>"([0-9]{1,3}\.){3}[0-9]{1,3}"</code>

<code>       </code><code>[ </code><code>"$?"</code> <code>-</code><code>ne </code><code>"0"</code> <code>]</code>

<code>        </code><code>do</code>

<code>        </code><code>read </code><code>-</code><code>p  </code><code>"Please  reInsert Into Your Name Server IP ADDress:"</code> <code>IP</code>

<code>      </code><code>done</code>

<code>       </code><code>ARPA_IP</code><code>=</code><code>`echo $IP|awk </code><code>-</code><code>F. </code><code>'{print $3"."$2"."$1}'</code><code>`</code>

<code>       </code><code>ARPA_IP1</code><code>=</code><code>`echo $IP|awk </code><code>-</code><code>F. </code><code>'{print $4}'</code><code>`</code>

<code>       </code><code>cd  $BND_ETC</code>

<code>       </code><code>grep  </code><code>"$NAME"</code> <code>named.rfc1912.zones</code>

<code>                                                        </code> 

<code>         </code><code>[ $? </code><code>-</code><code>eq </code><code>0</code> <code>];then</code>

<code>         </code><code>echo </code><code>"The $NAME IS exist named.rfc1912.zones conf ,please exit ..."</code>

<code>         </code><code>exit</code>

<code>        </code><code>read </code><code>-</code><code>p  </code><code>"Please  Insert Into SLAVE Name Server IP ADDress:"</code> <code>SLAVE</code>

<code>        </code><code>echo $SLAVE |egrep </code><code>-</code><code>o </code><code>"([0-9]{1,3}\.){3}[0-9]{1,3}"</code>

<code>        </code><code>while</code>

<code>                                                   </code> 

<code>        </code><code>[ </code><code>"$?"</code> <code>-</code><code>ne </code><code>"0"</code> <code>]</code>

<code>        </code><code>done</code>

<code>        </code><code>grep  </code><code>"rev"</code> <code>named.rfc1912.zones</code>

<code>       </code><code>if</code>

<code>         </code><code>[ $? </code><code>-</code><code>ne </code><code>0</code> <code>];then</code>

<code>       </code><code>cat &gt;&gt;named.rfc1912.zones &lt;&lt;EOF</code>

<code>#`date +%Y-%m-%d` Add $NAME CONFIG</code>

<code>zone </code><code>"$NAME"</code> <code>IN {</code>

<code>        </code><code>type</code> <code>master;</code>

<code>        </code><code>file</code> <code>"$NAME.zone"</code><code>;</code>

<code>        </code><code>allow</code><code>-</code><code>transfer { $SLAVE; };</code>

<code>        </code><code>also</code><code>-</code><code>notify { $SLAVE; };</code>

<code>        </code><code>allow</code><code>-</code><code>update { none; };</code>

<code>};</code>

<code>zone </code><code>"$ARPA_IP.in-addr.arpa"</code> <code>IN {</code>

<code>        </code><code>file</code> <code>"$ARPA_IP.rev"</code><code>;</code>

<code>EOF</code>

<code>      </code><code>else</code>

<code>    </code><code>fi</code>

<code>       </code><code>[ $? </code><code>-</code><code>eq </code><code>0</code> <code>]&amp;&amp; echo </code><code>"The $NAME config name.rfc1912.zones success !"</code>

<code>       </code><code>sleep </code><code>3</code> <code>;echo </code><code>"Please waiting config $NAME zone File ............."</code>

<code>       </code><code>cd  $BND_VAR</code>

<code>       </code><code>read </code><code>-</code><code>p </code><code>"Please insert Name DNS A HOST ,EXample  www or mail :"</code> <code>HOST</code>

<code>       </code><code>read </code><code>-</code><code>p </code><code>"Please insert Name DNS A NS IP ADDR ,EXample 192.168.111.130 :"</code> <code>IP_HOST</code>

<code>       </code><code>echo $IP_HOST |egrep </code><code>-</code><code>o </code><code>"([0-9]{1,3}\.){3}[0-9]{1,3}"</code>

<code>       </code><code>ARPA_IP2</code><code>=</code><code>`echo $IP_HOST|awk </code><code>-</code><code>F. </code><code>'{print $3"."$2"."$1}'</code><code>`</code>

<code>       </code><code>ARPA_IP3</code><code>=</code><code>`echo $IP_HOST|awk </code><code>-</code><code>F. </code><code>'{print $4}'</code><code>`</code>

<code>do</code>

<code>       </code><code>read </code><code>-</code><code>p </code><code>"Please Reinsert Name DNS A IPADDRESS ,EXample 192.168.111.130 :"</code> <code>IP_HOST</code>

<code>done</code>

<code>       </code><code>cat &gt;$NAME.zone &lt;&lt;EOF</code>

<code>\$TTL    </code><code>86400</code>

<code>@               IN SOA  localhost.      root.localhost. (</code>

<code>                                        </code><code>43</code>              <code>; serial (d. adams)</code>

<code>                                        </code><code>1H</code>              <code>; refresh</code>

<code>                                        </code><code>15M</code>             <code>; retry</code>

<code>                                        </code><code>1W</code>              <code>; expiry</code>

<code>                                        </code><code>1D</code> <code>)            ; minimum</code>

<code>                </code><code>IN  NS          $NAME.</code>

<code>       </code><code>REV</code><code>=</code><code>`ls  </code><code>*</code><code>.rev`</code>

<code>       </code><code>ls  </code><code>*</code><code>.rev &gt;&gt;</code><code>/</code><code>dev</code><code>/</code><code>null</code>

<code>                                                     </code> 

<code>       </code><code>[ $? </code><code>-</code><code>ne </code><code>0</code> <code>];then</code>

<code>       </code><code>cat &gt;&gt;$ARPA_IP.rev &lt;&lt;EOF</code>

<code>@       IN      SOA     localhost.    root.localhost.  (</code>

<code>                                      </code><code>1997022703</code> <code>; Serial</code>

<code>                                      </code><code>28800</code>      <code>; Refresh</code>

<code>                                      </code><code>14400</code>      <code>; Retry</code>

<code>                                      </code><code>3600000</code>    <code>; Expire</code>

<code>                                      </code><code>86400</code> <code>)    ; Minimum</code>

<code>            </code><code>IN  NS  $NAME.</code>

<code>        </code><code>echo  </code><code>"$HOST             IN  A           $IP_HOST"</code> <code>&gt;&gt;$NAME.zone</code>

<code>        </code><code>echo  </code><code>"$ARPA_IP3         IN  PTR         $HOST.$NAME."</code> <code>&gt;&gt;$ARPA_IP.rev</code>

<code>        </code><code>[ $? </code><code>-</code><code>eq </code><code>0</code> <code>]&amp;&amp; echo </code><code>-</code><code>e </code><code>"The $NAME config success:\n$HOST       IN  A           $IP_HOST\n$ARPA_IP3         IN  PTR         $HOST.$NAME."</code>

<code>        </code><code>sed </code><code>-</code><code>i  </code><code>"9a IN  NS  $NAME."</code> <code>$REV</code>

<code>        </code><code>echo  </code><code>"$ARPA_IP3         IN  PTR         $HOST.$NAME."</code> <code>&gt;&gt;$REV</code>

<code>        </code><code>[ $? </code><code>-</code><code>eq </code><code>0</code> <code>]&amp;&amp; echo </code><code>-</code><code>e </code><code>"The $NAME config success1:\n$HOST       IN  A           $IP_HOST\n$ARPA_IP3         IN  PTR         $HOST.$NAME."</code>

<code>##Define Shell List A Function</code>

<code>Add_A_List ()</code>

<code>       </code><code>[ ! </code><code>-</code><code>e </code><code>"$NAME.zone"</code> <code>];then</code>

<code>       </code><code>echo </code><code>"The $NAME.zone File is not exist ,Please ADD $NAME.zone File :"</code>

<code>       </code><code>Add_named ;</code>

<code>       </code><code>read </code><code>-</code><code>p </code><code>"Please Enter List Name A NS File ,Example /tmp/name_list.txt: "</code> <code>FILE</code>

<code>    </code><code>if</code>

<code>       </code><code>[ </code><code>-</code><code>e $</code><code>FILE</code> <code>];then</code>

<code>       </code><code>for</code> <code>i </code><code>in</code>  <code>`cat $</code><code>FILE</code><code>|awk </code><code>'{print $2}'</code><code>|sed </code><code>"s/$NAME//g"</code><code>|sed </code><code>'s/\.$//g'</code><code>`</code>

<code>       </code><code>#for i in  `cat $FILE|awk '{print $1}'|sed "s/$NAME//g"|sed 's/\.$//g'`</code>

<code>       </code><code>j</code><code>=</code><code>`awk </code><code>-</code><code>v I</code><code>=</code><code>"$i.$NAME"</code> <code>'{if(I==$2)print $1}'</code> <code>$</code><code>FILE</code><code>`</code>

<code>                                                       </code> 

<code>       </code><code>echo </code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>       </code><code>echo </code><code>"The $NAME.zone File is exist ,Please Enter insert NAME HOST ...."</code>

<code>       </code><code>sleep </code><code>1</code>

<code>       </code><code>ARPA_IP</code><code>=</code><code>`echo $j|awk </code><code>-</code><code>F. </code><code>'{print $3"."$2"."$1}'</code><code>`</code>

<code>       </code><code>ARPA_IP2</code><code>=</code><code>`echo $j|awk </code><code>-</code><code>F. </code><code>'{print $4}'</code><code>`</code>

<code>       </code><code>echo  </code><code>"$i             IN  A           $j"</code> <code>&gt;&gt;$NAME.zone</code>

<code>       </code><code>echo  </code><code>"$ARPA_IP2      IN  PTR      $i.$NAME."</code> <code>&gt;&gt;$REV</code>

<code>       </code><code>[ $? </code><code>-</code><code>eq </code><code>0</code> <code>]&amp;&amp; echo </code><code>-</code><code>e </code><code>"The $NAME config success:\n$i      IN  A           $j\n$ARPA_IP2         IN  PTR         $i.$NAME."</code>

<code>                                                      </code> 

<code>     </code><code>else</code>

<code>       </code><code>echo </code><code>"The $FILE List File IS Not Exist .......,Please exit ..."</code>

<code>     </code><code>fi</code>

<code>##Define Shell Select Menu</code>

<code>PS3</code><code>=</code><code>"Please select Menu Name Config: "</code>

<code>select i </code><code>in</code> <code>"自動安裝Bind服務"</code>  <code>"自動初始化Bind配置"</code> <code>"添加解析域名"</code>  <code>"批量添加A記錄"</code>

<code>case   $i   </code><code>in</code>

<code>       </code><code>"自動安裝Bind服務"</code><code>)</code>

<code>       </code><code>Install</code>

<code>;;</code>

<code>       </code><code>"自動初始化Bind配置"</code><code>)</code>

<code>       </code><code>Init_Config</code>

<code>       </code><code>"添加解析域名"</code><code>)</code>

<code>       </code><code>Add_named</code>

<code>       </code><code>"批量添加A記錄"</code><code>)</code>

<code>       </code><code>Add_A_List</code>

<code>       </code><code>*</code> <code>)</code>

<code>       </code><code>echo </code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>       </code><code>echo </code><code>"Please exec: sh  $0  { Install(1)  or Init_Config(2) or Add_named(3) or Add_config_A(4) }"</code>

<code>esac</code>

本文參考如下文章,非常感謝,歡迎交流、轉載!

<a href="http://blog.csdn.net/crazw/article/details/8986504">http://blog.csdn.net/crazw/article/details/8986504</a>

<a href="http://www.xiaoxiaozi.com/2013/04/23/2409/">http://www.xiaoxiaozi.com/2013/04/23/2409/</a>

<a href="http://1567045.blog.51cto.com/1557045/724332">http://1567045.blog.51cto.com/1557045/724332</a>

本文轉自 wgkgood 51CTO部落格,原文連結:http://blog.51cto.com/wgkgood/1284480

繼續閱讀