当前位置:舍宁秘书网 > 专题范文 > 教案设计 > 基于NamedManager的高性能缓存DNS系统的设计与实现

基于NamedManager的高性能缓存DNS系统的设计与实现

时间:2024-04-03 15:00:04 来源:网友投稿

宋国柱,郝王丽,景 超,王 堃,胡 杰

(山西农业大学 软件学院,山西 太谷 030801)

域名系统(Domain Name System,简称DNS)是将域名和IP地址相互映射的分布式数据库系统[1]。DNS作为互联网的重要基础设施,其主要功能是提供域名解析服务。随着互联网的快速发展,DNS 虽然也被赋予了一些新的应用功能,如 DKMI(domain keys identified mail)标准[2]、负载均衡[3]和域名封锁[4]等,但互联网的绝大多数应用都必须依赖于DNS才能正常运行[5],DNS的稳定性及其性能对互联网有重要影响[6]。

通用DNS系统在高峰期DNS解析并发数较大时,会造成DNS服务器压力巨大,DNS解析超时或者拒绝服务,最终导致DNS服务无法解析域名。针对这一问题,本文提出了基于NamedManager的高性能缓存DNS系统,该系统极大地提升了DNS系统的吞吐量并有效地降低了DNS响应延时,从而大大地改善了DNS服务的性能和效率。

Bind是目前最流行的DNS 服务软件之一。NamedManager使用Bind作为底层DNS服务,支持IPv4和IPv6,并提供一个基于Amberphplib框架结构的DNS可视化web管理,可用来添加、删除、修改DNS的zones/records数据等操作,提升管理员维护管理DNS记录的便捷性与快捷性。

基于NamedManager的高性能缓存DNS系统由鉴别模块、动态缓存及转发模块、本地权威DNS集群和管理模块四部分组成,如图1所示。

鉴别模块主要是对DNS请求报文进行鉴别,以保证DNS系统的安全,如不合法DNS请求报文,域名注入,恶意域名[7],同一IP地址查询请求数异常多[8],不存在的域名进行重复请求[9]等,这些请求报文均会被该模块丢弃。

动态缓存及转发模块由Bind组成,主要是完成DNS相关信息的存储、维护和转发。为保证DNS缓存信息的准确性和完整性,设置动态缓存表项中的TTL值为2 s,当TTL值降到0时,删除该缓存表项[10]。未被缓存命中的DNS请求报文,由Bind随机转发给本地权威DNS集群中的任一DNS服务器,经递归或迭代查询后将DNS解析记录返回给客户机,同时将DNS记录插入动态缓存表。

本地权威DNS集群由主DNS和辅助DNS组成,以完成DNS请求报文非缓存记录的域名解析。

管理模块是本系统的核心组成部分,由NamedManager和Mysql数据库组成。Mysql数据库中存储有本地域名记录(包括AAAA记录)、DNS解析的日志信息和主DNS辅助DNS的相关信息等。NamedManager除提供DNS的可视化web管理界面外,主要是对本地权威DNS集群的统一管理,当Mysql数据库中的本地DNS记录发生变化(如添加、删除、修改DNS记录)时,NamedManager会实时地将数据库中的记录全部同步到bind的TXT配置文件中,发生变化的DNS记录无需手动重新启动Bind而实时生效,同时,在NamedManager管理界面中显示DNS集群中DNS服务器的同步状态。

基于NamedManager的高性能缓存DNS系统收到客户机的DNS请求后,鉴别DNS请求报文,若DNS请求报文不合法,如恶意域名、异常IP地址等,系统将该报文丢弃;
若DNS请求报文合法,会遍历查找本地动态缓存表中有无对应的域名解析记录,若有,则直接使用动态缓存表中的DNS记录应答客户机[11],若无,则由Bind将该DNS请求报文随机转发给本地权威DNS集群中的任一服务器,DNS权威服务器经递归或迭代查询后向客户机返回响应报文,同时缓存该DNS记录。其工作流程如图1所示。

图1 系统架构及其工作流程

2.1 提高了系统的安全性

通用DNS系统在安全性方面未对客户机的DNS请求报文做任何的鉴别,因此存在不合法DNS请求报文,如域名注入,恶意域名,同一IP地址查询请求数异常多,不存在的域名进行重复请求等安全方面的问题,而本系统在设计架构时就考虑到对DNS请求报文进行合法性鉴别,因此在一定程度上提高了DNS系统的安全性。

2.2 数据的完整性与一致性

