那些年移动App域名解析踩过的坑

一、摘要

移动应用出现域名劫持、解析结果修改生效慢、跨运营商跨地域访问问题?阿里云HTTPDNS可以解决这类问题。

二、域名解析阿喀琉斯之踵

域名解析是终端设备访问互联网的第一步,扮演着至关重要的角色。同时,域名解析服务是当前整个互联网基础设施中最脆弱的几个环节之一。移动互联网时代,由于接入智能终端数量激增,问题愈加严重。

案例1: 域名解析问题导致访问流量减半

2017年2月24日21:20-2月25日1:00之间,某App A在江苏省某ISP访问流量减半,排查后发现为递归DNS故障导致。

那些年移动App域名解析踩过的坑
图1 递归DNS故障导致业务访问受害

如图1所示,正常访问期间,App业务访问大致分为四步:

  • Step 1: App发起业务域名解析
  • Step 2: 递归DNS返回域名解析结果IP
  • Step 3: App根据返回的IP向业务服务器发起请求
  • Step 4: 业务服务器返回响应,交互结束。

故障发生时,递归DNS在第二步无法返回解析结果或者返回错误的结果,导致App无法正确获取业务服务器的IP,最终业务访问受到巨大影响。

案例2: 域名解析结果修改不生效导致流量无法迁移

2016年11月中旬,由于某App B访问的节点存在服务质量方面问题,计划通过修改域名解析记录将流量切走,但由于域名解析不生效,导致流量无法调走,最终4个小时后节点服务质量恢复了业务才回归正常。

那些年移动App域名解析踩过的坑
图2 域名解析不生效的恶果

如图2所示,正常访问期间,App业务访问的细化步骤可以分解成六步:

  • Step 1: App发起业务域名解析
  • Step 2: 递归DNS向权威DNS发起域名解析结果
  • Step 3: 权威DNS返回域名对应的IP给递归DNS
  • Step 4: 递归DNS给App返回域名解析结果
  • Step 5: App根据返回的IP向业务服务器发起请求
  • Step 6: 业务服务器返回响应,交互结束。

故障发生时,尽管权威DNS的解析记录已经修改,但递归DNS的解析结果却没有任何变化(常见原因是递归DNS不遵循返回结果的TTL,私自设置缓存时间),仍然返回之前的结果,导致了故障的发生。

案例3: 不能碰的递归DNS节点

2011年,某公司流量峰值期间,运维人员计划通过修改CDN的智能DNS系统配置将某一地区的部分流量从负载高的CDN节点到相对流量小的CDN节点去。实施过程中,发现某一个DNS IP对应的流量到达5G+,无法实现“调部分流量”的目标。

案例4: 客户端调度不准

客户反馈的服务质量问题往往是由于调度不准确导致的。参见以下案例。

那些年移动App域名解析踩过的坑
图3 手机DNS配置不准导致跨ISP跨地域访问

根据IP地址来判断,案例中的用户位于武汉联通,而递归DNS却配置成了上海电信的DNS服务器,导致最终调度系统会按照上海电信区域来做就近接入,出现了跨运营商、跨地域访问问题。

三、问题溯源

3.1 域名劫持问题

现网上DNS解析一般基于UDP来实现,由于UDP自身的脆弱性,很容易被劫持。

那些年移动App域名解析踩过的坑
图4 域名劫持原理

根据多种渠道统计数据,国内现网的周劫持率在3%-5%左右(对于某一个业务,一周之内曾经被劫持过的用户占比),部分地区部分时段的劫持率超过20%。

基于国内严重的流量劫持情况,腾讯、小米等六公司与2015年底联合声明抵制流量劫持等违法行为,但当前的形式仍不容乐观。

域名劫持的危害性在于隐蔽性强、品牌伤害严重、解决难度大。

  • 隐蔽性强。 劫持偶发,难以复现,举证难。
  • 品牌伤害严重。 劫持后往往弹出涉黄、涉赌等内容,严重伤害应用品牌。
  • 解决难度大。 确认域名劫持后,一般开发者没有渠道去解决问题。

3.2 递归DNS数量少且分布不均导致无法就近接入

在国内,递归DNS数量较少且分布不均。据统计,top 200的递归DNS承担国内90%+的DNS访问流量。这样少的递归DNS是无法承载就近接入需求的。

3.3 终端手机的Local DNS配置错误导致无法就近接入

上节的案例4就是典型的递归服务器配置错误导致的就近接入问题。

四、阿里云飞天的解决之道

4.1 小工具大本领:HTTPDNS

那些年移动App域名解析踩过的坑
图5 HTTPDNS服务原理

如图5所示,HTTPDNS与传统的DNS对比起来,有以下几项功能:

  • 使用HTTP协议进行域名解析,极大增强了域名解析的安全性
  • 绕过了递归DNS服务器,最大限度防止域名劫持的发生
  • HTTPDNS服务自身利用IP地址而非域名对外提供服务,防止HTTPDNS自身域名被劫持
  • HTTPDNS想权威请求解析结果时,使用客户端IP进行解析

4.2 适用对象

有自己App的开发者,并且需要一定的App编码能力(接入HTTPDNS必须修改App源码)。

4.3 如何使用

  • Step 1: 开通HTTPDNS
  • Step 2: 到HTTPDNS产品控制台配置待解析域名
  • Step 3: 通过Android/iOS SDK或者HTTP API将App接入HTTPDNS服务

请参见HTTPDNS帮助文档

五、案例

手机淘宝、支付宝钱包等阿里系App都已经接入HTTPDNS产品,治愈了上面提到的一系列顽疾。

案例中App B尝试接入阿里云飞天HTTPDNS后,在2017年2月24日的故障中,新版本未受任何影响,老版本则遇到了App A类似的问题。

上一篇:第1章 PCI总线的基本知识


下一篇:App如何实现就近接入?如何改善调度不准问题?