天天看點

BIND搭建主從DNS

DNS介紹

DNS (Domain Name System)域名解析系統,主要用來解析IP 和域名的對應關系。

DNS有這幾種不同的記錄類型:

SOA: 相當一個解釋說明的标記

A記錄:Adress記錄,用來指定域名或主機名和IP的對應關系。域名對應的IP位址。

NS記錄:Name Server ,域名伺服器記錄,用來指定該域名由哪個DNS伺服器來進行解析。

MX記錄:Mail Exchanger,郵件伺服器的域名記錄,通過解析@後的域名将郵件發送到指定伺服器。

CNAME記錄:Canonical Name, 别名記錄,允許将多個域名映射到同一台計算機上。

TXT記錄:一般指主機名或域名的說明。

檢視DNS三個指令: dig  nslookup host

dig可以友善清晰的檢視dns的解析過程,使用host可以比較準确的檢視目前主機的DNS解析記錄,在有緩存幹擾的情況下使用host檢視是比較準确的。

DNS預設使用的UDP協定,使用53端口。在生産的實際應用中,DNS會優先使用UDP協定,在一些防火牆的限制下,如果UDP傳輸不成功,會使用TCP協定,是以在部署DNS時,需要允許DNS的TCP和UDP的資料包通過網絡。

DNS的域名解析過程:

 用戶端先在本地緩存查找有沒有本地緩存,用戶端發送DNS請求到DNS伺服器。

DNS伺服器接到請求後檢查DNS伺服器的緩存,如果查到請求的位址和名字,即向客戶機發出應答資訊。

如果沒有請求的資訊,則查詢資料庫,如果查詢到請求的資訊即向客戶機發出應答消息。

若沒有查到,則将請求發送給根域DNS伺服器,并依次從根域查找頂級域,如果根域沒有則查找二級域,二級域沒有則查找三級域直到找到要解析的資訊,然後向客戶機所在的DNS發出應答消息。

客戶機所在的DNS伺服器收到應答消息之後将此資訊在緩存中存儲,然後将解析結果發送給客戶機。

若沒有找到,則傳回錯誤資訊。

DNS的分類:

主DNS伺服器: 存儲着原始資料的DNS伺服器

從DNS伺服器:使用自動更新的方式從主DNS伺服器同步資料的DNS伺服器,也稱為輔助DNS。

緩存伺服器:不負責本地解析,采用遞歸方式轉發客戶機查詢請求,并傳回結果給客戶機的DNS伺服器,同時緩存查詢回來的結果,也叫緩存伺服器。

轉發器:将DNS請求轉發給指定的一台或者多台伺服器,自身并不緩存查詢結果。

DNS的安裝部署

配置主DNS

安裝需要的元件:

1

<code># yum install -y bind-utils bind bind-devel bind-chroot</code>

首先需要利用腳本生成一個rndc的配置檔案和 rndc的key:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<code>/sbin/rndc-confgen</code> <code>-r  </code><code>/dev/urandom</code>  <code>&gt; </code><code>/etc/rndc</code><code>.conf</code>

<code>cat</code>   <code>/etc/rndc</code><code>.conf </code>

<code># Start of rndc.conf</code>

<code>key </code><code>"rndc-key"</code> <code>{</code>

<code>        </code><code>algorithm hmac-md5;</code>

<code>        </code><code>secret </code><code>"zIGnSUO1Y8iBkw0jyJzGxA=="</code><code>; </code><code># 密鑰要在所有的檔案中保持一緻</code>

<code>};</code>

