运营商部署ECS关键技术研究与实践
2018-05-21宗序梅刘怀彦巫俊峰黄钟王济晟施益峰唐凯
宗序梅 刘怀彦 巫俊峰 黄钟 王济晟 施益峰 唐凯
中国移动通信集团江苏分公司
0 引言
DNS是互联网世界的资源导航系统,ICP(Internet Content Provider、内容提供商)内容资源、CDN(Content Delivery Network,内容分发网络)网络加速都依赖于DNS的正确调度才能将用户流量引导到最合适的资源节点。运营商通常以省为单位部署DNS,代理用户请求向权威DNS发起查询并获取结果,这个原因导致了现网DNS的调度精度只能局限到省。随着CDN网络加速市场的激烈竞争和高密度视频业务的蓬勃发展,以省为单位的DNS调度颗粒度已难以适应互联网业务精细化运营管理要求。如何能让DNS具有一次性调度到地市精度的能力,让互联网内容更加贴近用户,是对运营商内容资源调度能力的巨大挑战。
1 DNS先天不足难于精细调度
域名解析系统从职能上看,可分为权威服务节点和递归服务节点。
权威服务节点一般由ICP或CDN服务提供商负责维护,权威服务器拥有某个区的域名信息,并为该区提供域名解析的服务,通常面向的不是终端用户。
递归服务节点则相反,它不针对某个区提供域名解析服务,而是直接面向终端用户,为终端用户提供递归的域名解析服务。一般由网络运营商、互联网服务提供商ISP架设,服务于自己的用户,有时被称为Local DNS(简称LDNS)。递归服务节点内部又分为缓存查询模块和递归解析模块,鉴于提高性能和安全考虑,LDNS的缓存服务器与递归服务器通常分开设置。
当用户向LDNS发起域名查询请求时,首先由DNS缓存服务器接收用户的查询请求,如果存在缓存记录,则直接返回用户查询结果;如果不存在缓存记录,交由DNS递归服务器处理;DNS递归服务器向外界的根DNS发起迭代查询,依次循环直到从权威服务器获取解析结果并返回给DNS缓存服务器。
权威服务器是根据收到的DNS查询请求中的来源地址来识别用户网络拓扑位置,实际上权威服务器收到的DNS查询请求中的来源地址并不是原始用户的地址,而是用户使用的LDNS的递归服务器地址。由于运营商LDNS通常以省或区域为单位集中部署,导致DNS调度精度最多只能区分到省,不能进一步精确到市。
互联网业务的复杂化和多样化不会因DNS的先天不足而停滞,为了满足精细调度的需求,现网只能通过HTTP302重定向的二次调度来补充实现,但HTTP重定向存在种种问题:增加了调度次数和用户时延;HTTP重定向服务器自身容易成为性能瓶颈;最严重的缺陷是只支持基于HTTP的协议,而无法调度其它应用层协议。
2 ECS助力DNS实现精细调度
2.1 ECS的技术原理
为了完善DNS功能,RFC2671 中提出了一种扩展DNS机制Extension Mechanisms for DNS (EDNS0),它扩展了原有DNS协议的数据包长度和字段内容,EDNS0协议支持在RR中使用TYPE=41的RDDATA存放网络信息。
在此基础上,谷歌等公司提出了DNS扩展协议EDNS Client Subnet(简称ECS),可在DNS报文的扩展报头中增加一种新的选项,用来携带发起DNS请求的原始用户的地址,这个DNS选项内容可以被中间递归服务器接力传递到权威服务器,权威服务器由此获得原始用户的地址,进而根据用户地址准确识别该用户的网络拓扑位置。图1展示了EDNS Client Subnet的报文格式。
图1 EDNS Client Subnet报文格式图
2016年5月公布的RFC7871描述了ECS的技术原理,定义了如下主要术语
客户端(Client):末端解析器、转发解析器或者递归解析器之一。递归解析器或者转发解析器的客户端。
末端解析器(Stub Resolver): 在客户端的一个简单DNS协议实现。作为转发解析器或递归解析器的客户端。
权威服务器(Authoritative Nameserver):一个或多个DNS区的权威名字服务器。 权威服务器一般不会直接和末端解析器或终端用户通信,而是和递归解析器通信。
递归解析器(Recursive Resolver):沿着域授权链为客户端进行域名解析的名字服务器。递归解析器经常使用缓存来加快对客户端查询的应答速度。
转发解析器(Forwarding Resolver):不自己进行迭代解析,而是将请求转发给其他递归解析器进行迭代解析的名字服务器。
在实际运用中,LOCAL DNS内部的缓存服务器承担上述转发解析器功能,递归服务器承担递归解析器功能。
2.2 ECS的工作流程
末端解析器向转发解析器发送DNS查询请求,末端解析器一般不需要支持ECS。
如果转发解析器支持ECS功能,转发末端解析器的查询请求给递归解析器,在转发请求报文中加入ECS信息。ECS信息包含2个字段描述末端解析器的网络信息,字段1是末端解析器地址前缀长度(SOURCE PREFIX-LENGTH),字段2是末端解析器地址前缀(ADDRESS)。
如果递归解析器支持ECS功能,递归解析器进行迭代解析,在迭代解析的请求报文中加入转发解析器请求中的ECS信息并最终发送给所查询域名的权威服务器。
如果权威服务器支持ECS功能,权威服务器取出递归解析器请求报文中的ECS信息并由此获得原始用户的地址信息,进而根据该地址信息准确识别该用户的网络拓扑位置,然后计算出该用户优化的解析地址。权威服务器还同时计算出能够使用该解析地址的最短用户源地址段前缀长度SCOPE PREFIXLENGTH。权威服务器构造应答报文,报文包含了优化的解析地址和请求中ECS信息,再加上SCOPE PREFIX-LENGTH缓存生效地址段前缀,返回给递归解析器。
递归解析器接收应答报文后需要进行缓存。传统DNS缓存按照<name,class,type>三元组唯一索引,对于支持ECS的中间服务器进行缓存时需要加入缓存生效地址段前缀这个新的维度。递归解析器缓存后将应答返回转发解析器。
转发解析器和递归解析器实现相同的缓存算法,然后转发解析器将应答返回末端解析器,但是去除应答报文中的ECS信息。
末端解析器最终收到优化的解析结果,但是不需要感知任何ECS信息。
另外一个末端解析器查询相同域名,如果源地址被前面的缓存生效地址段包含在内,转发解析器查询缓存内容匹配,如果缓存没有过期,可以直接使用缓存应答。但是如果末端解析器的源地址没有被前面的缓存生效地址段包含在内,则需要将前面的ECS递归流程重新完整执行一遍。
3 运营商部署ECS关键技术
3.1 运营商部署ECS面临的技术难题
EDNS Client Subnet仅描述了DNS携带原始用户IP地址的技术原理,并没有给出技术落地的实施方案,导致运营商LOCAL DNS在部署ECS功能时面临多种现实问题。
(1)缓存条目膨胀
按照ECS协议,权威服务器通过应答报文中的ECS信息指定该应答生效的用户源地址段,每个应答报文只能含有一个缓存生效地址段。对于一个省级ISP,汇聚后的用户IPv4地址条目数接近百条,拆分到各个地市后的路由条目数可能多达数百条,这样同一个域名在DNS缓存中的条目数量大量膨胀。
(2)递归开销巨大,容易遭受DDoS攻击
根据ECS递归算法,来自不同用户地址段的同一个域名查询请求都需要进行递归查询,带动缓存、递归、权威资源消耗大幅上升。DDoS攻击者可以通过变化域名前缀及变化ECS地址段两个维度对DNS系统发起DDoS攻击,提升了DNS系统防御DDoS攻击的难度。
(3)私网调度失准
目前中国ISP普遍存在IPv4地址不足,大量使用私有地址+NAT的用户地址分配策略,可能会让用户私有地址直接访问LDNS。按照ECS规范,权威服务器如果在ECS地址中收到私有地址,会使用递归解析器源地址返回应答。
(4)ISP地址调整时,权威DNS同步更新难
在ECS协议中,根据原始用户地址返回解析地址的策略是由权威服务器控制并通过缓存机制传导到递归解析器和转发解析器并影响全网,域名调度权完全受控于ICP或CDN方。
终端用户的网络地址及网络拓扑位置是由ISP控制及变更,ISP比ICP更准确、更及时的了解用户的网络地址和网络拓扑属性,不过在ECS协议中并没有机制能够让ISP将用户网络变更信息同步给权威服务器。
3.2 ECS部署优化方案探讨
ECS核心思想是通过在DNS报文中携带原始请求者IP地址信息,使得权威服务器能够精细调度,但ECS协议提出者明显站在ICP或CDN一方考虑问题,忽视了网络运营商、ISP另一方的利益诉求。站在ISP角度,让DNS具有更为精细的业务调度能力固然是理想目标,但争取调度话语权,降低LDNS资源消耗和安全风险,同样是ISP必须考虑的核心因素。只有ICP/CDN与ISP共同参与,双方在ECS协议基础上对部署方案做改进优化,才能实现互利共赢。
ISP可根据业务模型,合理规划分区(调度单元)将用户归类,每个分区里包含多条网络拓扑位置相同的地址段,每个分区使用唯一映射地址进行指代,DNS载源查询时使用恒定的映射地址来代替分区内多变的用户源地址。通过将分区内所有网络拓扑位置相同的地址段静态映射到分区映射地址,同一个分区中同一个域名只需要使用一条缓存条目,一举克服和减缓原来方案中面临的4个问题。
运营商部署ECS的关键技术如下
(1)分区规划
根据业务模型来规划分区(调度颗粒度)将用户归类,在每个分区里包含多条网络拓扑位置相同的地址段,即将所有网络拓扑位置相同的地址段归并到同一个分区的地址段集合中。根据目前的业务需求,以一个地市划为一个分区比较合适。
如图2所示,一个省级ISP的每个地市的地址段集合就对应一个分区。每个分区及对应IP地址段信息可以人工静态配置到转发解析器或递归解析器中。经过改造后支持分区结构的转发解析器或递归解析器称为分区转发解析器或分区递归解析器。
图2 EDNS 分区规划示意图
(2)分区映射和ECS源地址变换
每个分区使用唯一映射地址进行指代,映射地址一般取该分区地址段中一个合法公网IP地址。LDNS运营方将全国各市对应的映射地址列表通过公开发布、友好协商等途径,让各大ICP,CDN厂商广泛获知,从而使权威服务器能够正确识别映射地址代表的分区用户。
如果用户源地址为私有地址,随着分区映射为公网地址,后续的DNS请求会在ECS中使用映射后公网地址,原来私网调度失准问题迎刃而解。
改进的方案中ECS报文不再传递真实的用户源地址,用户隐私得到了有效保障。
(3)分区缓存
分区转发解析器或分区递归解析器的缓存经过了改造,同一个域名同一个类型的应答在同一个分区只有一份缓存,也就是缓存内容是按照<name,class,type,分区>进行唯一索引,比改造前按照同一域名每个地址段进行索引大大压缩了缓存条目数量。
因为分区的粒度远远大于单个地址段粒度,所以改造后的分区转发解析器或分区递归解析器产生的递归流量要远远小于改造前的流量,大幅减少了转发解析器、递归解析器、权威服务器资源消耗。
(4)分区递归
如果分区转发解析器或分区递归解析器收到一个DNS查询请求,假设该查询请求的域名为第一次请求,分区转发解析器或分区递归解析器需要构造一个新的ECS查询进行递归查询,此时使用恒定的映射地址来代替原来分区内的真实用户源地址。最终权威服务器收到ECS查询请求,不再需要了解分区原先对应的众多路由网段信息,只需要能够正确给每个分区映射地址返回对应的解析地址就可以。
(5)ISP地址调整更新处理
当ISP变更了终端用户的网络地址及网络拓扑位置,只需要ISP管理人员需要及时调整分区转发解析器或分区递归解析器上的分区地址段配置,权威服务器不需要进行任何调整。
4 江苏移动LDNS部署ECS实践
2017年江苏移动按照如上优化思路对现网宽带DNS进行ECS功能部署,在此基础上分别对接集团内容网络GSLB完成ECS递归流程验证,对接省内CDN平台、IMS DNS系统完成ECS转发流程验证,均达到预期的地市级精细调度目标,为后续互联网内容资源从省中心下沉到地市边缘节点奠定了基础。
ECS部署实施模型如图3所示,涉及缓存服务器,递归服务器,网管服务器三大网元的改造。
图3 ECS部署实施模型图
4.1 缓存服务器改造
缓存服务器由原来的单个分区改造为多个分区,每一个EDNS0分区结合地址映射技术归并一个地市所有用户的解析缓存。普通域名使用的公共分区缓存和EDNS0域名使用的EDNS0分区缓存并存。通过缓存分区可大幅度提升缓存命中率,减少载源递归流量。江苏移动宽带LDNS规划的各地市ECS分区映射地址表参考表1。
使用分区映射后,对于转发解析器和递归解析器ECS请求报文将不再携带原始用户的真实网络地址信息,而是使用原始用户所在分区的唯一映射地址。新的查询请求ECS信息中地址前缀长度(SOURCE PREFIX-LENGTH)填写32,解析器地址前缀(ADDRESS)填写32位的分区映射地址。
表1 江苏移动省内地市ECS分区映射地址规划表
4.2 递归服务器改造
虽然ECS递归可以兼容普通递归 ,但ECS递归比普通递归更加消耗资源,由于现网EDNS0域名数量很少,改造时新增了EDNS递归服务器来避免升级原有普通递归,从而使得递归服务器由原来的一组变成了普通递归和EDNS递归两个分组。EDNS递归服务器内部也要划分区域以提升递归性能。
4.3 DNS网管改造
DNS网管基于精确域名来标识是否属于EDNS域名,确保域名调度的主动权掌握在运营商ISP手上。如果是EDNS域名,DNS网管上还需要继续标识策略,如forward转发或迭代查询。
前端缓存服务器根据网管标识的EDNS域名列表实施分流,EDNS域名转发到专用EDNS递归服务器,普通域名转发普通递归服务器。
4.4 EDNS域名解析流程
DNS前端缓存收到用户请求后,依据DNS网管里的域名标记判断其是否属于EDNS域名;如果非EDNS域名,进入公共缓存空间,依据DNS网管策略选择普通递归或普通转发;如果网管标记为EDNS域名,则根据用户源IP对应的映射表,进入相应地市EDNS缓存分区;将映射公网IP添加进扩展字段构造出新的EDNS请求转发给EDNS递归服务器;EDNS递归服务器根据ECS里的映射公网IP,进入相应递归分区后执行DNS网管策略,如选择EDNS递归或EDNS转发。
5 总结
针对现网DNS调度不够精细的问题,谷歌、Akamai等互联网公司从ICP、CDN厂商角度出发提出了EDNS Client Subnet解决方案,得到了ICP、CDN乃至公众DNS服务提供商的广泛支持,但由于缺乏对ISP权益的关注,在运营商网络中部署时面临着缓存条目膨胀、递归开销巨大、私网调度失准等问题。本文探讨了运营商采用地址映射技术优化部署ECS的演进方案,通过将用户归类,为每一个类别的用户只向权威服务器发送一次携带映射地址的递归请求,提高了DNS缓存的命中率,不但从技术上解决了ECS落地难题,而且在业务上提升了运营商参与内容调度的话语权,对宽带运营商具有普遍适用性和推广价值。