Ubuntu使用dnsmasq作本地DNS缓存

Posted o微凉o

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu使用dnsmasq作本地DNS缓存相关的知识,希望对你有一定的参考价值。

Dnsmasq是一个很实用的小工具,解决局域网的需求看来非常合适,特别是网关和防火墙上。
它同时也可以作为一个dns查询服务器,虽然不如bind等完善,但基本功能也够用了。
它可以提供如下几个实用的功能:

1 提供dns服务

2 优先使用本地自定义dns

3 提供dhcp服务

安装 dnsmasq加速网络访问速度

sudo apt-get install dnsmasq

配置 dnsmasq

修改/etc/resolv.conf文件。

sudo gedit /etc/resolv.conf   

将原有的内容全部注释,然后在第一行写上

nameserver 127.0.0.1

也可以使用ubuntu的网络管理小程序“Network Manager”在桌面右上角有一个它的图标,右键点击该图标,选择“编辑连接”,选择你所使用的连接,点击编辑,在“IPv4设置”标签的“DNS服务器”输入框中,把原有的DNS服务器删除,输入 127.0.0.1

在/etc目录下新建resolv.dnsmasq文件。 文件的内容为DNS服务器的地址,是真正的DNS服务器,如我的文件内容是:

nameserver 199.91.73.222  
nameserver 42.120.21.30  
nameserver 8.8.8.8  

可以不按帮助文档所说的执行“dnsmasq-r/etc/resolv.dnsmasq”命令,如果这样,岂不是每次都得在命令行里输入,非常麻烦,当然,可以考虑把这个命令写入“/etc/rc.local”文件中,让系统每次启动时帮你运行。 我所使用的方法是编辑“/etc/dnsmasq.conf”文件。

sudo gedit /etc/dnsmasq.conf

找到下面这一项 resolv-file=

用下面的一条语句替换 resolv-file=/etc/resolv.dnsmasq

其实也就是执行dnsmasq命令中-r参数后面的内容。

编辑 /etc/dhcp3/dhclient.conf

sudo gedit /etc/dhcp3/dhclient.conf 

找到下面这一项 #prepend domain-name-servers 127.0.0.1将前面的“#”删除。这么做的目的是为了在使用自动连接时,能在/etc/resolv.conf文件的第一行添加上“nameserver 127.0.0.1”,这样,dns缓存依然有效。

编辑 /etc/ppp/peers/dsl-provider

sudo gedit /etc/ppp/peers/dsl-provider 

可能有的系统没有“/etc/ppp/peers/dsl-provider”文件,而是“/etc/ppp/peers/provider”文件,找到下面这一项 usepeerdns 在前面增加“#”,也就是把这条语句注释掉,以防resolv.conf的设置被pppoe复盖。

对于12.04版本
由于该版本已经安装dnsmasq-base,则必须先修改/etc/NetworkManager/NetworkManager.conf文件

sudo gedti /etc/NetworkManager/NetworkManager.conf  

找到dns=dnsmasq,在前面增加“#”,也就是把这句注释掉。

sudo gedit /etc/default/dnsmasq

找到IGNORE_RESOLVCONF=yes,这一条要删除注释,删掉#号。

重启服务:

sudo /etc/init.d/dnsmasq restart

或者

sudo service dnsmasq restart

测试结果:

随便找一个网址,测试两次就能看出查询时间的差异:

dig google.com

两次返回结果的时间不一样,第二次一般是0ms;多试几个网址,证明成功了。

最后,留下自己的dnsmasq.conf设置备份。

listen-address=127.0.0.1
strict-order
#no-hosts
#no-poll
resolv-file=/etc/resolv.dnsmasq.conf

#反电信劫持-114导航
bogus-nxdomain=218.30.64.194
#bogus-nxdomain=67.215.66.132
# Set the cachesize here.
cache-size=2048

#国内指定DNS
server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/taobaocdn.com/114.114.114.114
server=/tbcache.com/114.114.114.114
server=/tdimg.com/114.114.114.114
server=/weibo.com/114.114.114.114
server=/weibo.cn/114.114.114.114
server=/xunlei.com/114.114.114.114  
    
#国外指定DNS
server=/google.com/42.120.21.30
server=/twitter.com/42.120.21.30
server=/facebook.com/42.120.21.30  
    
#host区段
#本机
address=/tp.set/192.168.2.1
address=/dx.set/192.168.1.1
      
#其他
address=/t66y.com/184.154.128.246
#address=/github.com/192.30.252.131

 

以上是关于Ubuntu使用dnsmasq作本地DNS缓存的主要内容,如果未能解决你的问题,请参考以下文章

当主机使用dnsmasq并且Google的DNS服务器被防火墙时,DNS无法在docker容器中工作?

centos7配置dnsmasq

linux下清理dns 缓存

使用Dnsmasq搭建本地dns服务器上网

6DNS之缓存dnsmasq

树莓派安装DNSMASQ服务