2014-09-23-Chronme-DNS-Cache-Issue

Posted on September 23, 2014

工作的时候会切换到公司的VPN,通常公司也会提供DNS解析服务用来连接公司内部的一些服务,通常情况下我们可以通过输入很短的别名来访问公司的各项服务。这些助记短URL使用起来很方便。

域名劫持,故名思议就是劫持这种域名解析。通常会被黑客用来做些不法勾当,例如钓鱼网站之类。 其实这种做法危害还蛮大的。 但是我发现一些大的ISP也在进行类似的勾当:通常有些URL由于输入错误并不存在,有些URL由于众所周知的原因会撞墙。 通常这种情况下底线是这些网站不管怎样都不应该会被解析,直接返回无法解析,或者网站不存在404. 但是自从互联网上兴起了打小广告之风以后,运营商大概统计发现大量的(可观的)流量会导向这些地方,于是ISP觉得他们能赚一笔,于是他们把这些URL解析全部导向了一个满屏小广告的ISP网站,由于这些网站通常贴满了牛皮藓一般的小广告,常常是一打开就令人发指!

在工作生活中,我尽量避免去撞上ISP的这种牛皮藓广告,因为一旦遇上就会心情不舒畅,想跟电信打官司,想打电信客服投诉之类的念头。 只是今天发现原本好好的一个内网网址竟然被解析到了这样的一个牛皮藓网站, 这也能理解因为我每天打开电脑要先从公网切换到VPN,如果是公网的时候进行了域名解析那很可能就会被ISP劫持。 于是很自然的去强制刷新DNS cache 要求计算机重新解析所有的URL。 再试一次发现竟然还是一样的情况。

  1. 确认刷新cache成功: 手动编辑HOST将URL解析到固定网址,刷新CACHE。 成功。 说明机器的DNScache已经刷新过了。那么发生这种情况,说明CHROME对URL解析进行了CACHE。

  2. 确认CHROME对URL进行了CACHE: 开启隐身模式,重新访问该URL, 成功。 URL并没有被ISP劫持,说明CHROME确实CACHE了URL解析。 而且这个CACHE应该是在我处于公网的时候发生的。 当连接到公网的时候页面被重置, 本来应该无法访问的页面因为ISP的流氓做法居然也被解析了出来。 所以CHROME认为这个页面被解析了,记录了该URL解析结果。

  3. Survey Chrome的相关机制。 Chrome DNS prefetch。 Chrome为了加快页面的加载速度,对URL解析进行了预取。 并且由于对本地DNS缓存数量有限, CHROME也对预取进行了缓存,并且通过一定的手段保证两个缓存间的一致性。 很显然这些合理的假设被流氓的ISP破坏了。

  4. WorkAround: 目的就是要刷新Chrome的Prefetch缓存, 四处寻找之后,在Chrome调试窗口里找到了 DisableCache 使用之后成功刷新缓存。 解决问题。

==