关于DNS污染问题的分析与解决

  • A+
所属分类:实用信息

背景

网域服务器缓存污染(DNS cache pollution),又称域名服务器缓存投毒(DNS cache poisoning),是指一些刻意制造或无意中制造出来的域名服务器数据包,把域名指往不正确的IP地址。一般来说,在互联网上都有可信赖的网域服务器,但为减低网络上的流量压力,一般的域名服务器都会把从上游的域名服务器获得的解析记录暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有关网域的局域域名服务器的缓存受到污染,就会把网域内的计算机导引往错误的服务器或服务器的网址。

域名服务器缓存污染可能是因为域名服务器软件的设计错误而产生,但亦可能由别有用心者通过研究开放架构的域名服务器系统来利用当中的漏洞。

具体参照WiKi:地址

目前已知的最容易判断的污染是www.google.com,即谷歌域名

如何判断域名被污染

采用域名解析测试,即dig命令。

关于dig命令使用方法

安装:Centos下直接用yum安装:

  1. yum install bind-utils

使用方法:

  1. dig 需要查询的域名 @域名服务器的地址 -p 域名服务器端口号

使用114DNS测试

本次测试使用dig命令:

  1. dig www.google.com @114.114.114.114

得到的结果如图所示:

可以发现google的域名指向了69.171.233.24的IP地址,经查询发现该地址是属于facebook的地址,如图:

得出的结论是:69.171.233.24这个IP,这是用于污染 DNS 的投毒 IP 之一。

使用OpenDNS测试

国外的 DNS 是无污染的,出名的公众DNS是 OpenDNS 和 GoogleDNS,不过因为谷歌被特殊照顾,你根本无法在天朝内使用8.8.8.8(自己在本机测试下路由追踪就懂了),但是 OpenDNS 是没问题的。

使用通过 OpenDNS 208.67.222.222进行查询,命令如下:

  1. dig www.google.com @208.67.222.222

结果如下,如图:

得到的IP是69.171.242.30,依然是被污染的IP,如图:

是不是很出乎意料,结果依然是被污染的

因为GFW 对 DNS 数据包进行了干扰,因为 OpenDNS 服务器位于国外,从大陆发出的数据包势必要通过 GFW,那么干扰是非常容易的一件事。

有一个突破口就在于,DNS 的端口不一定只能用53端口查询

幸运的是,GFW 确实只会检测53端口的 DNS 数据包,而且 OpenDNS 除了53,还提供了443和5353端口的 DNS 服务。

使用OpenDNS的443端口测试

命令如下:

  1. dig www.google.com @208.67.222.222 -p 443

结果如图:

经过查询,此IP终于不是被污染的IP地址了。

结论

  1. 我们必须使用非53端口去查询国外 DNS 才能得到没有被 GFW 篡改的正确解析结果,自建DNS服务器可以自定义使用的 DNS 的端口,而 Windows 系统的 DNS 设置定死了使用53端口
  2. 如果通过 OpenDNS 去解析国内网站,那么很可能会得到一个海外 IP(很多大公司都会配备有海外服务器供海外华人使用,例如京东啦淘宝啦B站啦),这样会导致访问国内网站访问速度很慢
    而 ChinaDNS 可以根据 chnrouter 来判断,如果从国内 DNS 里解析到国内 IP 的话就使用,对于国外网站会过滤掉从国内 DNS 解析得到的被污染的结果,十分完美的解决了这个问题。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: