博主的网络环境比较差,这要感谢该死的宽带通呵呵呵
经查该运行商阻挡了境外udp的通信,导致原本想通过shadowsocks的udp隧道来进行加密DNS查询的方案失败
通过搜索我发现我们可以直接安装DNSCrypt来达到我们的目的,官方网站在https://dnscrypt.org/,DNSCrypt是OpenDNS发布的加密DNS工具,可加密DNS流量,阻止常见的DNS攻击,如重放攻击、观察攻击、时序攻击、中间人攻击和解析伪造攻击。DNSCrypt支持Openwrt,是防止DNS污染的绝佳工具!
我们可以使用opkg进行安装
opkg update opkg install dnscrypt-proxy
安装完成之后,我们使用下面命令启动dnscrypt-proxy并设置开机启动,5353端口将自动被监听。
/etc/init.d/dnscrypt-proxy start /etc/init.d/dnscrypt-proxy enable
然后我们可以在luci中配置Chinadns的上游服务器中加入127.0.0.1::5353,注意Chinadns的默认端口为5353,需要换一个(比如我设置为5354),或者你换dnscrypt-proxy的默认端口也可以,dnscrypt-proxy的配置文件在/etc/config。然后我们到【网络】–>【DHCP/DNS】,把DNS转发设置为127.0.0.1#5354,然后换到【HOSTS和解析文件】选项卡,把【忽略解析文件】给打开(默认配置为/tmp/resolv.conf.auto)
下面是配置的大概过程
我们可以测试dnscrypt-proxy的解析结果,首先使用天朝局域网,这里是我的上游服务器。
dig @192.168.199.1 www.youtube.com
; <<>> DiG 9.9.8-P3 <<>> @192.168.199.1 www.youtube.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15703 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4 ;; QUESTION SECTION: ;www.youtube.com. IN A ;; ANSWER SECTION: www.youtube.com. 18829 IN CNAME youtube-ui.l.google.com. youtube-ui.l.google.com. 600 IN CNAME youtube-ui-china.l.google.com. youtube-ui-china.l.google.com. 600 IN A 37.61.54.158 ;; AUTHORITY SECTION: google.com. 109949 IN NS ns2.google.com. google.com. 109949 IN NS ns3.google.com. google.com. 109949 IN NS ns1.google.com. google.com. 109949 IN NS ns4.google.com. ;; ADDITIONAL SECTION: ns1.google.com. 110089 IN A 216.239.32.10 ns2.google.com. 113947 IN A 216.239.34.10 ns3.google.com. 115317 IN A 216.239.36.10 ns4.google.com. 171663 IN A 216.239.38.10 ;; Query time: 4 msec ;; SERVER: 192.168.199.1#53(192.168.199.1) ;; WHEN: Wed Jun 22 15:51:18 HKT 2016 ;; MSG SIZE rcvd: 250
37.61.54.158,一个很明显的污染地址,看看下面这个庞大的列表orz
然后使用我们的dnscrypt-proxy
dig @127.0.0.1 www.youtube.com -p 5353
; <<>> DiG 9.9.8-P3 <<>> @127.0.0.1 www.youtube.com -p 5353 ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9816 ;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.youtube.com. IN A ;; ANSWER SECTION: www.youtube.com. 84137 IN CNAME youtube-ui.l.google.com. youtube-ui.l.google.com. 900 IN CNAME youtube-ui-china.l.google.com. youtube-ui-china.l.google.com. 180 IN A 173.194.72.101 youtube-ui-china.l.google.com. 180 IN A 173.194.72.139 youtube-ui-china.l.google.com. 180 IN A 173.194.72.113 youtube-ui-china.l.google.com. 180 IN A 173.194.72.100 youtube-ui-china.l.google.com. 180 IN A 173.194.72.102 youtube-ui-china.l.google.com. 180 IN A 173.194.72.138 ;; Query time: 277 msec ;; SERVER: 127.0.0.1#5353(127.0.0.1) ;; WHEN: Wed Jun 22 15:52:18 HKT 2016 ;; MSG SIZE rcvd: 205
这样就获取到正确的DNS了