利用dnsmasq自动翻墙及防dns劫持

首先dnsmasq是什么
它是一个dns缓存转发器,它先缓存一些dns记录,我们再用的时候就是直接访问路由里面的dns条目,而不会再去解析一次,节省了时间
比如说我们访问g.cn,因为最近这个域名会被先转到google.cn,再转到google.com.hk,所以每次解释域名就得等待10来秒,用dnsmasq之后这个时间就省了
当然第一次的时候还是要解析一次,以后就好了,缓存过多自动删掉一些就另当别论了
最近网上出现各种hosts,虽然可以直接放到电脑和手机里,但是用路由器更加方便一点
好谈翻墙的问题
将dd切换到服务界面,会看到dnsmasq下面有一个很空的地方让你填,这个就是今天最主要的地方了

address=/.youtube.com/203.208.46.30
address=/.ytimg.com/203.208.46.30
address=/.googlevideo.com/203.208.46.30
address=/.2mdn.net/203.208.46.30
将上面的复制进去就行了
在开浏览器试试上youtube就可以了
意思很简单address后面的域名会自动解析到后面的ip,类似于hosts 的效果
不过不用像hosts一样复制一长串,因为这个有点通配符的意思,*.youtube.com都是到203.208.46.30

我还尝试加ipv6的地址,可惜路由会挂掉,只能插网线,并且电脑配固定ip改回来
address=/.blogger.com/2001:4860:8006::bf
address=/.blogspot.com/2001:4860:8006::62
address=/.appspot.com/2001:4860:8006::8d
有兴趣的看可以尝试一下
照http://www.linuxidc.com/Linux/2011-03/33072.htm 看是支持这样写ipv6的,可能是dd里面的不支持

当然dnsmasq是支持hosts文件的,它会默认读取/etc/hosts文件
不过有一个问题重启后hosts文件就还原了,总不能一次次传吧
当然你可以把hosts文件传到网上去,然后用命令wget下来(可以到管理里面设为开机命令,cd /tmp wget http://xxx.xxx/host(放在tmp比较好))
对了dnsmasq可以指定hosts
addn-hosts=/tmp/dnsmasq.hosts
还是填在刚才的地方,那地方相当于在配置dnsmasq的配置文件linux上在/etc/dnsmasq.conf可惜dd上找不到在哪

一般情况下dns解析是从你的isp的dns服务器那缓存下来的,当然也可以改
设置#不读取/etc/resolv.conf文件
no-resolv
#不扫描/etc/resolv.conf和/etc/dnsmasq.conf文件的改动,如果有改动直接重启程序即可
no-poll
#设置dns服务器
server=8.8.8.8
server=8.8.8.4 #google的dns,你也可以使用opendns的server
这样以后就会从google的dns缓存

至于dns劫持,比较常见的一种情况就是输错网址然后跳动isp的广告页面如 http://nfdnserror8.wo.com.cn:8080/?HOST=fuck.U&R=/&
这种一般勉强还能接受,严重的如这里 http://www.cnbeta.com/articles/23851.htm
我这的会劫持一些它不想我访问的网站如google的一些服务
先获得这些地址的ip
然后还是刚才的地方
bogus-nxdomain=123.129.254.11
bogus-nxdomain=123.129.254.12
bogus-nxdomain=123.129.254.13
bogus-nxdomain=123.129.254.14
bogus-nxdomain=123.129.254.15
bogus-nxdomain=123.129.254.16
bogus-nxdomain=123.129.254.17
bogus-nxdomain=123.129.254.18
这些填进去,后面的ip换成你的可以有多个

更新:关于这个,这里还有 http://blog.kangkang.org/index.php/archives/141 跟我们没关系,上面已经实现了,这是openwrt的(其实也可以改配置文件)留着作为研究之用

前面有写server=8.8.8.8这里是全部的
也可以只让部分网站从自定义的dns解析
用server=/google.com/8.8.8.8
详见这里http://bbs.pku6.edu.cn/bbs/bbstc … p;threadid=12826958

参考资料,除了上面的还有
http://server.blog.163.com/blog/static/1076358201162424629295/

openwrt的配置文件在/etc/dnsmasq.conf直接改就行了