最近研究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 >>named.rfc1912.zones <<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>]&& 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 >$NAME.zone <<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 >></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 >>$ARPA_IP.rev <<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>>>$NAME.zone</code>
<code> </code><code>echo </code><code>"$ARPA_IP3 IN PTR $HOST.$NAME."</code> <code>>>$ARPA_IP.rev</code>
<code> </code><code>[ $? </code><code>-</code><code>eq </code><code>0</code> <code>]&& 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>>>$REV</code>
<code> </code><code>[ $? </code><code>-</code><code>eq </code><code>0</code> <code>]&& 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>>>$NAME.zone</code>
<code> </code><code>echo </code><code>"$ARPA_IP2 IN PTR $i.$NAME."</code> <code>>>$REV</code>
<code> </code><code>[ $? </code><code>-</code><code>eq </code><code>0</code> <code>]&& 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