Pages

Thursday, 20 September 2012

用dnsmasque处理DNS污染问题


既然 DNS 污染是通过本地 DNS 服务器向上级 DNS 服务器请求域名解析时通过旁路系统抢先返回错误 IP 来污染本地 DNS 缓存的,是否可以通过向监听在非标准端口并且未受污染的 DNS 服务器来请求解析呢?
正常的 DNS 服务器不可能会监听在非标准端口上,一般的客户端系统也无法设置 DNS 服务器的端口。那么只有在可信的环境下通过 dnsmasq 自建监听在非标准端口的转发 DNS 服务器,并且在本地通过 dnsmasq 的 –server=/domain/server#port 参数来让受污染的域名解析请求转发到指定服务器,才能获得正确的 IP。
具体做法很简单,在境外的 VPS 上安装 dnsmasq,修改 /etc/dnsmasq.conf,增加一行
--port=xxxx
这里的 xxxx 可以是出了 53 以外的任意数字 (当然是在可用的端口范围之内,也不能跟 VPS 上已经使用的端口冲突),保存后重启 dnsmasq 服务。
在本地的 dnsmasq 中增加 –server=/encrypted.google.com/IP#PORT 参数,如果跟我一样使用 OpenWRT 做路由的,可以修改 /etc/config/dhcp 文件,增加如下一行
list server '/encrypted.google.com/IP#PORT'
这里的 IP 跟 PORT 换成上面的 VPS 上 dnsmasq 监听的 IP 跟端口,重启本地的 dnsmasq 服务。
最后清理一下本地的 DNS 缓存,可以右键点击本地连接,选择修复。或者在命令行提示符中输入命令
ipconfig/flushdns
OK,用浏览器访问 https://encrypted.google.com 吧.