由于众所周知的原因, 某些域名遭受着持续的DNS 缓存投毒攻击, 通过UDP 协议进行DNS 查询时, 会收到来自旁路的干扰结果, 而通过TCP 进行DNS 查询则不会, 原理详见此文: < 为何我们不能正常使用Google加密搜索> .


< 不Google,毋宁死 – 实时生成的Google hosts文件> 一文中我给出了一个实时生成的hosts 文件用于防止DNS 缓存投毒攻击, 但是hosts 有比较大的局限性.


现在我找到了另一个解决方案: 在本地开设DNS 代理服务器. 本地DNS 服务器与上游DNS 服务器之间通过TCP 协议进行查询, 将结果通过UDP 协议返回给本机客户端, 这样就不会被旁路干扰.

使用方法:

1. 安装好python 后打开Tcp-DNS-proxy , 下载tcpdns.py 运行;

2. 在命令行下运行 netstat -an 检查是否存在 UDP 127.0.0.1:53 结果

3. 修改网络设置, 将DNS 服务器改成 127.0.0.1

4. 在命令行下运行nslookup www.Twitter.com , 应该能得到正确的结果

服务器: UnKnown

Address: 127.0.0.1


非权威应答:

名称: Twitter.com

Addresses: 199.59.149.230

199.59.150.7

199.59.148.82

Aliases: www.twitter.com


注. 如果Windows 用户不想 安装python, 可以下载我打包好的exe 程序包, 运行tcpdns.exe


来源http://opengg.me/815/tcp-dns-proxy-avoid-dns-poisoning/






via iGFW http://igfw.net/archives/10721

用本地DNS 代理防止DNS 缓存投毒攻击

Posted on

2012年7月26日星期四

Category