OpenWrt配置DNSCrypt防止DNS污染

Google和OpenDNS提供的DNS服务器地址经常被屏蔽或者恶意修改,所以有必要启用DNSCrypt了。

DNSCrypt是OpenDNS发布的加密DNS工具,可加密DNS流量,阻止常见的DNS攻击,如重放攻击、观察攻击、时序攻击、中间人攻击和解析伪造攻击。DNSCrypt支持Mac OS和Windows,是防止DNS污染的绝佳工具。

有人把DNSCrypt移植到了OpenWrt上面,称为dnscrypt-proxy-openwrt,下面是在OpenWrt上安装和配置的方法:

1、安装DNSCrypt,对于ar71xx平台,black-roland维护了一个第三方的软件包,在/etc/opkg.conf文件中添加OpenWrt对应版本的源:

     wget http://exopenwrt.and.in.net/trunk/ar71xx/packages/exOpenWrt/libsodium_0.7.0-1.E_ar71xx.ipk
     wget http://exopenwrt.and.in.net/trunk/ar71xx/packages/exOpenWrt/dnscrypt-proxy_1.4.0-5.E_ar71xx.ipk
     opkg install libsodium_0.7.0-1.E_ar71xx.ipk dnscrypt-proxy_1.4.0-5.E_ar71xx.ipk

2、配置DNSCrypt,DNSCrypt默认监听127.0.0.1:2053,可以通过/etc/config/dnscrypt-proxy文件进行配置。

    config dnscrypt-proxy
            option address '127.0.0.1'
            option port    '2053'
          # option resolver        'opendns'
          # option resolvers_list  '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv'

resolver默认是opendns,可以改成其他的public DNSCrypt resolvers。

然后设置开机启动DNSCrypt:

    /etc/init.d/dnscrypt-proxy enable
    /etc/init.d/dnscrypt-proxy start

由于DNSCrypt可能会在网络接口完全连接之后启动,所以有可能会失败,所以最好在/etc/rc.local里面添加:

    sleep 10
    /etc/init.d/dnscrypt-proxy start

3、配置dnsmasq,由于使用DNSCrypt查询DNS会比较慢,所以不想所有域名都通过DNSCrypt来解析,而是针对被污染的域名使用DNSCrypt,这样速度会快一些,可以编辑/etc/dnsmasq.conf,将需要走DNSCrypt的域名添加上:

    server=/twitter.com/127.0.0.1#2053
    server=/google.com/127.0.0.1#2053
    server=/youtube.com/127.0.0.1#2053
    server=/facebook.com/127.0.0.1#2053
    ......

配置完之后重启dnsmasq,就可以试试看效果了:

    root@OpenWrt:~# nslookup twitter.com
    Server:    127.0.0.1
    Address 1: 127.0.0.1 localhost
    Name:      twitter.com
    Address 1: 199.59.148.82 r-199-59-148-82.twttr.com
    Address 2: 199.59.148.10 r-199-59-148-10.twttr.com
    Address 3: 199.59.150.7 r-199-59-150-7.twttr.com
    Address 4: 199.59.149.198 www2.twitter.com

关于Zeno Chen

本人涉及的领域较多,杂而不精 程序设计语言: Perl, Java, PHP, Python; 数据库系统: MySQL,Oracle; 偶尔做做电路板的开发,主攻STM32单片机
此条目发表在Linux分类目录。将固定链接加入收藏夹。