项目背景
某股份制银行,部分省份的用户报告无法访问该行手机银行和主页,排查发现通过DNS解析手机银行和微信银行等域名得到错误结果。
某企业用户,内部用户反馈部分域名无法解析,经排查,4G用户可以正常解析,家庭宽带用户无法解析。
传统DNS
VS
HttpDNS
传统DNS
传统的智能DNS解析过程利用地址库来判断用户来源:
传统的智能DNS存在被污染的可能:
HttpDNS
HttpDNS利用 Http 协议与 DNS 服务器交互,代替了传统的基于 UDP 协议的 DNS 交互,绕开了运营商的 Local DNS,有效防止了域名劫持,提高域名解析效率。另外,由于 DNS 服务器端获取的是真实客户端 IP 而非 Local DNS 的 IP,能够精确定位客户端地理位置、运营商信息,从而有效改进调度精确性。
HttpDNS 主要解决的问题:
- Local DNS 劫持: 由于 HttpDNS 是通过 IP 直接请求 Http 获取服务器 A 记录地址,不存在向本地运营商询问 domain 解析过程,所以从根本避免了劫持问题;
- 平均访问延迟下降: 由于是 IP 直接访问省掉了一次 domain 解析过程,通过智能算法排序后找到最快节点进行访问;
- 用户连接失败率下降: 通过算法降低以往失败率过高的服务器排序,通过时间近期访问过的数据提高服务器排序,通过历史访问成功记录提高服务器排序。
HttpDNS解析过程
- 将域名请求通过新的Http请求发向LTM;
- LTM接收到格式化的Http请求后,从中取出客户端源地址+需要解析的域名;
- LTM重新发起新的DNS解析请求,以真实客户端源地址作为DNS请求源地址,向GTM发起DNS解析;
- GTM在topology地址库中根据真实客户端源地址,获得最优解析结果(对应最优DC/线路);
- GTM并将DNS解析结果发回给LTM;
- LTM将收到的DNS解析结果重新构造成Http response响应包,发回给客户端。
技术架构及方案
三层架构,第一层LB负责HttpDNS VS池以及DNS监听地址资源池的负载均衡
- 客户端HttpDNS请求到达VS_HttpDNS,负载到后端HttpDNS VS 1或2;
- Layer VS将DNS请求发送到LB上的VS_DNS,负载到DNS 1或2;
- DNS 1或2响应DNS请求,通过Auto last hop回到LB;
- LB通过Auto last hop回到Layer VS;
- VS_HttpDNS应答client请求。
终端行为实现高可用
- 客户终端发起Http://your-HttpDNS-vs-ip/?sip=1.1.1.1&dn=www.xxx.com.cn ,sip的HttpDNS请求中your-HttpDNS-vs-ip为静态地址,HttpDNS服务发布多个公网地址后,终端请求多次失败,主动发起对其他地址的请求;
- 传统的智能DNS解析可作为HttpDNS请求全部失败后的备用方式;
- 以上实现高可用的行为需终端软件开发设计完成。
运维和监控
- 建议在Http-DNS层和GTM层通过HSL(高速日志引擎)将DNS相关日志实施输出,通过外部日志分析工具(如ELK),构建DNS监控体系监控体系。
- Http-DNS层至少输出HttpDNS请求信息,包括请求域名信息,源ip信息及响应情况;DNS层,输出源ip信息,以及DNS域名信息,及响应情况。这两层的F5设备输出信息可以相互对应,都包含源ip信息,域名信息,响应信息。
- 更多的视图可以包含实时解析统计,地理分布(请求、响应),线路统计,总解析数,失败解析数,总响应数,失败请求发生的最新时间以及对应query id,查询类型柱状图,LDNS来源等信息。
传统DNS
所有的域名请求到达ldns,通过ldns向GTM获取解析结果,topology算法根据ldns地址给出智能解析结果。
HttpDNS
改造完成可以发出HttpDNS request请求的应用,通过Http 请求向启用httpDNS的LTM获取解析结果, topology算法根据client端地址给出智能解析结果。
HttpDNS的请求,在公网传输可使用Https加密,在request到达HttpDNS_VS之前完成ssl卸载即可。
关键的适用场景和收益
适用场景