随着时间的推移,DNS系统早已超出了最初设定的“地址本”功能,随着互联网络的普及,也出现了越来越多的恶意入侵、DDoS攻击等。一个现代的DNS系统从设计之初就应该考虑到这些问题,以及给最终的用户提供一个快速、易用的界面。DNSPod的DNS系统经过几代的发展,现在已经可以很好地满足了上述要求。
DNS系统的使用入口是站长添加删除记录等,这部分的要求是简单易用,快速生效,所以需要一个强大的队列系统迅速分发数据并保持各个服务器的同步。系统出口则是提供查询服务的53端口。一方面要很好地满足各个不同递归服务器的兼容要求,另一方面,也要防止抵御各式各样的入侵及攻击。中间的核心模块则是提供基本的解析功能,需要尽可能地兼容各种RFC协议同时最大化地提升性能。
DNSPod的 web 前端使用MySQL数据库存储用户记录,但后端的队列系统并没有使用其主从同步的功能,而是自行从MySQL数据库中读取数据进行分发。这样可以做到10秒内在各个服务器之间生效,一般情况下用户在网站在添加完记录,关闭网页再去服务器请求时,数据已经完成更新。
DNS服务器之前有黑洞集群防护设备,主要用于检测一些常见的攻击形式,同时也可以接受后端的实时命令,及时封禁域名,修改策略。实现部分智能的攻击防护。而在DNS服务器上,则在内核态运行着攻击检测及相应的保护程序。保护程序实时统计检测本机数据流量,确保不会超过机器最高负荷。攻击检测程序探测数据包特征,实时分析,发现有特征收敛时立即通知前方的黑洞设备,即可在最前方抵御攻击,减少正常服务的压力。
最终提供服务的标准DNS服务器则可以使用高效的网络编程模式,内存数据库等提升性能,同时及时实现最新的RFC协议,确保跟各大递归服务器之间的无缝连接。
由此可以看到,DNS系统的构架早已经不是最初的运行特定的服务器软件这么简单,而是成为一个链条,一个大的系统,需要各方面密切配合才能做好。
【作者简介】
张普 就职于DNSPod,Inc.,高级系统开发工程师。现从事公司DNS系统开发工作,主要研究方向为Linux内核,网络,数据库开发。