本文最后更新于 2019年9月28日 请注意相关内容可能已过时
·缘由
安装dnsmasq的缘由起因于gfw的dns投毒越来越严重了,虽然有教育网的dns可以勉强支撑着,但是我这里本地是电信。教育网的dns老是把一些大站的cdn节点解析到教育网的ip上面,而且的有时候解析到的ip根本连接不上。很是令人头痛。遂干脆自己搭了个dns自己用。
其实现在还是用dnsmasq的话,并不是最好的选择,因为现在gfw连非53端口也能投毒,还好dnsmasq的上游dns可以设置成多个。
其实我用dnsmasq的原因是因为我使用的路由器刷了个潘多拉,里面自带了dnsmasq,我直接设置成解析局域网的dns请求,然后全部转发到我的服务器上面解析。
我感觉比windows上面安装客户端方便一点。这里就记一记怎么折腾的。
最开始直接在我的vps安装dnsmasq以后,把端口改成了2323以后就直接填到路由器上面。
一开始还可以解析,用了两天发现解析不到数据了。
排查了好久的问题才发现是上游dns无法解析了。
因为我这里的服务器是国外的机器,所以部分有国内外CDN的网站都会解析到国外的IP上,而国内连接这些IP的速度都会很慢。导致这部分网站打开速度很慢。
所以我有指定这部分网站的上游dns为国内的运营商dns,这样解析到ip还是国内的。比如最简单的google.cn这个域名,国内解析到的ip是国内的ip,但是如果你在国外的话,解析出来的ip是国外的。(如图)
这是国外的IP解析出来的地址:
使用上游dns为国内运营商dns解析出来的地址:
但是据我实测,有部分国内dns也会在国外ip请求的时候返回国外的ip,例如114dns。
·安装dnsmasq
安装dnsmasq很简单。以我使用的centos7来说直接输入以下命令就可以了。
yum install dnsmasq -y
如果是ubuntu系统
apt-get install dnsmasq -y
·修改dnsmasq的配置文件
dnsmasq的配置文件位置在/etc/dnsmasq.conf
其配置文件我使用的很简单
port=2323
resolv-file=/etc/resolv.dnsmasq.conf
conf-dir=/etc/dnsmasq.d
cache-size=150
其中 port是端口可以随便修改,
resolv-file 指的是 dnsmasq的上游dns,也就是真正的dns,我这里指定的文件就是在etc目录下面的resolv.dnsmasq.conf
这个文件,我上游dns用的有两个,
nameserver 8.8.8.8
nameserver 1.0.0.1
conf-dir的含义是该文件夹下面的域名文件自定义的dns,在该文件夹下面新建一个任意的文件,后缀为conf,然后写入你要指定的域名及使用的dns即可。例如:
server=/google.cn/8.8.8.8
cache-size 指的是dns的缓存大小。一般150就够了。
安装修改完成后 重启一下dnsmasq
service dnsmasq restart
设置dnsmasq开机自启动
systemctl enable dnsmasq.service
·关于广告屏蔽
dnsmasq也可以对指定的域名进行解析,相当于就是本地hosts指向,可以利用这个功能实现广告屏蔽等效果。也是需要修改/etc/dnsmasq.conf
文件,DNSmasq也可以对域名进行泛解析,直接填写*.baidu.com这样的格式即可。
#将广告域名指向到127.0.0.1实现广告屏蔽
address=/ad.youku.com/127.0.0.1
address=/ad.iqiyi.com/127.0.0.1
#对baidu.com进行泛解析
address=/*.baidu.com/8.8.8.8
·配置国内域名使用国内dns解析
关于一部分在国内国外都有cdn的网站,在github上有个项目,记录了平时会使用到的网站。项目地址
可以使用该项目列表,下载里面的域名列表放在/etc/dnsmasq.d
目录下面,然后重启dnsmasq就可以了。
对了这个项目里面的dns是114,建议修改成国内运营商的dns,注意要先在vps上面测试下能不能解析。目前部分省的运营商dns现在屏蔽了来自国外的请求。