DNS 劫持,也称作域名劫持,经常见于一些运营商某一区域的 DNS 服务器行为异常。(这种异常的原因有许多,众所周知,网间结算的费用比较贵,运营商现在被要求降费提速,日子不好过,也为了节省成本,通常会部署 DNS 缓存服务器,在用户跨网访问时,采用技术手段将用户与目标服务器的连接劫持到自家的缓存服务器上,结果正常的话,这种劫持也被称作良性劫持。但是如果不正常,很多请求的访问链路便out of control了…)。区别于 HTTP 劫持,DNS 劫持即使是走 HTTPS 请求也会受到影响,这种影响常见于 HTTP 改造 HTTPS 过程的时候,当请求的域名在 DNS 缓存服务器上命中之后,便会走缓存结果,然而,由于大部分的缓存服务器只支持 80 端口,不支持 443 端口的访问,所以春节期间发生的一些劫持问题主要来源于近期的HTTPS改造。
本文适合 PM、FE 阅读,如果遇到类似的情况可以按照如下步骤来收集证据,配合 SRE 举报。
举报是解决运营商劫持非常有效的手段,维护网络环境人人有责。
如何在移动端确定你是否被劫持,区分 Android 和 iOS 两个平台,但是原理和步骤基本一致,此处利用春节期间遇到的一个 Case,基于 Android 平台做介绍:
1.工具准备
下载Android平台的追踪工具:http://www.wandoujia.com/apps/com.ulfdittmer.android.ping?utm_source=qq(忽略豌豆荚)
2.获取检测结果
安装完毕之后打开,可以见下图界面,此时输入要检测劫持的域名:
输入域名之后,点击 “DNS” 按钮,即可开始追踪 DNS 解析的链路,结果如下图:
3.结果分析
结果出来了,我怎么验证是否域名被劫持呢,这时候我们需要分析一下 CDN 网络对于域名解析做的一些调整:启用 CDN 加速服务,需要将域名指向加速域名,再由加速域名来提供 ip 地址,需要在 DNS 服务商处为域名添加 CNAME 记录,从而达到内容分发加速的效果。
也就是说,CDN 域名在 DNS 解析时需要先解析到一条或者多条 CNAME 记录,这些 CNAME 记录指向统一的 CDN 的加速服务,下面我们看下正常的解析是什么样子的,见下图:
这时,我们再看图2,仅返回了一个 ipv4 的地址, 试问谁家CDN这么简陋,这不是劫持又是什么呢。
打开百度,验证一下ip地址:111.29.3.240 发现地址是
至此,可以把这些作为证据给SRE,协助解决问题。
类似的,在 iOS 下的工具名字叫做 iNetTools,收集的步骤类似,不赘述。
纰漏之处,敬请指正。