域名DNS污染解决方法

2020-07-27 14:11:25 GDIDC

DNS污染

    DNS污染,又称为域名服务器缓存污染(DNS cache pollution)或者域名服务器快照侵害(DNS cache poisoning)。

    DNS污染是指一些刻意制造或无意中制造出来的域名服务器分组,把域名指往不正确的IP地址。

    一般来说,网站在互联网上一般都有可信赖的域名服务器,但为减免网络上的交通,一般的域名都会把外间的域名服务器数据暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有相关网域的局域域名服务器的缓存受到污染,就会把网域内的电脑导引往错误的服务器或服务器的网址。


原理解析

    我们假设 A为用户端也就是你的电脑设备,B为DNS服务器,C为A到B链路中一个节点的网络设备(路由器、交换机、网关等)。

    然后我们模拟一次被污染的DNS请求过程。

    A访问一个网站,比如 google.com ,然后,A向B通过UDP方式发送查询请求,比如查询内容 A google.com ,这个数据库在前往B的时候要经过数个节点网络设备比如C,然后继续前往DNS服务器B。

    然而在这个传输过程中,C针对这个数据包进行特征分析,(DNS端口为53,进行特定端口监视扫描,对UDP明文传输的DNS查询请求进行特征和关键词匹配分析,比如“google.com”是关键词,也或者是“A记录”),从而立刻返回一个错误的解析结果(比如返回了 A 233.233.233.233 )。

    众所周知,作为链路上的一个节点,网络设备C 必定比真正的 DNS服务器B 更快的返回结果到 用户电脑A,而目前的DNS解析机制策略有一个重要的原则,就是只认第一。因此 节点网络设备C所返回的查询结果就被 用户电脑A当作了最终结果,于是用户电脑A因为获得了错误的IP,导致无法正常访问 google.com 。


验证污染

    我的 www.dou-bi.com 主域名虽然在大部分地区解除了DNS污染,但是我的两个SS站域名并没有,所以我尝试对我的SS 子域名进行nslookup测试。

  • C:UsersAdministrator>nslookup ss.dou-bi.com 8.8.8.8

  • 服务器: google-public-dns-a.google.com

  • Address: 8.8.8.8


非权威应答:

  • 名称: ss.dou-bi.com

  • Addresses: 200:2:9f6a:794b::

  • 8.7.198.45

    我使用的是谷歌的 8.8.8.8 DNS,但是我得到的A记录 IP却是8.7.198.45,这个明显不是我的IP,看一下其他被DNS污染的域名就会发现都会有这个IP。

    所以很明显,我的 ss.dou-bi.com 域名受到了DNS污染。


解决方法

    使用加密代理,比如Shadowsocks,在加密代理里进行远程DNS解析,或者使用VPN上网。

    修改hosts文件,操作系统中Hosts文件的权限优先级高于DNS服务器,操作系统在访问某个域名时,会先检测HOSTS文件,然后再查询DNS服务器。

    可以在hosts添加受到污染的DNS地址来解决DNS污染和DNS劫持。


    通过一些软件编程处理,可以直接忽略返回结果是虚假IP地址的数据包,直接解决DNS污染的问题。

    如果你是Firefox用户,并且只用Firefox,又懒得折腾,直接打开Firefox的远程DNS解析就行了。在地址栏中输入:about:config

    找到 network.proxy.socks_remote_dns 一项改成true。

    使用DNSCrypt软件,此软件与使用的OpenDNS直接建立相对安全的TCP连接并加密请求数据,从而不会被污染。 对于被DNS污染的网站站长来说,最有效的方法就是 换域名或者IP 了。

标签: DNS污染