我有 2 個 DNS 伺服器 (BIND9)(主要、輔助)和 1 個網域。我有一個帶有動態IP的網路伺服器。因此,如果我的 IP 發生變化,我將無法透過網域存取我的站點,因為在 DNS 伺服器中,網域區域 IP 座發生了變化。
我的問題是:如何每次 x 次使用我的公用 IP 位址從我的伺服器更新我的區域?有人能給我一個 Linux (Debian 9) 上的更新腳本嗎?
謝謝
答案1
nsupdate
您可以透過編寫工具腳本或使用相容的第三方用戶端來使用 RFC 2136“DNS UPDATE” :
共享金鑰 (TSIG)
產生用於驗證更新的金鑰:
$ tsig-keygen -r /dev/urandom | tee tsig-key.private key "tsig-key" { algorithm hmac-sha256; secret "7P6HbRZRJCmtauo/lV0jwN9wkMgBTUikhf9JuaTvYT4="; };
伺服器和客戶端都知道該金鑰,其他人都不知道。
將列印的文字複製到您的
named.conf
. (您可以為不同的主機擁有多個金鑰,每個金鑰在欄位中都有唯一的名稱key "…"
。)在區域配置中啟用動態更新:
zone … { … update-policy { /* grant <key_name> <policy> <record_types> */ grant "tsig-key" name myserver.example.com ANY; }; };
可以使用各種不同的策略;例如
zonesub
允許更新全部的區,並且subdomain dyn.example.com
具有明顯的意義。執行更新:
$ nsupdate -k tsig-key.private > zone example.com > del myserver.example.com > add myserver.example.com 3600 A 100.64.1.1 > send
有多種客戶端能夠自動更新。
公鑰/私鑰 (SIG(0))
產生密鑰對:
$ dnssec-keygen -r /dev/urandom -T KEY -n USER myclient.example.com $ ls K* Kmyclient.example.com.+005+07399.key Kmyclient.example.com.+005+07399.private
該
*.key
檔案包含公鑰 - 將其新增至您的 DNS 區域。該
*.private
文件包含私鑰 - 將其複製到客戶端電腦。 (實際上,複製兩個都文件到客戶端計算機。設定
update-policy { }
方式與 TSIG 完全相同。使用 也以相同的方式執行更新
nsupdate -k <filename>.private
。
(注意:雖然 TSIG 金鑰名稱是任意的,但 SIG(0) 金鑰儲存在 DNS 中,因此始終以主機名稱/子網域的形式命名。金鑰名稱才不是不過,需要符合您正在更新的主機名稱。
Kerberos (GSS-TSIG)
有點超出範圍,但 BIND9 也支援這一點(主要用於 Active Directory)。