服务器使用 pdnsd 部署 DNS forwarder 的方法

Assume that you use Ubuntu.

Download & Install pdnsd:

At the setup configuration step, choose manual. Then modify the config file: /etc/pdnsd.conf

At the global section, change server_ip, add server_port, increase or decrease the perm_cache, change min_ttl & max_ttl at your own need, just like:

Then add the upstream DNS server, just like:

Comment out the unnecessary sections, such as root-servers & resolvconf:

Here’s an example for pdnsd.conf

To see more details of pdnsd, just look at pdnsd Documents

Modify the file /etc/default/pdnsd, change START_DAEMON=no to START_DAEMON=yes and save the file. Finally start pdnsd:

Add firewall rule if neccessary (Assume that you use UFW):
Check it on your PC:

88 条评论

  1. 韩少西 回复

    service pdnsd restart
    * Stopping pdnsd [ OK ]
    /etc/resolvconf/update.d/libc: Warning: /etc/resolv.conf is not a symbolic link to /run/resolvconf/resolv.conf
    * Starting pdnsd [ OK ]
    /etc/resolvconf/update.d/libc: Warning: /etc/resolv.conf is not a symbolic link to /run/resolvconf/resolv.conf

    pdnsd可以正常使用,可是这两条警告好碍眼啊,删了也还有。怎么能去掉呢?

    1. cokebar 文章作者 回复

      结论先写在上面:不想麻烦的话,无视它吧,因为没有任何影响。原因如下:
      系统的DNS信息是由/etc/resolv.conf来配置的,有些VPS提供商会将DNS的信息直接写到/etc/resolv.conf里面,不过这样的问题是DNS配置就是完全的静态了,对于完全属于静态IP静态DNS的VPS来说这样没有问题,不过对于普通用户来说这样会有问题,换个网络你就得改文件太蛋疼了,于是有了下面这种方式:
      resolvconf这个程序(注意不是resolv.conf文件)会在运行时获取系统的DNS信息(比如说你通过eth0接入网络,DHCP方式,此时resolvconf就会读取从DHCP获取的DNS信息),放在/run/resolvconf/resolv.conf里面,我们都知道/run里面的都是运行时临时程序生成的,所以就是动态的信息了,然后/etc/resolv.conf则是/run/resolvconf/resolv.conf的一个符号连接,这样,resolvconf更新DNS信息后,就能及时反映到/etc/resolv.conf里面了;
      pdnsd之所以出现这样的警告,就是因为/etc/resolv.conf是个静态文件而不是符号连接;不过由于本文搭建pdnsd是用作DNS转发,而且手动指定了upstream server,并不使用resolveconf(那一section被我注释掉了),所以这个warning即使出现也不会对你造成任何影响;而如果想要去掉这个warning,你就得手动为这个文件建立符号连接,此时还会有额外的操作(不同VPS提供商,情况还有不同),然后你会发现好麻烦。。还不如无视了算了

      1. 韩少西 回复

        谢谢啦,看来我只有无视了,linode 用ubuntu 14.10的时候没有遇见,换成14.04就出现这个警告了,不知道跟系统有没有关系,反正我用的很好,无视好了,感谢!

  2. 引用: Shadowsocks + GfwList 实现 OpenWRT 路由器自动翻墙 - 飞羽博客

  3. 引用: Shadowsocks + Redsocks 实现 OpenWRT 路由器自动翻墙

  4. dover 回复

    报错了。。。。

    root@default:~# service pdnsd start
    Starting pdnsdError in config file (line 36): invalid option for server section: edns_query
    failed!

    1. cokebar 文章作者 回复

      我打错了 应该是edns_query=on;

      1. dover 回复

        改了on了,还是报同样的错呢?

    2. cokebar 文章作者 回复

      检查pdnsd版本 edns在1.2.9才加进去

      1. dover 回复

        请问如何查看版本?

    1. cokebar 文章作者 回复

      先在VPS上试dig 再到PC上试 记得防火墙开端口

      1. dover 回复

        请问下,如何安装最新版,我现在装的是1.2.8,是直接用apt-get install pdnsd安装的

        1. dover

          装了UFW,并且也执行了ufw allow 5300

          dig 但仍然报 ;; connection timed out; no servers could be reached

          在VPS的dig的结果是;; SERVER: 127.0.0.2#5300(127.0.0.2)

          127.0.0.2是怎么个情况呢?

      2. dover 回复

        请问是不是必须安装UFW?

        1. cokebar 文章作者

          不是必须 但是如果你防火墙规则阻止了端口通讯 就需要开端口

        2. dover

          装了UFW,并且也执行了ufw allow 5300
          dig 但仍然报 ;; connection timed out; no servers could be reached
          在VPS的dig的结果是;; SERVER: 127.0.0.2#5300(127.0.0.2)
          127.0.0.2是怎么个情况呢?

    2. cokebar 文章作者 回复

      server_ip=0.0.0 0

      1. lee 回复

        上周按你教程搞了很久,本地机dig都是 connection timed out; no servers could be reached
        你这个回复太好了,一改立即好了。。。

        1. cokebar 文章作者

          所以说不能照搬啊 我那个写的是eth0 有些主机的外网网卡可不一定是eth0

  5. lee 回复

    目前已按本博客教程在路由做了透明翻
    pdnsd也成功了

    当在外时(无法用已翻路由时)可否连接这个dns服务器做域名解板避免dns污染
    目前在外是osx用的是dnscrypt

    1. cokebar 文章作者 回复

      支持非标端口的dns client应该都可以

  6. 引用: openwrt路由器配置+SS+SAMBA+迅雷远程 | yfeer's blog

  7. 袁皓 回复

    pdnsd监听的端口为什么是非53呢?如果不设定具体端口,也就是把server_port这段去掉会有什么影响?因为我没有设定端口也成功搞定了……

    1. cokebar 文章作者 回复

      server_port不写就是默认53 53除了可能会遭受GFW的抢答污染外 还可能遭遇攻击

  8. gang 回复

    之前按教程用dnsmasq在vps做dns转发,但是openwrt路由器的dns很不稳定,并且导致vps自己的dns也乱了,什么地址都不能解析,就把dnsmasq关了,重新安装配置pdnsd,目前看来openwrt的dns很稳定,而vps的dns也正常了

  9. wx 回复

    请教Centos 6 怎么安装pdnsd?

    1. cokebar 文章作者 回复

      从源码编译安装不就行了

      1. wx 回复

        不是太熟悉啊。

        rpm -ivh pdnsd-1.2.9a-par.src.rpm 然后就不会了。

        到/root/rpmbuild/SOURCES/pdnsd-1.2.9a 下面执行什么configure 、 make &&make install一通,好像没编译成功。。。。

      2. wx 回复

        我搞好了。原来我的CENTOS6 应该要安装64位版 。。。。。

发表回复

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

请输入验证码 *