在公司業務系統中, DNS是很是重要的服務,公司內各環境的公共服務及http調用可能都會依賴於DNS進行域名解析;因爲不一樣環境的多樣性,須要DNS服務可以針對不一樣環境實現智能解析,同時,DNS配置複雜、手工管理風險大,操做失誤很容易形成DNS服務癱瘓。html
基於以上需求,我對部門內DNS架構進行了重構,同時,從新開發了DNS管理平臺。python
SmartDNS
是分佈式、高可用的DNS平臺,使用Django2.x和dnspython1.x進行開發,基於Bind9.x實現,以WEB模式管理,分控制、權威、服務、緩存等四層結構,知足了在複雜環境下的分區解析、快速部署、批量導入、動態更新DNS等需求,極大的提升了運維效率。linux
SmartDNS
參考了 GitHub
的DNS架構,在《DNS Infrastructure at GitHub》這篇文章中,介紹了他們使用Unbound 做爲 緩存
,NSD 做爲 邊緣節點
,PowerDNS 做爲 權威服務
。git
因爲一直使用Bind9,因此我選擇它做爲全套DNS的基礎服務。在這裏 Bind9 可提供權威服務
、遞歸服務
、緩存服務
,而web管理則採用自開發形式。github
SmartDNS
系統中分爲四類主機:控制中心(Control)
、權威節點(Authority)
、服務節點(Edge)
、緩存節點(Cache)
。web
動態更新(nsupdate)
服務,實時更新 權威節點(Authority)
的記錄信息。服務節點(Edge)
提供 區域傳輸(zone transfer)
服務,並提供用於 建立
、修改
或 刪除記錄
等 動態更新(nsupdate)
服務;同時可部署在不一樣 區域(Region)
的 數據中心(DC)
。客戶端(Client)
和 緩存節點(Cache)
對DNS區域zone的請求,提供 權威解析
的同時,還提供遞歸解析
和 緩存
服務。服務層
的響應。WEB
部分部分參考了 hahp的Blog 和 aliyun
的 雲解析DNS服務。django
因爲公司的運維工做很瑣碎,平時又沒有時間,因此DNS總體架構設計和系統開發斷斷續續作了2個來月,並且界面看起來也比較難看,沒辦法,作Python的基本都是全棧開發;另外我對圖中比較敏感的信息作了處理,請諒解;目前項目還處於初期階段,後續有精力再接着完善。緩存
集羣(Cluster)
安全
服務節點(Server)
服務器
視圖(View)
域(Zone)
記錄(Record)
審計(Audit)
最後,但願這篇文章能給看過朋友們一些幫助,謝謝。
https://linux.cn/article-8852...
https://www.cnblogs.com/hahp/...
http://bind-dlz.sourceforge.n...