文/陆海 柯立新
DNS(域名系统)是互联网的一项基础服务,其作为将域名和IP地址相互映射的一个分布式系统,能够使人更方便地访问互联网。DNS一般可分为权威DNS和递归查询DNS,权威DNS提供所辖域名的解析,而查询DNS主要是面向一般用户进行上网地址解析。
为了使得用户能够获得最优(最近)的服务器提供服务,应用的权威DNS(或CDN)会针对不同ISP下的用户返回不同的地址。以某著名电商网站为例,其首页加载共涉及到约30个不同的域名,且大部分域名从命名上均包含CDN字样。假定DNS对于首页中涉及到的域名解析结果能够快1ms返回,30个不同域名就能够节省30ms的时间,从而直接提高了网站的整体访问速度。
目前CDN为最终用户进行线路选择的依据,大部分依赖于进行域名查询的源地址,根据该源地址所归属的运营商及来源地的不同返回不同的地址。但进行域名查询的来源地址并不能代表用户的最终地址,即使采用了ECS(edns-client-subnet),但由于ECS对于NAT后的用户目前无能为力,因此由CDN服务商来精确判断用户的来源并不总是准确的,DNS返回结果可以直接决定用户是否可以获得优质的网络访问效果。
目前网络安全的形势不容乐观,互联网上存在大量的恶意代码及安全隐患,其中很多APT攻击以及僵尸网络C&C(命令和控制)连接,均不同程度利用DNS来实现。通过对DNS的解析行为进行分析与研判,是进行安全分析的一种重要手段。
校园网环境所面对的用户数量众多,出口多,访问控制策略复杂多等情况。对于网络的优化要求早已不是仅实现访问可达,更需要保证访问的效果和质量,设计与出口状况相匹配的DNS系统,实现可管可控低延迟高质量的域名解析服务,是提高目前校园网优化水平的一条有效途径。
上海教育城域网(以下简称城域网)是国内教育界首个100G主干城域网,自建成以后逐渐接入了上海市3000多家教育单位,不同单位由于历史原因在接入城域网前已经接入了其他运营商或者机构,另外由于自身运维能力差异,对于终端用户的服务水平不一样,接入城域网后的用户可能会由于各种原因无法正常使用城域网所提供的网络服务。此外由于终端设备的错误配置会使得网络访问效果大打折扣;城域网目前也正在进行内容建设,例如引入CDN节点等,力求加强城域网用户的访问体验,这些资源建在城域网内,也需要引导用户去访问。为解决上述问题,未来将在城域网内建设一批统一管理的DNS系统,实现可管、可控、可追溯的DNS服务,向最终用户提供DNS解析。
图1 层次化DNS系统结构
DNS系统以分层方式进行部署,将DNS的缓存与递归查询分开处理,并在所有的ISP出口处分别部署专用的递归查询服务器。系统结构如图1。
在区县教育局/区县信息中心处部署缓存服务器,在正常情况下各区县的缓存服务器只为本区县用户提供域名解析服务。缓存服务器将所有的DNS查询请求传递给部署在市教委信息中心的递归查询服务器进行查询,自己并不直接进行递归查询。在城域网内开启任播(anycast)服务,所有的缓存服务器均配置相同的任播地址,用户查询会就近分配到最近的任播缓存服务器上,确保用户获得低时延的域名解析服务。而当某一区县的DNS缓存服务器出现故障或者需要进行维护时,任播功能将能自动将用户的访问请求转发到其他的任播缓存服务器上,保证用户的服务不中断。具体实现方式简要介绍如下:
(1)将DNS的业务监听地址(anycast地址)配置在DNS缓存服务器的loopback接口上,例如:
ip addr add 192.168.0.1/32 dev lo
(2)区县信息中心路由器与DNS缓存服务器的互联接口之间开启动态路由协议(如OSPF)。
(3)DNS缓存服务器将anycast地址通过动态路由协议注入到区县信息中心路由器中:
(4)DNS缓存服务器上需要开启守护信息中心路由器将anycast地址再通过IGP发布到城域网骨干网中。
(5)DNS缓存服务器上需要开启守护进程,定时检查自身DNS服务是否能够达到正常运行基线相关要求,例如DNS服务是否工作正常:
当DNS出现问题时,通过停止动态路由进程,不再向对端路由器发布anycast地址,就可以将缓存服务器自身从网络上隔离出去。
缓存服务器将主要面向一般用户查询,并记录用户查询日志。在保证查询性能的同时,缓存服务器自身能够对异常的DNS报文进行丢弃处理;能够防范DNS缓存投毒以及能够对DNS Flood、UDP Flood等常见攻击进行防护。还会对于异常的DNS查询请求进行拦截,例如限制每用户的QPS数量,对于网外用户的查询拒绝服务等,例如:
缓存服务器具备EDNS0扩展功能,能够将最终用户的IP地址等信息打包进查询请求,以方便上层CDN返回最优结果。
在上层递归查询服务器故障的极端情况下,缓存服务器还具备缓存快照及相应解析记录导入能力(通过带外承载),或能够通过人工干预进行本地解析。
为保证缓存服务器的安全性,在网络侧采用如下策略对各区县的缓存服务器进行保护:
(1)在缓存服务器的接入路由器与网络互联的链路上均部署了ACL,只允许城域网内用户访问缓存服务器,禁止域外地址访问。
(2)为保障系统在遭受大规模攻击流量情况下仍能够提供服务,在缓存服务节点接入路由器与网络互联的链路上部署了带宽限速的QoS策略。QoS策略根据各区县的日常访问量配置,按照峰值流量2倍进行配置。
为了避免出现网络内部用户因为错配DNS导致的解析结果不正确等相关问题,在各区县网络中心的核心处还可以通过配置控制策略等方式将用户的域名查询请求统一转发到缓存服务器上,使得网络用户均能够获得正确的域名查询结果,且不需要网络用户对配置进行修改,具体实现方式不再赘述。
市教委信息中心处部署DNS专门用于进行递归查询操作,递归查询DNS仅响应各缓存服务器的DNS查询请求。城域网的所有域名查询规则将会配置到递归查询DNS上,包括转发域规则、私有地址规则、CDN转发规则、安全防护规则等。规则由策略管理中心通过带外通道统一进行管理及下发。部分策略举例:
策略管理中心还将对所有的缓存DNS进行管理,并进行转发调度,根据需要为不同的缓存DNS服务器分配不同的递归查询DNS。在市教委信息中心处还将配置域名安全态势感知及事件处理中心,利用已有的日志分析工具对于用户的DNS行为进行安全审计,阻止诸如APT攻击、僵尸网络CC连接、不良网站访问等用户行为。
为了配合CDN的优化动作,在城域网统一出口的每一个ISP出口侧,均配置使用对应ISP源地址的DNS服务器,以确保对应出口CDN返回的优化结果的正确性。专用递归查询DNS的部署目的是为了配合核心层的递归查询DNS使用,满足核心层递归查询DNS服务的出口调度需求。出口处递归查询DNS仅响应内部递归查询服务器的递归查询请求。
目前该系统的部分功能已经在上海市部分区县信息中心进行了试用,用户评价良好。