加速OpenWRT路由器的DNS解析 – pdnsd代替dnsmasq

注:新版dnsmasq已经可以手动设置min-ttl和cache-size,使用pdnsd替代dnsmasq已经无太大意义;dnsmasq设置方法,在 /etc/dnsmasq.conf 中加入:


此篇文章说明使用缓存功能更加强大的pdnsd来代替openwrt自带的dnsmasq完成dns解析功能,从而改善解析速度的方法。本篇内容和科学上网没有直接关系!

OpenWRT默认使用dnsmasq提供DHCP/DNS服务,通常情况下够用。但在某些特殊情况下,DNS查询延迟较大,dnsmasq对于DNS记录的缓存时间、还有缓存文件大小都比较受限,一条记录可能没多久就被清除出缓冲区,失效了。这时我们就希望有一个缓存功能更强的DNS软件,可以手动改大TTL、增大缓存文件大小。这时就可以用pdnsd。你可以配置它,让TTL超期的记录也不被自动清除、可以提高TTL的最小值等等。同时也有完整的可用性检查,你可以配置对DNS服务器的可用性检查,如果一组DNS服务器不可用,可以做故障切换,切至你添加的另一组DNS(比如说你用你的VPS做解析,VPS挂掉了,这时自动切到114DNS或者Google DNS等)。


一、安装

可以直接在Luci界面中,切至软件包配置页面,刷新列表后,键入pdnsd点击安装即可。

也可以使用SSH安装。CC15.05开始,官方源中不再包含pdnsd,请自行到官网的BB14.07版本下对应packages\oldpackages目录下下载对应的pdnsd包手动安装。

二、配置

配置/etc/pdnsd.conf,文件配置分为数个区域,主要修改global区域和server区域,其他区域保留默认值即可。具体的配置文件详情请查阅官方文档:pdnsd Documents

如果不用到其他的server,请确保文件其他的server{}被删除掉或者注释掉

最后,把dnsmasq的dns服务端口改成别的,把53留给pdnsd,反正不是53而且不和其他程序冲突就行了,可以在Luci里面修改(你也可以改/etc/dnsmasq.conf):

dnsmasq_change_dns_port

为了避免改了dnsmasq的dns服务端口后,连接路由器设备无法正常从dhcp服务获取dns服务器地址,还要一步额外的配置,在luci中点击“接口”,然后点击LAN口右边的修改,下方的DHCP服务器中,切至高级设置,在

dhcp

三、启动

给pdnsd设置开机启动:

也可以在Luci的启动项配置页面找到pdnsd,将开机自动从禁用改成启用

最后,重启一下路由,应该就好了。

PS:如果出现问题,排查DNS问题推荐使用DIG工具:为Windows添加DIG等DNS工具

 

78 条评论

  1. 引用: 玩转 Shadowsocks | Archnotes

  2. 回复

    opkg update
    opkg install pdnsd
    “unknown package ‘pdnsd’
    安装错误,好像没有包啊!

    1. cokebar 文章作者 回复

      1、确保opkg update下载package列表成功。(return值出现非0为失败)
      2、确保配置的源中有相应的包

    2. wiloon 回复

      15.05.1里面没有pdnsd了,可以到14.07里下载ipk.

  3. 张明 回复

    在路由器用了pdnsd做dns,老出现DNS_PROBE_FINISHED_NXDOMAIN
    多刷新几次又可以,下次打开又会出现这个请, 请问在吗解决?

    1. H₂ (@A_Unique_Pig) 回复

      这种问题一般是DNS查询超时了,或许是你网络不好造成丢包。可以把ttl设置久一些,直接从缓存拿结果就快多了。副作用是缓存的DNS查询结果不是最新的,如果网站的IP正好换了,就上不去了。要么等ttl时间到重新发起查询,要么清除缓存

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请输入正确的验证码