加速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工具

 

81 条评论

  1. aa65535 回复

    我在 openwrt-dist 提供的 dnsmasq 是可以通过 –min-cache-ttl 参数来修改 DNS 缓存的 TTL 的。
    另外控制缓存条数的 –cache-size 参数最大 10000 ,应该也是足够使用了。

    1. cokebar 文章作者 回复

      嗯 这个我也考虑了 之前你也给我说过 不过因为在服务器端用了pdnsd 所以路由器干脆也用了pdnsd

      1. tuzhis 回复

        感觉dns一级一级的反而变得慢了,刚试了楼上的OpenWrt’s Dnsmasq 感觉各种飞起。

        1. Nemo

          你是用的dnsmasq-full 修改版吧,我也试过修改版,完全不能用,不知道怎么回事,可能那里配置错误了,有空再折腾下,快崩溃啦,55555555555

    2. tuzhis 回复

      感谢大大的工具,很给力!

    3. Nemo 回复

      大侠能把这些东西都集成就成一个ipk,luci里面留下接口配置,省掉各个工具的组合配置,肯定能造福比现在多的多的人,看了github上的下载量,好少、

      1. cokebar 文章作者 回复

        做成一个ipk不合适。不过可以做成集成了这些软件的固件 直接刷就能用

        1. Nemo

          我乐意做这个集成的事情,只是我不太会,前几天编了一个,也不敢用,怕变砖,也不知道如何集成这些IPK,如果你愿意提供技术帮助,我乐意在自己的vps上跑这个编译:)

        2. cokebar 文章作者

          早些时候折腾过一点,只是一些简单集成,更复杂的我就不太懂了,可以参考这篇:https://cokebar.info/archives/90

      2. Toby 回复

        dnsmasq-full不可用 –min-cache-ttl 参数,应该是aa65535自己设置的参数;同理–ignore-address参数也是一样。-cache-size参数在dnsmasq-full中可用。

        1. Kobayashi

          dnsmasq-full和dnsmasq为同一作者,更新版本

  2. wangsmile 回复

    edns_query=on; 不是yes

  3. Remember 回复

    请问在第二项中高级设置的两项设置对应openwrt文件系统下哪里呢?用官方定制系统就是麻烦……

    1. cokebar 文章作者 回复

      首先你得确定你的定制版的系统也是用dnsmasq做dns解析的 如果是 那么在 /etc/dnsmasq.conf 里面 加入:
      no-resolv
      server=127.0.0.1#5353

    2. cokebar 文章作者 回复

      加完以后重启一下dnsmasq。同时确保网页配置页面你没有手动指定过DNS。

  4. Remember 回复

    请问这个配合《Shadowsocks + ChnRoute 实现 OpenWRT 路由器自动翻墙》,应该设置方案几呢?是设置方案一:114.114.114.114,127.0.0.1:5353吗?

  5. TwoBall 回复

    我把dns服务器端口改成5555之后就打不开网页了,不改保留53就可以,而且系统进程里没有pdnsd这一项,是不是没启动成功?

    1. cokebar 文章作者 回复

      检查配置 应该是启动失败

  6. 你好 回复

    opkg update
    opkg install pdnsd
    Unknown package ‘pdnsd’.
    Collected errors:
    * opkg_install_cmd: Cannot install package pdnsd.

    到底是哪个源?

  7. 请教 回复

    装了pdnsd, 然后路由没法启动了,ssh也进不去

  8. Song 回复

    问一下,若是我吧 pdnsd 自带的 server都删掉,仅保留你这组会有什么问题么?

  9. Nemo 回复

    两种方案都试过:
    1,shadowsocks+chinadns+系统dnsmasq+unbound
    2,shadowsocks+chinadns+pdnsd+unbound

    被强网站正常打开,国内的网站到慢了很多,是什么原因?怎么解决?是否可以在那个环节直接编辑一些常用的国内网站地址,不让dns解析走chinadns判断?

    1. cokebar 文章作者 回复

      更新chnroute

    2. cokebar 文章作者 回复

      同时参考“拾遗”

    3. cokebar 文章作者 回复

      ChinaDNS可能导致个别网站误判 但如果你是普遍现象 那么你需要检查你的国内DNS设置,非联通电信最好设置为ISP的DNA不要设置为公共DNS,其次定期更新chnroute。走没走代理不是通过快慢判断的

  10. Nemo 回复

    多谢解答,chnroute都是最新的,ISP的DNS和114的都试过了,依然国内网站打开慢。。。

    1. cokebar 文章作者 回复

      使用各类国内IP测试站点检测IP地址 多试几个 还有shadowsocks代理方式选择的是忽略列表么 shadowsocks和chinadns的chnroute文件都要更新 或者干脆指向同一个文件 定期更新

发表回复

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

请输入验证码 *