<code>options {</code>

<code>        </code><code>default-key </code><code>"rndc-key"</code><code>;</code>

<code>        </code><code>default-server 127.0.0.1;</code>

<code>        </code><code>default-port 953;</code>

<code># End of rndc.conf</code>

<code># Use with the following in named.conf, adjusting the allow list as needed:</code>

<code># key "rndc-key" {</code>

<code>#       algorithm hmac-md5;</code>

<code>#       secret "zIGnSUO1Y8iBkw0jyJzGxA==";</code>

<code># };</code>

<code># </code>

<code># controls {</code>

<code>#       inet 127.0.0.1 port 953</code>

<code>#               allow { 127.0.0.1; } keys { "rndc-key"; };</code>

<code># End of named.conf</code>

配置rndc.key的配置檔案:

<code>cat</code>  <code>/etc/rndc</code><code>.key</code>

<code>        </code><code>secret </code><code>"zIGnSUO1Y8iBkw0jyJzGxA=="</code><code>;</code>

打開配置檔案/etc/named.conf,修改其中的配置 :

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

<code>        </code><code>listen-on port 53 { any; };         </code><code># 監聽的端口和IP</code>

<code>        </code><code>directory       </code><code>"/var/named"</code><code>;       </code><code># 主配置檔案目錄</code>

<code>        </code><code>dump-</code><code>file</code>       <code>"/var/named/data/cache_dump.db"</code><code>; </code><code># 緩存的dumpDB檔案路徑,沒有指定的情況下是在Directory目錄</code>

<code>        </code><code>statistics-</code><code>file</code> <code>"/var/named/data/named_stats.txt"</code><code>;  </code><code># DNS解析狀态統計,可以做監控</code>

<code>        </code><code>memstatistics-</code><code>file</code> <code>"/var/named/data/named_mem_stats.txt"</code><code>;</code>

<code>        </code><code>allow-query     { any; };     </code><code>#允許通路DNS伺服器的主機,可以是IP段和主機名</code>

<code>        </code><code>recursion </code><code>yes</code><code>;              </code><code># 開啟遞歸查詢</code>

<code>        </code><code>pid-</code><code>file</code> <code>"/var/named/chroot/var/run/named/named.pid"</code><code>;</code>

<code>        </code><code>forwarders {               </code><code># DNS轉發伺服器,用于本地DNS無域名解析記錄情況</code>

<code>                    </code><code>114.114.114.114;</code>

<code>                    </code><code>8.8.8.8;</code>

<code>                    </code><code>};</code>

<code>key  </code><code>"rndc-key"</code> <code>{              </code><code># 值KEY進行驗證</code>

<code>        </code><code>secret </code><code>"zIGnSUO1Y8iBkw0jyJzGxA=="</code><code>;  </code><code># 此處的KEY是使用rndc指令中生成的,要保持一緻</code>

<code>controls {</code>

<code>        </code><code>inet 127.0.0.1 port 953</code>

<code>        </code><code>allow {127.0.0.1; } keys {</code><code>"rndc-key"</code><code>; };</code>

<code>logging {                          </code><code>#日志資訊級别</code>

<code>        </code><code>channel warning {          </code><code>#告警日志,及日志存放的路徑,單個檔案大小</code>

<code>        </code><code>file</code> <code>"/var/named/chroot/var/log/dns_warning"</code> <code>versions 10 size 10m;</code>

<code>        </code><code>severity warning;</code>

<code>        </code><code>print-category </code><code>yes</code><code>;</code>

<code>        </code><code>print-severity </code><code>yes</code><code>;</code>

<code>        </code><code>print-</code><code>time</code> <code>yes</code><code>;</code>

<code>        </code> 

<code>        </code><code>};</code>

<code>        </code><code>channel general_dns {    </code><code># 通路日志 記錄10個,每個大小最大為100m</code>

<code>          </code><code>file</code> <code>"/var/named/chroot/var/log/dns_log"</code> <code>versions 10 size 100m;</code>

<code>          </code><code>serverity info;</code>

<code>          </code><code>print-category </code><code>yes</code><code>;</code>

<code>          </code><code>print-severity </code><code>yes</code><code>;</code>

<code>          </code><code>print-</code><code>time</code> <code>yes</code><code>;</code>

<code>        </code><code>category default {   </code><code>#預設使用warning日志配置</code>

<code>          </code><code>warning;</code>

<code>        </code><code>category queries {   </code><code>#調用通路日志配置</code>

<code>        </code><code>general_dns;</code>

<code>include </code><code>"/var/named/chroot/etc/view.conf"</code><code>;  </code><code>#包含的一些配置檔案</code>

配置主配置檔案中指定的view 檔案:

<code>cat</code> <code>/var/named/chroot/etc/view</code><code>.conf</code>

<code>view </code><code>"View"</code> <code>{                         </code><code># view 名稱</code>

<code> </code><code>zone </code><code>"test.com"</code> <code>{                    </code><code># 域名</code>

<code>    </code><code>type</code> <code>master;                      </code><code># 主 DNS</code>

<code>    </code><code>file</code> <code>"test.com.zone"</code><code>;             </code><code># 指定的域檔案</code>

<code>    </code><code>allow-transfer {        </code><code># 允許進行資料同步的主機,這裡是slave,從DNS</code>

<code>    </code><code>192.168.1.11;</code>

<code>  </code><code>notify </code><code>yes</code><code>;               </code><code># 如果主DNS記錄發生變化,則通知從DNS同步</code>

<code>  </code><code>also-notify {</code>

配置域檔案:

<code>[root@DNS-Server ~]</code><code># cat /var/named/chroot/etc/test.com.zone</code>

<code>$ORIGIN .             </code><code># 檔案生效的域 . 代表使用後面指定的配置</code>

<code>$TTL 3600 ; 1 hour    </code><code># 域名的生存周期</code>

<code>test</code><code>.com  IN SOA </code><code>op</code><code>.</code><code>test</code><code>.com dns.</code><code>test</code><code>.com. (</code>

<code>          </code><code>2000      ; serial-number         </code><code># 用于标記DNS記錄是否發生了更改</code>

<code>          </code><code>900       ; refresh  (15 minutes) </code>

<code>          </code><code>600       ; retry (10 minutes)</code>

<code>          </code><code>86400     ; expire (1 day)</code>

<code>          </code><code>3600      ; minimum (1 hour)</code>

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

<code>     </code><code>NS    </code><code>op</code><code>.</code><code>test</code><code>.com.     </code><code># NS 記錄</code>

<code>$ORIGIN </code><code>test</code><code>.com.</code>

<code>shanks   A  1.2.3.4</code>

<code>op</code>      <code>A   1.2.3.4</code>

<code>t      A    1.2.3.4</code>

修改目錄權限,并加入開機自啟動:

<code>cd</code> <code>/var</code> <code>&amp;&amp; </code><code>chown</code> <code>-R named.named named</code>

<code>systemctl start named</code>

<code>systemctl </code><code>enable</code> <code>named</code>

如果啟動失敗,顯示PID無法讀取,可以檢視相關的配置檔案和目錄權限,同時,确認啟動腳本中的PIDfile目錄是否一緻。

CentOS7 的服務管理腳本路徑為: /usr/lib/systemd/system 

啟動成功後檢視端口是否監聽:        

<code>[root@DNS-Server system]</code><code># netstat -lntp</code>

<code>Active Internet connections (only servers)</code>

<code>Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID</code><code>/Program</code> <code>name    </code>

<code>tcp        0      0 192.168.1.10:53         0.0.0.0:*               LISTEN      9972</code><code>/named</code>          

<code>tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      9972</code><code>/named</code>          

<code>tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      955</code><code>/sshd</code>            

<code>tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      9972</code><code>/named</code>          

<code>tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2057</code><code>/master</code>         

<code>tcp6       0      0 :::22                   :::*                    LISTEN      955</code><code>/sshd</code>            

<code>tcp6       0      0 ::1:25                  :::*                    LISTEN      2057</code><code>/master</code>         

<code>[root@DNS-Server system]</code><code># netstat -lnup</code>

<code>udp        0      0 192.168.1.10:53         0.0.0.0:*                           9972</code><code>/named</code>          

<code>udp        0      0 127.0.0.1:53            0.0.0.0:*                           9972</code><code>/named</code>

檢視是否能夠解析:

<code>[root@DNS-Server system]</code><code># dig @127.0.0.1 t.test.com</code>

<code>; &lt;&lt;&gt;&gt; DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 &lt;&lt;&gt;&gt; @127.0.0.1 t.</code><code>test</code><code>.com</code>

<code>; (1 server found)</code>

<code>;; global options: +cmd</code>

<code>;; Got answer:</code>

<code>;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, </code><code>id</code><code>: 38617</code>

<code>;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2</code>

<code>;; OPT PSEUDOSECTION:</code>

<code>; EDNS: version: 0, flags:; udp: 4096</code>

<code>;; QUESTION SECTION:</code>

<code>;t.</code><code>test</code><code>.com.                    IN      A</code>

<code>;; ANSWER SECTION:</code>

<code>t.</code><code>test</code><code>.com.             3600    IN      A       1.2.3.4</code>

<code>;; AUTHORITY SECTION:</code>

<code>test</code><code>.com.               3600    IN      NS      OP.</code><code>test</code><code>.com.</code>

<code>;; ADDITIONAL SECTION:</code>

<code>OP.</code><code>test</code><code>.com.            3600    IN      A       1.2.3.4</code>

<code>;; Query </code><code>time</code><code>: 0 msec</code>

<code>;; SERVER: 127.0.0.1</code><code>#53(127.0.0.1)</code>

<code>;; WHEN: Tue Dec 06 15:29:47 CST 2016</code>

<code>;; MSG SIZE  rcvd: 88</code>

配置從DNS

 在另外一台機器上安裝從DNS,可以使用master-slave 模式來對主從進行同步。

安裝好後,配置named.conf,和master上保持相同:

<code># cat /etc/named.conf</code>

<code>  </code><code>listen-on port 53 {any;};</code>

<code>  </code><code>directory </code><code>"/var/named/chroot/etc/"</code><code>;</code>

<code>  </code><code>pid-</code><code>file</code> <code>"/var/named/chroot/var/run/named/named.pid"</code><code>;</code>

<code>  </code><code>allow-query { any; };</code>

<code>  </code><code>Dump-</code><code>file</code> <code>"/var/named/chroot/var/log/binddump.db"</code><code>;</code>

<code>  </code><code>Statistics-</code><code>file</code> <code>"/var/named/chroot/var/log/named_stats"</code><code>;</code>

<code>  </code><code>zone-statistics </code><code>yes</code><code>;</code>

<code>  </code><code>memstatistics-</code><code>file</code> <code>"log/mem_stats"</code><code>;</code>

<code>  </code><code>empty-zones-</code><code>enable</code> <code>no;</code>

<code>  </code><code>forwarders {114.114.114.114;8.8.8.8; };</code>

<code>       </code><code>inet 127.0.0.1 port 953</code>

<code>               </code><code>allow { 127.0.0.1; } keys { </code><code>"rndc-key"</code><code>; };</code>

<code> </code><code>};</code>

<code>logging {</code>

<code>  </code><code>channel warning {</code>

<code>    </code><code>file</code> <code>"/var/named/chroot/var/log/dns_warning"</code> <code>versions 10 size 10m;</code>

<code>    </code><code>severity warning;</code>

<code>    </code><code>print-category </code><code>yes</code><code>;</code>

<code>    </code><code>print-severity </code><code>yes</code><code>;</code>

<code>    </code><code>print-</code><code>time</code> <code>yes</code><code>;</code>

<code>  </code><code>};</code>

<code>  </code><code>channel general_dns {</code>

<code>    </code><code>file</code> <code>"/var/named/chroot/var/log/dns_log"</code> <code>versions 10 size 100m;</code>

<code>    </code><code>severity info;</code>

<code>  </code><code>category default {</code>

<code>    </code><code>warning;</code>

<code>  </code><code>category queries {</code>

<code>    </code><code>general_dns;</code>

<code>include </code><code>"/var/named/chroot/etc/view.conf"</code><code>;</code>

rndc.key和rndc.conf 檔案也與master保持一緻。

配置從DNS上的view檔案:

<code>[root@localhost ~]</code><code># cat /var/named/chroot/etc/view.conf</code>

<code>view </code><code>"Slave view"</code> <code>{        </code><code># view檔案資訊,可以自定義</code>

<code>    </code><code>zone </code><code>"test.com"</code> <code>{      </code><code># 域名名稱</code>

<code>       </code><code>type</code> <code>slave;         </code><code># 指定此伺服器為slave</code>

<code>       </code><code>masters {192.168.1.10;};   </code><code># 指定主DNS ip</code>

<code>       </code><code>Masterfile-Format Text;   </code><code># 使同步的檔案為可讀的文本,不加此參數檔案顯示亂碼</code>

<code>       </code><code>file</code> <code>"slave.test.com.zone"</code><code>;  </code><code># 定義檔案名稱,可以自定義</code>

修改目錄權限,并加入開機啟動:

提示:如果服務已經啟動的情況下,在修改了除named.conf 之外的配置檔案時,隻需要使用rndc reload 指令即可使配置生效。

當master和slave 同步之後,在指定的slave目錄/var/named/chroot/etc 下生成 zone檔案。

<code>[root@DNS-Slave ~]</code><code># ls -l /var/named/chroot/etc/</code>

<code>total 8</code>

<code>drwxr-x---. 2 named named   6 Sep 28 21:14 named</code>

<code>drwxr-x---. 3 named named  24 Dec  6 15:59 pki</code>

<code>-rw-r--r--. 1 named named 268 Dec  6 20:15 slave.</code><code>test</code><code>.com.zone </code><code># 同步生成的檔案</code>

<code>-rw-r--r--. 1 named named 136 Dec  6 18:00 view.conf</code>

注意:這裡生成的檔案如果是不可讀的,如果要讓檔案可讀,需要在slave中的view.conf檔案中加Masterfile-Format Text;這個參數才行。

通過本地測試檔案是否正确:

<code>[root@DNS-Slave etc]</code><code># dig @127.0.0.1 t.test.com</code>

<code>;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, </code><code>id</code><code>: 16200</code>

<code>;t.</code><code>test</code><code>.com.INA</code>

<code>t.</code><code>test</code><code>.com.3600INA1.2.3.4</code>

<code>test</code><code>.com.3600INNSOP.</code><code>test</code><code>.com.</code>

<code>OP.</code><code>test</code><code>.com.3600INA1.2.3.4</code>

<code>;; WHEN: Tue Dec 06 20:32:53 CST 2016</code>

當從DNS需要強制與master同步時,直接重新開機slave的 named服務即可。

 本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1880144

繼續閱讀