应对DNS污染


事情的起因是昨天室友跟我反映说他们b站上不去了,看我能不能登录。我发现我的电脑当时能够登录,但是当晚却始终load不出来,不仅如此,还有很多其他的网站如最近关注的个人博客登录不上,后来通过一系列分析确定应该是DNS污染的问题,并通过修改本地dns服务器来成功解决此问题

分析问题

问题的出现

2017/10/13日我和室友的电脑先后出现了部分网站上不去的问题(网速经测验没有问题),以我个人为例,打不开的网页有以下几个:

这些网站都有一个特点,网页的title能解析出来,但是dom始终是一片空白,说明网页的服务器没问题,html能收到,可能是某个资源解析阻塞了。打开了调试之后发现,bootstrap的cdn服务 的资源始终加载不出来,看来问题可能在这里。bootstrap的cdn是非常普遍的cdn解决方案,很多网站都采用了。也就是说如果这个问题不解决,很有可能会对我们的上网体验造成很大的困扰。遂上网查询了类似问题,有网友提到了可能是dns污染。我对计算机网络的了解也是一知半解,正好借这个机会捋一捋知识网。

关于DNS污染和DNS劫持

什么是DNS

在讲DNS之前,还是先提一下计算机网络通讯具体不细说,大概意思就是计算机们之间是通过协议来进行通讯,最基本的协议有TCPUDP,这些协议只需要知道对方的ip端口号(web服务的端口统一是80)。实际上也就是说理论上你只要知道对方电脑的ip就可以访问。但是世界上计算机这么多,想要记住别人的ip何其苦难而且也没必要。于是人们开发出了域名系统,比如www.baidu.com对应的就是百度服务器的ip,那么我们在浏览器中输入对应的域名,这个域名怎么解析成对应的ip呢?这时候就要靠我们的dns系统了。

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53

这是官方对dns的解释,实际上就是一个域名字典,能够根据域名来解析出对应主机的ip地址.我们打开终端,输入

1
$ ping www.zhihu.com

得到的结果为

1
2
3
4
PING 6ej19t5k0le6q937.alicloudlayer.com (118.178.213.186): 56 data bytes
64 bytes from 118.178.213.186: icmp_seq=0 ttl=29 time=27.525 ms
64 bytes from 118.178.213.186: icmp_seq=1 ttl=29 time=27.360 ms
64 bytes from 118.178.213.186: icmp_seq=2 ttl=29 time=24.600 ms

说明我们本机能够访问www.zhihu.com,并且能够看到,解析出来的ip是118.178。213.186

DNS污染

DNS污染是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击(DNS cache poisoning)。其工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果。

百度百科上的解释已经很明白了,事实上就是路由器对用户发送的dns请求包做出了假传圣旨的举措(本来它只是个传话的公公)

DNS劫持

DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。

DNS劫持症状:在某些地区的用户在成功连接宽带后,首次打开任何页面都指向ISP提供的“电信互联星空”、“网通黄页广告”等内容页面。还有就是曾经出现过用户访问Google域名的时候出现了百度的网站。这些都属于DNS劫持。
  
校园网的实现方式应该也算dns挟持

总结

DNS劫持

就是指用户访问一个被标记的地址时,DNS服务器故意将此地址指向一个错误的IP地址的行为。范例,网通、电信、铁通的某些用户有时候会发现自己打算访问一个地址,却被转向了各种推送广告等网站,这就是DNS劫持。

DNS污染

指的是用户访问一个地址,国内的服务器(非DNS)监控到用户访问的已经被标记地址时,服务器伪装成DNS服务器向用户发回错误的地址的行为。范例,访问Youtube、Facebook之类网站等出现的状况。

应对方法

应对DNS劫持

可以采用使用国外免费公用的DNS服务器解决。例如OpenDNS(208.67.222.222)或GoogleDNS(8.8.8.8)

应对DNS污染

对于DNS污染,可以说,个人用户很难单单靠设置解决,通常可以使用VPN或者域名远程解析的方法解决,但这大多需要购买付费的VPN或SSH等,也可以通过修改Hosts的方法,手动设置域名正确的IP地址。

本次问题的解决

单从形式上来看,本次事故更像是DNS污染,因为并不是指向了错误的网站,而是资源加载不出来,但是最后通过修改DNS的方法也成功地解决了这个问题,我的猜测是dns劫持了之后单纯返回了错误的ip。不过更大的疑点是:只有我们宿舍出现了这种情况!(我跑到对面宿舍去借同学的电脑登录我之前登不上的网站发现都没问题…)有种不对的感觉Orz