本系统架构在设计时采用Mysql数据库的主从同步,DNS记录存储于Mysql数据库。本地权威DNS集群中的Mysql采用从模式,当主Mysql数据库中的数据发生变化时,从Mysql会自动与主Mysql进行同步,从而保证整个域DNS记录的完整性与一致性。

2.3 DNS记录生效时间设置的灵活性

DNS记录发生变化(如添加、删除、修改)后,NamedManager可以灵活设置DNS记录的生效时间,可以以秒、分钟、小时、天、周、月为时间单位。当以1秒为单位时,即表示及时生效,并且在生效过程中无需手工干预,也不中断DNS服务。

2.4 可视化web管理的便捷性

NamedManager提供本地权威DNS集群的可视化web管理,不仅可以添加、删除、修改DNS的zones/records数据,而且方便DNS管理员对DNS记录的管理维护;
不仅可以实时同步到集群中Bind的TXT配置文件,而且可以实时显示集群中各DNS服务的状态,如DNS记录是否同步和DNS日志是否同步等情况。当集群中的DNS服务器发生故障时,NamedManager还可以以邮件或短信的方式告知管理员以及时排除DNS故障。

NamedManager版本为1.9.0,缓存DNS和本地权威DNS集群采用bind9.16.7,Mysql数据库版本为5.6.16,编程语言采用c.

3.1 DNS请求报文鉴别

