2015年2月8日星期日

dnsmasq + unbound 解决dns污染

虽然PC上的chrome和firefox可以支持远程dns解析,但移动设备在这方面就比较薄弱了。
在设备上解决dns污染问题相对来说比较困难,每台设备都要处理也很麻烦。那么就只能在路由器上解决了。

目前的路由器只要不是死的,基本上都能适用。需要解决office的dns污染也很合适。
总体思路:
DHCP为所有设备正常分配连接信息。DNS自然被配置为路由器本身。
路由器安装dnsmasq,配置常用被污染域名的解析服务器到unbound服务器。
unbound服务器配置为通过tcp方式连接正常dns服务器。大幅减少被污染的情况。

配置:
1 路由器上的dnsmasq
会来看这个内容的读者应该手里都会有个dd-wrt或者open-wrt吧。这个应该就不是什么问题了。以为目前的版本基本已经自带。
2 unbound服务器
可以考虑安装在路由器上,但这样一来,unbound就不能使用正常的53号端口,有时也比较麻烦。这里,使用另外一台机器来搭建。笔者使用NAS来安装unbound。因为使用了修改版debain, 于是乎apt-get install unbound就解决问题了。
3 配置dnsmasq
dnsmasq的配置方法网上实在是太多了,这里不再赘述。但提供目前使用的配置文件内容:

server=/twitter.com/192.168.1.66
server=/twimg.com/192.168.1.66
server=/ytimg.com/192.168.1.66
server=/google.com/192.168.1.66
server=/gmail.com/192.168.1.66
server=/feedly.com/192.168.1.66
server=/gstatic.com/192.168.1.66
server=/googleusercontent.com/192.168.1.66
server=/googlecode.com/192.168.1.66
server=/blogger.com/192.168.1.66
server=/blogspot.com/192.168.1.66
server=/appspot.com/192.168.1.66
server=/youtube.com/192.168.1.66

以后应该还会更新,有需要的话,可以没事回来看看。
192.168.1.66是安装了unbound的服务器ip。
重启dnsmasq。

4 配置unbound
配置文件内容:

server:
    # The following line will configure unbound to perform cryptographic
    # DNSSEC validation using the root trust anchor.
    auto-trust-anchor-file: "/var/lib/unbound/root.key"
    interface: 0.0.0.0
    access-control: 0.0.0.0/0 allow

# 启用TCP模式
tcp-upstream: yes
# 设置转发的DNS服务器
forward-zone:
        name: "."
        forward-addr: 8.8.8.8
        forward-addr: 8.8.4.4
        forward-first: no

重启unbound。

至此,配置完成。