[CentOS 7] 人多好辦事,加入多台 DNS Server 一起幫幫忙

by 2/18/2016 0 意見

在進行網路設定的時候,除了要輸入 IP 位址、子網路遮罩、通訊閘之外,至少還要輸入二個 DNS 伺服器,這是為了避免第一台 DNS 伺服器故障的話,還有第二台可以接手負責解析。

而我們已經架好了第一台,理所當然要再建置第二台,不過,可不是照同樣的步驟進行就可以了。

想像一下,當我們有五台 DNS Server 一起負責管理 30 筆記錄。
某一天,三位系統管理員在各自管轄的 DNS Server 上修改了 3、5、10 筆記錄,請問是要以誰修改的記錄為準?最後送出修改的?網路速度最快的?還是修改數量最多的?

如果真的是這樣,全世界的 DNS 記錄早就大亂了,所以實際上的運作模式是:
  1. 最早建立的 DNS Server 會先宣告成為 Master,只有它有權力進行新增、修改、刪除的動作。
  2. 後續建立的 DNS Server 則是要宣告成 Slave,它只能把主要伺服器的記錄複寫回來,並分擔 Client 端的 DNS 記錄查詢,其他什麼事都不能做。

事前準備


請參照 CentOS 7.0 不完全安裝手冊 系列文章,完成作業系統的安裝。

我們會以下面的網路環境來實作:

  • 網域:itist.local.
  • 網段:192.168.88.0 / 24
  • 主 DNS 伺服器:192.168.88.155
  • 次 DNS 伺服器:192.168.88.154 
  • Mac 用戶端:192.168.88.62

主要伺服器請依照 [CentOS 7] 網際網路裡的 104 查號台 - DNS Server,完成所有實作的步驟。
至於,次要伺服器只要先搞定作業系統的安裝,再依照接下來的步驟進行實作。


主要伺服器設定


打開主設定檔。
sudo vi /etc/named.conf

指定此區域允許次要伺服器複寫 DNS 記錄,並在主要伺服器更新記錄後,自動通知次要伺服器來複寫。
allow-transfer { 192.168.88.154; };
notify yes;
如果沒有設定 notify 參數的話,次要伺服器會依照 SOA 記錄設定的 refresh 時間來複寫。

打開正解區域設定檔。
sudo vi /var/named/zone-itist.local

只要新增、刪除、修改過任何一筆記錄,別忘了要更新日期序號,這樣子次要伺服器才知道此區域的記錄有更新過。
itist.local.      IN SOA    ns1.itist.local. webmaster.itist.local. ( 2016021801 14400 900 604800 86400 )

並且加入次要伺服器的 NS 記錄和 A 記錄。
itist.local.      IN NS     ns2.itist.local.
ns2.itist.local.  IN A      192.168.88.154

如果我們需要更多台伺服器的話,輸入它們的 NS 及 A 記錄,也別忘了在 allow-transfer 參數加上其他伺服器的 IP。

反解區域同樣比照辦理,打開反解區域設定檔。
sudo vi /var/named/zone-192.168.88.0

加入 Slave DNS Server 的 NS 記錄和 PTR 記錄。
88.168.192.in-addr.arpa.      IN NS   ns2.itist.local.
154.88.168.192.in-addr.arpa.  IN PTR  ns2.itist.local.

完成後,重新載入設定值。
sudo systemctl reload named


次要伺服器設定


安裝 Bind。
sudo yum -y install bind

打開主設定檔。
sudo vi /etc/named.conf

修改這幾個參數:
  • listen-on port 53 - 提供 DNS 服務的 IP。
  • allow-quqry - 允許進行查詢的 Client 端 IP 或網段。
  • allow-recursion - 允許遞迴查詢的 Client 端 IP 或網段。
listen-on port 53 { 127.0.0.1; 192.168.88.154; };
allow-query       { localhost; 192.168.88.0/24; };
allow-recursion   { 127.0.0.1; 192.168.88.0/24; };


重點來了,次要伺服器在正反解區域的宣告就是關鍵。
  • type 宣告成 slave。
  • file 的路徑一定要指到「 slave」目錄裡面,檔名可以跟主要伺服器不同,利於辨識即可。
  • masters 指定主伺服器的 IP。
zone "itist.local" IN {
    type    slave;
    file    "slaves/zone-itist.local";

    masters { 192.168.88.155; };
};

zone "88.168.192.in-addr.arpa" IN {
    type    slave;
    file    "slaves/zone-192.168.88.0";

    masters { 192.168.88.155; };
};

檢查一下主設定檔有沒有錯誤。
sudo named-checkconf /etc/named.conf

開啟防火牆的 DNS 通訊埠。
sudo firewall-cmd --permanent --zone=public --add-port=53/tcp
sudo firewall-cmd --permanent --zone=public --add-port=53/udp
sudo firewall-cmd --reload


調整 SELinux 權限。
sudo restorecon /etc/named.conf
sudo restorecon -r /var/named


重新啟動服務,並讓它在開機後自動啟動。
sudo systemctl restart named
sudo systemctl enable named

不需要建立正解及反解區域設定檔,因為會從主伺服器複寫過來,儲存在 /var/named/slaves 目錄裡。


實際測試

比照 [CentOS 7] 網際網路裡的 104 查號台 - DNS Server 的測試方式,只是把 DNS Server 的 IP 從主伺服器改成次要伺服器的 IP。

這邊以 Mac 上的操作為例,DNS Server 改成 192.168.88.154。

同樣的去查詢我們所建立的記錄,只要有正確的回傳就大功告成了。



參考資料


圖片來源

  • https://pixabay.com
  • https://openclipart.org

更新紀錄

  • 2016/02/06 撰文 。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

0 意見 :

張貼留言