設定 BIND 的 DDNS (Dynamic DNS) 環境

本篇文章僅限 BIND 的 DDNS (Dynamic DNS) 設定方式
不另說明 DNS 及 BIND 的架構和觀念

 

範例
Domain: example.com
master (Primary) server: dns.example.com (192.168.1.1)
slave (Secondary) server: ns1.example.com (192.168.1.2)

先用 dnssec-keygen 產生需要的 TSIG key,存放在 /var/named/keys

其中 waAzR8JieB2vcRX42R9dEg== 是我們需要的資訊

接著在 named.conf 中新增一個 zone 和 一個 key

再來是正解資料的設定, 檔案內容只需要 SOA 和 NS 紀錄

然後重新啟動 bind (named / named-chroot )
這樣就算是把環境建置完成囉

/var/name/keys/Kddns.+165+12457.key/var/name/keys/Kddns.+165+12457.private 兩個檔案複製到需要用來更新 dns 紀錄的 client 端

接下來就是使用 nsupdate 來異動相關 dns 紀錄,以下範例的 TTL 都是 86400

 

因為 named.conf 中的 allow-update 設定 127.0.0.1 這個 IP
所以若是本機操作,則連 key 都可以不用指定

這樣就可以直接開始異動 dns 紀錄
但是這個設定方式風險很高,只要能執行 nsupdate 的使用者都可以異動dns紀錄

以上 BIND 基本的 動態DNS 運作方式

 

如果 FQDN 中包含「_」下底線,則 send 指令送出後會返回 update failed: REFUSED 訊息
而 log 檔案中出現 bad owner name (check-names) 的錯誤訊息
解決方式是在 named.conf 的 options 加入以下三行設定

 

另外 allow-update 這個設定方式給的權限很大,如果要做比較細部的個別授權可以參考 BIND 9 開始支援的另一個設定方式 update-policy (與 allow-update 互斥,只能擇一使用)

注意!
使用 update-policy 可以定義多個授權,判斷到第一個符合的條件的授權後就不會再判斷其他的授權條件是否符合了

 

有興趣的,自己開發一下 Web 管理界面就可以在瀏覽器進行 DNS 設定
甚至可以對外提供 DDNS 服務囉!