用pdnsd实现DNS解析加速

你是不是一直受到DNS服务器查询速度太慢的困扰?本文推荐Linux下一款名叫pdnsd的软件,解决这个问题。相比bind和dnsmasq,pdnsd有一个优点:重启后仍然能记得之前缓存的条目。这对家庭用的计算机来说非常重要,因为不像服务器那样7×24小时开机,所以一旦关机重开后还需要重新创建缓存的话,加速效果会非常有限。

一、安装
依然使用我最爱的Archlinux为例。pdnsd在community源里,直接安装即可:

pacman -S pdnsd

二、配置
pdnsd附带了一个配置文件示例,直接拷贝一份后,按自己的情况进行修改:

cp /etc/pdnsd.conf.sample /etc/pdnsd.conf

注意修改配置文件的时候别忘了加行末的分号,那是不可省略的。
其中有几项需要按如下修改以提高DNS查询效率:

neg_rrs_pol=on;
par_queries=1;

proxy_only=on;
purge_cache=off;

#可选,把A记录的ttl最小设为1天
#对一些ttl值低的大网站有用(低ttl用于负载均衡)
min_ttl=1d;

pdnsd默认的DNS服务器是OpenDNS(208.67.222.222/208.67.220.220),而据说用OpenDNS访问google有时候会出现反应慢的问题,所以建议直接换成google的DNS服务器:8.8.8.8和8.8.4.4。

接着,修改你的/etc/resolve.conf(或resolve.conf.head),将已有的nameserver信息清空,只留下面这一行:

nameserver 127.0.0.1

为防止resolve.conf被其他程序意外修改,可以加上sticky属性:

chattr +i /etc/resolve.conf

三、测试
启动pdnsd服务,然后测试一下可用性:

systemctl start pdnsd
nslookup www.google.com 127.0.0.1

如果正常返回,则说明pdns配置成功。现在可以将pdnsd设为开机启动项了:

systemctl enable pdnsd

至此,一个本机DNS服务器搭建完成。

注意本文只解决了DNS查询速度问题,并不能解决DNS污染等问题。DNS污染可以通过专门的软件或将本地DNS配置成以TCP方式从远端DNS服务器取得查询结果,然后以UDP方式响应本机查询请求的方式解决。pdnsd有一个专门的配置项目:

query_method=tcp_only;

本文为悠然居(https://wordpress.youran.me/)的原创文章,转载请注明出处!

Leave a Reply

Your email address will not be published. Required fields are marked *