設定 Master/Slave DNS Server

我寫了一個 DNS 托管服務:TopDN.net

在寫完主要的程式之後,就是要開始規劃一些資料同步的事情: TopDN.net 目前提供兩台機器當 Name Server ,分別是 ns1.topdn.net 以及 ns2.topdn.net ,在開發初期我想了三個同步的方法:

1. 利用 Message Queue 把設定 deploy 到不同的 DNS 機器上 (缺點: Master/Slave 要 deploy 不同設定)
2. 利用 rsync 同步 zone file 和 named.conf.* (缺點:如果要走 DNS Master/Slave 架構,此法不可行)
3. 每台機器都透過 Web Service 抓設定回來 (缺點: Master/Slave 要 deploy 不同設定)

最後決定我的 Master Server 透過 Web Service 抓有更新的 zone & records 回來,然後自動生成對應的設定檔。 Slave Server 也是透過 Web Service 抓取 zone 回來並且生成對應的設定檔,但 records 的部份則是透過 Bind9 原有的 Master/Slave 機制來同步。(備註)

由於對這一個領域的設定比較不熟,所以昨晚花了點時間讀了一下文件,發現其實很簡單。

在 Master 的 config 裡面設定

在各別的 zone file 裡面新增

這樣設定的好處是 Slave Server 不用等到 zone file 裡面 SOA 指定的 Refresh 時間到,只要收到 Notify 就會更新。

另外在 Slave Server 的 config 裡面加上

然後在各別的 zone file 裡面把 type 改成 slave 然後加上 masters 設定,看起來會像這樣:

很容易地,這樣就完成了,在更新時,只要控制 Master DNS 上面每個 zone 的 SOA 裡面的 serial ,有更新就會自動 Notify 到 Slave DNS 上面並且完成同步。

備註:可以用一些小技巧來判斷是否有真的有需要重起,以降低 Bind9 的重起次數(雖然重起也沒什麼…)

Posted in 碎碎念

Leave a Reply

Your email address will not be published.