2009-02-25 30 views
4

我想以編程方式自動更新我的DNS更多多個域。我在GoDaddy上運行BIND服務器(在FreeBSD上)以及主機域和DNS。我無法找到GoDaddy的Web服務API來訪問和更新他們託管的DNS,因此我可能必須使用我的BIND服務器來提供動態解決方案。你會如何自動使用DNS創建子域?

基本上我只想查詢哪些子域已經存在並添加新子域。

是BIND最佳解決方案嗎?有沒有我不必登錄到GoDaddy或手動更新我的BIND配置自動添加新域的另一種方法?

回答

3

您需要添加新子域的功能是動態更新,如RFC 2136中所述,並且受到BIND的支持。

使用DNS「UPDATE」消息添加和刪除區域文件中的記錄是相當容易的(例如使用Perl的Net :: DNS模塊)。

要實際獲取那裏的東西,你有兩種方法:

  1. 治療一些其他的數據庫作爲明確,並轉換變化在該數據庫中到DDNS更新,或。

  2. 許可證DNS「AXFR」的消息,讓您下載整個區域的內容

3

一種方法是編寫一個程序,讀取和/或更新BIND配置文件(它只是一個文本文件,具有特定的格式),並在有任何更改時重新加載BIND守護進程。所以,就好像你手動更新了你的BIND配置,除非你已經寫了一個程序來爲你做。

2

僅供參考(雖然只在您的區管理系統,而不是整個世界!):這是一個系統/網絡管理問題,而不是編程問題。你可能可以在其他地方更快地得到更好的答案。

這就是說...這很簡單:你只需要一個支持數據庫後端數據的DNS服務器。然後,您只需將條目寫入數據庫,或者查詢數據庫中的內容,DNS記錄就會自動發送出去。理想情況下,使用支持觸發器的數據庫,以便您可以讓DNS記錄的序列號在更改時自動更新。否則,您需要在代碼的每次更改中讀取/寫入序列號,以便在事務中執行整個更新。

編輯:剛剛看到上面的其他評論。不要允許AXFR。這些被認爲是安全風險。

是否將域TTL設置爲低,因此更新會盡快傳播到其他服務器。