DNS请求报文鉴别主要是对异常域名进行判断,如域名太长或太短、恶意域名等。DNS请求报文鉴别算法[12](如下/*行为注释内容):

/*使用正则表达式实现域名合法性鉴别*/

int regcomp(regex_t *preg,const char *regex,int cflags);

void regfree(regex_t *preg);

int regexec(const regex_t *preg,const char *string,size_t nmatch,regmatch_t pmatch,int eflags);

typedef struct {

regoff_t rm_so;

regoff_t rm_eo;

} regmatch_t;

regcomp(^([0-9a-zA-Z][0-9a-zA-Z-]{0,62}.)+([0-9a-zA-Z][0-9a-zA-Z-]{0,62}).?$,pattern,cflags);

3.2 动态缓存及DNS请求报文转发

动态缓存表数据结构[13]代码如下:

/*动态缓存表项节点*/

typedef struct DNSDynamicCacheEntry

{

UCHAR * pszDomainName; /*域名*/

USHORT usQueryType; /*查询类型*/

UCHAR szRcv[2]; /*保留位*/

in4_addr * pstIPv4AddrList; /*IPv4地址链*/

in6_addr * pstIPv6AddrList; /*IPv6地址链*/

ULONG ulTTL; /*生存周期,定时递减*/

UCHAR * pszBuf; /*应答报文内容*/

} DNS_Cache_Entry_S;

DNS_DynamicCache_Entry_S*g_pstDNSDynamicCacheEntry; /*动态缓存表*/

其中,pstIPv6AddrList为域名对应的IPv6地址链(一个域名可能对应多个IPv6地址(IPv4类似))。

未被DNS缓存命中的DNS请求报文由Bind进行转发,其配置文件named.conf内容示例如下(#行为注释内容):

options {

#设置DNS请求报文转发功能

forwardonly;

#设置转发的本地权威DNS集群中的服务器IP地址列表,为确保DNS系统安全,使用X屏蔽真实IP地址

forwarders { 211.82.X.X;211.82.X.X; };

};

由于Bind只开启DNS请求报文的转发功能,因此,配置文件named.conf中无需对区进行配置。

3.3 NamedManager配置

NamedManager核心配置内容主要是对Bind Integration Modules的配置,该配置主要是使NamedManager可以调用Bind底层,以实现高性能DNS服务及DNS的可视化web管理。配置文件config-settings.php的内容示例如下(//为注释内容):

$config["api_url"]= "https://sxaudns.sxau.edu.cn/NamedManager"; //NamedManager安装位置

$config["api_server_name"]="sxaudns.sxau.edu.cn"; //DNS服务器名字

$config["api_auth_key"]= "eu6viDby3pxWKVL0Yjg jm9FzrRcGdiLC"; //API authentication key

$config["bind"]["version"]="9"; //bind版本

$config["bind"]["reload"]="/usr/local/named/sbin/rndc reload"; //重启bind服务

$config["bind"]["config"]= /usr/local/namedmanager/etc/named.namedmanager.conf"; //配置内容写入bind配置文件

$config["bind"]["zonefiledir"]="/usr/local/namedmanager/zone/"; //DNS区文件夹位置

$config["bind"]["verify_zone"]="/usr/local/named/sbin/named-checkzone"; //区文件内容校验

$config["bind"]["verify_config"]="/usr/local/named/sbin/named-checkconf"; //校验NamedManager配置

3.4 DNS生效时间配置

当域中的DNS记录发生变化时,如添加、删除、修改操作,DNS记录在何时生效。修改namedmanager-bind.cron文件且示例参考内容如下(该内容表示,当DNS记录发生变化后,DNS记录在5 s后生效),并将该文件拷贝到/etc/cron.d目录。

*/5 * * * * root cd ; /bin/php -q /usr/local/namedmanager/bind/namedmanager_bind_configwriter.php

以山西农业大学校园网为例,对本系统的高效性和稳定性进行了验证。验证采用主域名服务器在2020年9月10日-9月16日一周内的DNS请求记录作为实验数据,共685 911条记录(其中PTR记录81 315条,A/AAAA记录604 596条),且无重复记录,分别对基于NamedManager的缓存DNS系统和通用DNS系统进行压力测试。

4.1 测试环境

基于NamedManager的高性能缓存DNS系统和通用DNS系统所使用服务器的硬件、软件、网络环境及测试工具均为:双Xeon CPU 2.4GHz(四核),内存4GB;
操作系统为Centos X64 7.8,内核版本为3.10.0-1127.13.1.el7;
Bind版本为9.16.7;
教育网IPv4和IPv6出口带宽各500 Mbps,ChinaNet出口带宽为4 Gbps;
压力测试工具使用Bind9.16.7自带的queryperf,其版本为1.17.

4.2 测试数据

系统在山西农业大学校园网环境已稳定运行2个多月时间。在工作日任一天最繁忙的10:00,15:00,17:00,18:30,20:30五个时间段分别对基于NamedManager的高性能缓存DNS系统和通用DNS系统进行压力测试,测试数据结果如表1所示。

4.3 性能分析

从表1中的数据可以看出,基于NamedManager的高性能缓存DNS系统,DNS的响应时间从RTT耗时的max、min、average和std deviation及完成全部DNS记录请求查询的Percentage completed、Queries per second等方面分析,较通用DNS系统在性能上都有一定的提升。性能提升如表2所示。

表1 基于NamedManager的高性能缓存DNS系统和通用DNS系统DNS请求报文查询表

表2 性能提升表

从表2可知,基于NamedManager的高性能缓存DNS系统与通用DNS系统在平均RTT max、RTT min、RTT average、Ran for上分别降低了-90.93%,-99.82%,-96.70%和-91.18%;
在查询命中率和查询请求吞吐量上分别提高了+55.17%和+79.19%;
每秒查询请求平均数由1 995.923 080增加到3 576.444 205,增加了1 580.521 121.图2和图3为DNS查询请求吞吐量及响应时间对比。

图2 查询请求吞吐量对比图

图3 响应时间对比

4.4 资源开销分析

从表1可以看出,相同运行环境下,基于Named Manager的高性能缓存DNS系统与通用DNS系统在3 min,5 min和15 min的系统平均负载差别不大。

随着互联网应用服务的不断增多及网民用户的不断增加,域名解析吞吐量和效率对网络服务质量将显得越来越重要。本文以山西农业大学校园网为例,通过使用685 911条DNS记录进行压力测试,结果表明本系统在RTT max、RTT min、RTT average、Ran for、std deviation、Percentage completed、Queries per second等方面都具有突出的性能,有效地提升了系统吞吐量并极大地降低了DNS响应延时,大大改善了DNS服务的性能和效率,从而提升网络的服务质量。

猜你喜欢配置文件域名IP地址基于Docker的实时数据处理系统配置文件管理软件的设计与实现电子技术与软件工程(2022年15期)2022-11-11从Windows 10中删除所有网络配置文件电脑爱好者(2021年11期)2021-06-07用软件处理Windows沙盒配置文件电脑爱好者(2020年9期)2020-07-05《江苏教育研究》官方网站域名变更公告江苏教育研究(2020年2期)2020-04-10互不干涉混用Chromium Edge电脑爱好者(2019年20期)2019-12-10公安网络中IP地址智能管理的研究与思考科学中国人(2017年14期)2017-01-28《IP地址及其管理》教学设计中国信息技术教育(2015年22期)2015-09-10计算机的网络身份IP地址新课程·上旬(2014年6期)2014-08-22顶级域名争夺战:ICANN放出1930个通用顶级域名,申请者有上千家互联网天地(2012年6期)2012-03-24

推荐访问:高性能 缓存 设计

猜你喜欢