基于MySQL的高可靠性缓存DNS系统的设计与实现
2014-06-13宋国柱车秀梅
宋国柱,杨 华,车秀梅
(山西农业大学 网络中心,山西 太谷 030801)
域名系统(Domain Name System,DNS)是一个可以将域名和IP地址相互映射的分布式数据库[1]。BIND 作为目前最流行的DNS服务软件,其日志记录了详细的DNS 查询请求信息,其格式如下:
25-Nov-2011 09:30:06.057 queries:client 211.82.12.167#59227:view sxau:query:it.sohu.com IN A +SE (211.82.8.5)
其中,“25-Nov-2011 09:30:06.057”为查询请求到达的时间;“211.82.12.167#59227”为客户机的IP地址和端口号;“it.sohu.com”为查询的域名;“IN”为资源类别(class);“A”为资源类型(type);“+”为设置了期望递归(Recursion Desired);“SE”为是否使用EDNS(E)或请求是否签名(S);“(211.82.8.5)”为本地权威DNS服务器地址。[2]
本地权威DNS服务器生成的DNS查询日志数据需及时上传到中心节点,以山西农业大学校园网为例,DNS服务器每天产生1.5 GB左右的日志,因此,DNS的解析及日志数据的上传会占用一定的出口带宽资源。针对这一问题,本文提出了基于MySQL数据库的高可靠性缓存DNS系统,不仅可以有效地节约出口带宽资源,而且还大大改善了DNS服务的响应时间,从而提高了网络服务质量。
1 系统结构及工作流程
缓存DNS是将它收到的DNS信息进行存储,并再将它提供给用户进行DNS解析,直至这些信息过期。[3]
缓存DNS系统由检查模块、缓存模块和转发模块组成。如图1所示。
检查模块主要是为了保证缓存DNS系统的安全,如不合法的报文,同一IP地址查询请求数异常多[4],不存在的域名进行重复请求等,这些数据包均会被系统丢弃。
缓存模块主要完成缓存DNS信息的存储与维护。DNS信息存储在MySQL数据库中,由name(域名)、ttl(生存期)、rdtype(资源类型,表示资源记录中的查询类型)、rdata(IP地址,表示该域名解析出的IP地址)、num(次数,表示该域名被解析的次数)[5]和rdate(日期,表示最近被解析的日期)字段组成。……
