域名系统(DNS)实现域名和IP地址相互映射与解析的功能,是互联网上最关键的核心基础设施之一。互联网上的应用和业务都需要DNS的正常运行,然而,DNS在协议设计、软件实现和安全机制等方面存在着许多漏洞和弱点[1]。近年来,DNS故障和安全事件不断频繁出现,对互联网正常访问产生了严重影响。例如,16年9月微软Azure云服务DNS故障、10月物联网僵尸网络(Botnet)攻击造成Dyn DNS故障等。DNS故障会造成网络和业务大规模访问异常,具有影响范围大、经济损失高、社会影响差等特点,因此,研究提高DNS服务的可靠性具有十分重要的意义。
目前,研究者对如何增强DNS的可靠性已经进行了一定的研究,提出了许多DNS系统的可靠性设计和实现方案。文献[2]基于Mysql设计并实现了一种高可靠性缓存DNS系统,从服务侧提高DNS系统的可靠性;文献[3]注意到DNS用户侧存在的配置问题,提出了CoDNS的设计和实现方案,从用户侧提高DNS系统的可靠性。本文首先对DNS服务侧和用户侧存在的可靠性问题进行分析,通过实际调研发现用户侧的DNS配置是造成DNS可靠性问题的原因之一。在此基础上,提出使用IPv6协议的地址自动配置机制,为用户终端无感知的增加DNSv6服务器的配置,这样在用户配置的DNSv4服务器出现可靠性问题时,仍然可以使用新增加的DNSv6服务器进行解析,有效提高DNS服务的可靠性。本文提出的方法能够充分发挥IPv4/IPv6双栈校园网的优势,相比现有的DNS服务可靠性增强方法简单灵活,在可行性和部署成本上具有一定的优势。
DNS是一个典型的分布式系统,系统结构如图1所示,主要包含用户侧的解析器、服务侧的递归DNS服务器、DNS服务云(包含根、顶级和权威DNS服务器)等。可以看出,DNS服务的可靠性同时依赖于服务侧和用户侧的正确配置。本文分别从服务侧和用户侧来分析DNS服务可能存在的可靠性问题及其原因。
DNS作为一种IT服务,面临着一般IT服务的可靠性问题,其可靠性首先依赖于系统可靠性,包括服务器硬件、操作系统和网络等因素。同时,DNS也受到自身在协议设计、软件实现和运行操作等方面可靠性的影响。在目前多出口、复杂业务的校园网环境中,DNS承担的任务越来越多,配置也日趋复杂,容易受到错误配置的影响[4]。而且,针对DNS的网络攻击事件也越来越频繁,DDoS、劫持等攻击事件不断出现,这也会严重影响DNS的可靠运行[5]。表1对服务侧影响DNS可靠性的具体因素进行了分类总结。
用户侧的DNS配置有动态配置(DHCP)和手动配置两种方法,可以设置两个或以上DNS服务器来增强DNS服务的可靠性。然而,实际调查发现,在手动设置IPv4地址时,即使系统可以同时设置两个DNS服务器,许多用户出于简单考虑却仅设置一个DNS服务器。在动态配置时,DHCP服务器的配置文件中也存在仅设置一个DNS服务器的现象。由于DNS服务侧的不可靠性,当用户侧仅设置一个DNS服务器时,用户的DNS服务出现可靠性问题的概率大为增加。而且,即使用户配置了两个DNS服务器,由于DNS服务侧存在冗余缩减的配置错误问题[4],DNS服务的可靠性仍不是很高。
对用户侧DNS配置的调研还发现,部分用户配置了公共DNS服务器(如谷歌DNS服务器等)。通过对30分钟内校园网出口流量进行分析,发现约有220个不同的IP地址对谷歌DNS服务器发起过DNS解析请求。校园网用户配置公共DNS服务器,既会对DNS的解析性能产生影响,也会影响依赖DNS服务的流量调度策略(如多出口、CDN等)[6]。
针对用户侧DNS配置存在的可靠性问题,需要在不手动修改用户侧配置的情况下,为用户配置额外的DNS服务器,来提高DNS服务的可靠性。本文基于IPv6协议的自动配置特性,提出在用户侧自动增加DNSv6服务器的配置,实现DNS服务的冗余配置。这样,在用户配置的DNS服务器出现问题时,能够使用自动增加的DNSv6服务器进行域名解析,确保网络的正常访问。
在一般IPv4/IPv6双栈环境下,用户终端的网络配置包括IPv4地址、IPv6地址、DNSv4服务器等信息,配置信息Uconf表示为:
网络侧配置主要是指网络子网的设置,包括子网内用户终端的IPv6地址、DNSv6地址等信息。DNSv6的配置方法主要有无状态地址自动配置(SLAAC)的RDNSS扩展选项[7]、DHCPv6 Only和SLAAC+DHCPv6混合三种方式。这几种方式各有优缺点,其中,SLAAC的RDNSS选项标准仍在不断发展中,网络设备对其支持程度不足;DHCPv6 Only方式对DHCPv6服务器的要求比较高,如果出现问题用户终端甚至无法获得IPv6地址,影响IPv6网络的正常访问;因此本文推荐使用SLAAC+DHCPv6混合方式,即SLAAC负责IPv6地址分配,DHCPv6服务器负责DNSv6服务器的分配。
用户侧配置主要是指用户终端操作系统的DNSv6设置,可以使用手动配置和自动配置两种方法。Windows操作系统在Win7以上、Linux操作系统如Ubuntu 11.04以上、MAC操作系统10.7以上默认提供图形界面来配置DNSv6,也支持通过DHCPv6来自动设置DNSv6[8]。其它桌面操作系统(如Win XP等)可以通过安装第三方软件来支持DHCPv6,例如Dibbler软件。由于Android操作系统目前仍不支持DHCPv6[8],本文暂不考虑移动终端的情况,后续可以通过RDNSS扩展选项来实现该方法对移动终端的支持。
还没有评论,来说两句吧...
发表评论