APP下载

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

2022-12-26宋国柱郝王丽

太原科技大学学报 2022年6期
关键词:配置文件域名IP地址

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

(山西农业大学 软件学院,山西 太谷 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服务的性能和效率。

1 系统架构及其工作流程

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 系统特点

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故障。

3 系统实现

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

4 实验及性能分析

以山西农业大学校园网为例,对本系统的高效性和稳定性进行了验证。验证采用主域名服务器在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的系统平均负载差别不大。

5 结束语

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

猜你喜欢

配置文件域名IP地址
基于Docker的实时数据处理系统配置文件管理软件的设计与实现
从Windows 10中删除所有网络配置文件
用软件处理Windows沙盒配置文件
《江苏教育研究》官方网站域名变更公告
互不干涉混用Chromium Edge
公安网络中IP地址智能管理的研究与思考
《IP地址及其管理》教学设计
计算机的网络身份IP地址
顶级域名争夺战:ICANN放出1930个通用顶级域名,申请者有上千家