在前面的文章中我們搭建了一個主從DNS,但是在實際的應用中,僅僅搭建起來是不夠的,對DNS添加各種記錄是日常維護DNS中比較常見的問題,如添加A記錄,CNAME,MX,PTR等。
添加A記錄
在主從的配置中,一般會對主DNS進行修改,從DNS同步主DNS的資料。
編輯master節點的zone配置檔案,可以直接在末尾添加一行記錄,同時将serial值 +1:
1
<code> </code><code>2001 ; serial </code><code># 将原來2000的serial值改為2001,使進行slave同步</code>
2
3
4
5
<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>trying A 192.168.1.2 </code><code># 添加的一行記錄</code>
執行 rndc reload 使配置檔案生效,此時,slave上的zone檔案也會更新。
驗證結果:
6
<code>[root@DNS-Server ~]</code><code># host trying.test.com 127.0.0.1</code>
<code>Using domain server:</code>
<code>Name: 127.0.0.1</code>
<code>Address: 127.0.0.1</code><code>#53</code>
<code>Aliases: </code>
<code>trying.</code><code>test</code><code>.com has address 192.168.1.2</code>
添加CNAME記錄
與添加A記錄一樣,在檔案末尾追加一行記錄:
<code>tryingstuff CNAME trying.</code><code>test</code><code>.com. </code><code># 末尾的“.” 不能忽略</code>
将serial +1
執行rndc reload使配置檔案生效。
7
<code>[root@DNS-Server ~]</code><code># host tryingstuff.test.com 127.0.0.1</code>
<code>tryingstuff.</code><code>test</code><code>.com is an </code><code>alias</code> <code>for</code> <code>trying.</code><code>test</code><code>.com.</code>
添加MX記錄
同理,修改zone 配置檔案,serial +1, zone檔案末尾加入一行結果:
<code># vim /var/named/chroot/etc/test.com.zone</code>
<code>mx MX 3 192.168.1.100 </code><code># 3表示優先級,數字越低,優先級越高</code>
執行rndc reload, 測試結果:
<code>[root@DNS-Server ~]</code><code># host mx.test.com 127.0.0.1</code>
<code>mx.</code><code>test</code><code>.com mail is handled by 3 192.168.1.100.</code><code>test</code><code>.com.</code>
添加PTR記錄
在很多場景中需要用到PTR反向解析,這裡在原來的基礎上添加PTR記錄:
編輯master 上的view配置檔案,加入PTR的zone:
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<code>[root@DNS-Server etc]</code><code># cat view.conf </code>
<code>view </code><code>"View-test"</code> <code>{</code>
<code> </code><code>zone </code><code>"test.com"</code> <code>{</code>
<code> </code><code>type</code> <code>master;</code>
<code> </code><code>file</code> <code>"test.com.zone"</code><code>;</code>
<code> </code><code>allow-transfer {</code>
<code> </code><code>192.168.1.11;</code>
<code>};</code>
<code> </code><code>notify </code><code>yes</code><code>;</code>
<code> </code><code>also-notify {</code>
<code>zone </code><code>"168.192.in-addr.arpa"</code> <code>{ </code><code># 這裡是添加的反向解析域名,表示解析192.168段的主機</code>
<code> </code><code>type</code> <code>master;</code>
<code> </code><code>file</code> <code>"168.192.zone"</code><code>; </code><code># zone 檔案名</code>
<code> </code><code>allow-transfer {</code>
<code> </code><code>192.168.1.11;</code>
<code> </code><code>};</code>
<code> </code><code>notify </code><code>yes</code><code>;</code>
<code> </code><code>also-notify {</code>
<code> </code><code>};</code>
在添加了PTR的域之後,需要在指定的168.192.zone 檔案中指定解析的内容:
<code>[root@DNS-Server etc]</code><code># cat 168.192.zone </code>
<code>$TTL 3600 ; 1 hour</code>
<code>@ 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</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>100.1 IN PTR a.</code><code>test</code><code>.com. </code><code># 添加的反向解析記錄,對應的IP為 192.168.1.100</code>
修改master上PTR zone檔案的屬性:
<code>chown</code> <code>named.named 168.192.zone </code>
<code>rndc reload</code>
此時slave上的節點是不會同步master上的PTR zone檔案的,需要先設定zone配置檔案。
修改slave節點/var/named/chroot/etc/view.confg的配置,增加PTR的zone配置:
<code> </code><code>zone </code><code>"168.192.in-addr.arpa"</code> <code>{</code>
<code> </code><code>type</code> <code>slave;</code>
<code> </code><code>masters {192.168.1.10;};</code>
<code> </code><code>Masterfile-Format Text;</code>
<code> </code><code>file</code> <code>"slave.168.192.zone"</code><code>;</code>
執行rndc reload,同步PTR zone檔案,此時,在slave上就可以看到slave同步的檔案了。
<code>[root@DNS-Slave ~]</code><code># cat /var/named/chroot/etc/slave.168.192.zone </code>
<code>$ORIGIN .</code>
<code>$TTL 3600; 1 hour</code>
<code>168.192.</code><code>in</code><code>-addr.arpa IN SOA </code><code>op</code><code>.</code><code>test</code><code>.com. dns.</code><code>test</code><code>.com. (</code>
<code>2001 ; serial</code>
<code>900 ; refresh (15 minutes)</code>
<code>600 ; retry (10 minutes)</code>
<code>86400 ; expire (1 day)</code>
<code>3600 ; minimum (1 hour)</code>
<code>)</code>
<code> </code><code>NS </code><code>op</code><code>.</code><code>test</code><code>.com.</code>
<code>$ORIGIN 168.192.</code><code>in</code><code>-addr.arpa.</code>
<code>100.1 PTR a.</code><code>test</code><code>.com.</code>
測試解析結果:
<code>[root@DNS-Slave ~]</code><code># host 192.168.1.100 127.0.0.1</code>
<code>100.1.168.192.</code><code>in</code><code>-addr.arpa domain name pointer a.</code><code>test</code><code>.com. </code><code>#傳回的結果正确</code>
使用DNS實作服務的負載均衡
對于一個域名多個IP 的情況,DNS會對多個IP進行輪詢,這樣就實作了負載均衡功能。DNS隻會按照自身的配置資訊進行輪詢,不會探測後端的服務節點是否可用。
直接在master上的ZONE配置檔案上添加一條A 記錄,serial 值+1 即可。
<code>t A 192.168.1.111</code>
<code>[root@DNS-Server etc]</code><code># host t.test.com 127.0.0.1</code>
<code>t.</code><code>test</code><code>.com has address 192.168.1.111 </code><code># 反回了兩行資訊</code>
<code>t.</code><code>test</code><code>.com has address 1.2.3.4</code>
配置DNS視圖(智能DNS)
智能DNS是指通過判斷使用者的來源,傳回給使用者一個最佳的服務站點。簡單來說就是讓聯通和電信的不同使用者在通路相同的站點時,分别将請求解析到與使用者網絡相同的伺服器上來提升使用者的體驗。隻能DNS還可以探測後端節點的運作狀态,如果發現後端有節點故障,會将請求發送到能提供正常服務的主機上。
配置智能DNS,修改master上的/etc/named.conf 檔案:
<code>vim </code><code>/etc/named</code><code>.conf</code>
<code>acl group1 { </code><code># 在原來的基礎上增加兩個group的配置,加在include之前</code>
<code> </code><code>192.168.1.10; </code><code># 在兩個group中分别指定兩個不同的DNS伺服器.</code>
<code>acl group2 {</code>
<code> </code><code>192.168.1.11;</code>
<code>include </code><code>"/var/named/chroot/etc/view.conf"</code><code>;</code>
編輯master節點上的view.conf 檔案,添加group,将之前的view.conf 檔案清空:
<code>[root@DNS-Server etc]</code><code># cat view.conf</code>
<code>view </code><code>"GROUP1"</code> <code>{</code>
<code> </code><code>match-clients { group1;};</code>
<code> </code><code>zone </code><code>"viewtest.com"</code> <code>{</code>
<code> </code><code>type</code> <code>master;</code>
<code> </code><code>file</code> <code>"group1.viewtest.com.zone"</code><code>;</code>
<code>view </code><code>"GROUP2"</code> <code>{</code>
<code> </code><code>match-clients { group2;};</code>
<code> </code><code>zone </code><code>"viewtest.com"</code> <code>{</code>
<code> </code><code>type</code> <code>master;</code>
<code> </code><code>file</code> <code>"group2.viewtest.com.zone"</code><code>;</code>
分别建立兩個指定的zone檔案:
<code>[root@DNS-Server ~]</code><code># cat /var/named/chroot/etc/group1.viewtest.com.zone </code>
<code>$TTL 3600 ; 1 hour</code>
<code>viewtest.com IN SOA </code><code>op</code><code>.viewtest.com dns.viewtest.com. (</code>
<code> </code><code>2007 ; serial</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 OP.viewtest.com.</code>
<code>$ORIGIN viewtest.com.</code>
<code>view A 1.2.3.4</code>
<code>[root@DNS-Server ~]</code><code># cat /var/named/chroot/etc/group2.viewtest.com.zone </code>
<code>view A 1.2.100.100</code>
<code>op</code> <code>A 1.2.100.100</code>
兩個檔案的指定解析的IP不同。
更改兩個檔案的權限,并重新開機named:
<code> </code><code>chown</code> <code>named.named group*</code>
<code> </code><code>systemctl restart named</code>
測試結果,以192.168.1.10作為用戶端,對DNS發起解析請求:
<code>[root@DNS-Server ~]</code><code># host view.viewtest.com 192.168.1.10</code>
<code>Name: 192.168.1.10</code>
<code>Address: 192.168.1.10</code><code>#53</code>
<code>view.viewtest.com has address 1.2.3.4</code>
以192.168.1.11作為用戶端,對DNS發起解析請求:
<code>[root@DNS-Slave ~]</code><code># host view.viewtest.com 192.168.1.10</code>
<code>view.viewtest.com has address 1.2.100.100</code>
不同的用戶端解析的結果不一樣,這樣就達到了我們的要求。
智能DNS解析的過程:
1、在named.conf 檔案中定義了兩個group,group1 包含了192.168.1.10的用戶端,group2 包含了192.168.1.11的用戶端。這兩個group 就對來源IP進行了區分,不同group的來源IP使用不同的zone檔案進行解析。
2、當在192.168.1.10 (11)上請求解析view.viewtest.com 時,發現此IP屬于group1(group2),于是去檢視 /var/named/chroot/etc/view.conf這個檔案。
3、在view.conf檔案中,分别指定了解析group1和group2中需要解析的zone檔案,于是,系統會根據來源IP自動選擇其對應的zone檔案。
4、在group1和group2的zone檔案中,分别指定了view.viewtest.com對應的解析記錄,分别為1.2.3.4 和1.2.100.100。 系統讀取各自對應的zone檔案,傳回用戶端不同的解析結果。
小提示:
此處清空了view.conf檔案的同步配置,可以按照原來的方式,将同步參數加入。針對每個定義的域進行同步設定。
本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1880669