在公司业务系统中, 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...