[撰文/hmy]

pdns-recursor 是一个 dns 解析器(recursor),是 debian 从 powerdns 里面单独编译出来的只做 dns 解析器应用的软件。

powerdns 本身是一个支持 mysql 数据库的 dns 服务器。

很多人应该都习惯了设置 isp 提供的 dns 服务器,然后忍受被劫持域名的搔扰,查不到内容就给你整到 114 页面(上海电信 dns),其实 linux 用户完全不必受这个气,自己装一个 dns 解析器就行了。优点是安全,不用受 dns 劫持,不用怕最新的 dns 安全漏洞,完全没有任何缺点。唯一的缺点可能就是多耗你几 M 内存而已。

再加上最近发现的 dns 协议漏洞,打过补丁的 bind 甚至还有问题,所以推荐用 pdns-recursor,powerdns 官方早就预防了这个问题。可以参考 powerdns 官方的文档。

pdns-recursor 跑起来以后,记的把 dns 地址改到 127.0.0.1,反正就是你监听到那个 ip,就修改你的 dns 到那个 ip。

使用 pppoe 联网一般会自动修改 dns,可以禁止自动修改 dns 就行。

更新

以 Ubuntu/Debian 为例,要安装 pdns-recursor,只需简单的执行下列命令即可:

sudo apt-get install pdns-recursor

注意,没有 pdns-recursor 的 Linux 发行版,可以安装 Bind 这个软件包。

然后在 /etc/resolv.conf 开头加一行:

nameserver 127.0.0.1

或者点 Ubuntu 桌面右上角网络图标,选“手动配置 → 解锁 → DNS”添 127.0.0.1。

[感谢雪梨朋友补充]

版权声明: 允许非商业性转载,但转载时必须标明作者及原文链接.
本文网址: http://linuxtoy.org/archives/pdns-recursor.html

Tags: DNS, pdns-recursor

16 Comments
  1. 1 这家伙是谁 Commented @ 2008-08-23 7:09 pm

    听起来不错,但没接触过,能写个稍微详细一点的教程吗?

  2. 2 随风 Commented @ 2008-08-23 7:16 pm

    写得思路很乱。
    要实现不被dns劫持,得找一个安全一点的opendns。
    opendns就不错。
    可以用dns缓存类软件指向opendns。
    要不就像这类的dns软件,指向安全点的dns,或者dns root。

  3. 3 hmy Commented @ 2008-08-23 7:30 pm

    @这家伙是谁
    在debian上直接apt-get install pdns-recursor ,服务默认就启动了,然后修改dns地址到127.0.0.1就行了
    @随风
    这个和你找一个安全的opendns是一个意思,相当于你自己假设了一个"opendns"
    而且dns服务器在本机运行,会减少一些解析域名的时候的网络延迟。提高访问速度。

    ps:dns本身是一个很基础很重要的服务,涉及的概念很多,所以要完全说明白很难,所以写的有点乱,这个文章主要的意思就是:“运行自己的dns解析器,不使用isp提供的服务器,增加安全性和解析速度"

  4. 4 TTG Commented @ 2008-08-23 7:42 pm

    听上去不错,等ubuntu也出。

  5. 5 hmy Commented @ 2008-08-23 7:51 pm

    @TTG ubuntu或许已经有了,毕竟ubuntu是基于debian的软件仓库

    其实也可以直接装bind这个软件实现同样的功能。
    总之就是不使用isp提供的dns服务器

  6. 6 hmy Commented @ 2008-08-23 8:34 pm

    装好以后,可以用下面任意一个命令来检测dns是否工作正常。
    1. dig @127.0.0.1 http://www.g.cn

    2. host http://www.g.cn 127.0.0.1

    3. nslookup http://www.g.cn 127.0.0.1

  7. 7 konit Commented @ 2008-08-23 8:47 pm

    想問一下,本地建DNS服務器,DNS數據庫會大概占用多少硬盤空間?

  8. 8 hmy Commented @ 2008-08-23 8:53 pm

    @konit
    这个只是一个dns 解析器,或者说cache dns, 它主要的工作是去”权威“dns服务器查询结果,缓存在本地内存,把结果返回给dns查询的发起程序。
    所以不占用磁盘空间。只耗费很少的一点内存而已。

  9. 9 pythonikkat Commented @ 2008-08-23 9:13 pm

    hmy,能不能简单讲一下如何配置和使用?

  10. 10 雪梨 Commented @ 2008-08-23 9:37 pm

    toy 编辑下这篇文章好了。

    楼上的,
    Ubuntu/Debian 里直接 sudo apt-get install pdns-recursor 就可以了。

    然后在 /etc/resolv.conf 开头加一行
    nameserver 127.0.0.1
    或者点 ubuntu 桌面右上角网络图标,选 手动配置,解锁,DNS,
    添 127.0.0.1

  11. 11 hmy Commented @ 2008-08-23 9:51 pm

    简单说来按以下三步就行了,
    1.有pdns-recursor 的linux发行版推荐安装pdns-recursor,
    没有pdns-recursor的linux发行版可以安装bind这个软件包(默认情况配置下应该就是一个cache dns server了)

    2.装好软件包后一般都是自动把服务起来了的,可以用我上面提到的命令检测,或者是用netstat| -natu|grep 53查询一下53端口是否在监听.

    3.最后一步就是修改你的系统的dns服务器地址为本地dns的地址,一般设置成127.0.0.1就行。

  12. 12 pythonikkat Commented @ 2008-08-23 10:05 pm

    谢 谢雪梨和hmy。我用networkmanager,一重启会自动修改/etc/resolv.conf。另外,hmy,是不是可以详细解释一下“一般都 是自动把服务起来了的,可以用我上面提到的命令检测,或者是用netstat -natu|grep 53查询一下53端口是否在监听.“我的结果是

    $ netstat -natu |grep 53
    tcp 0 0 128.253.122.107:42170 202.101.189.122:80 ESTABLISHED
    udp 0 0 0.0.0.0:5353 0.0.0.0:*

  13. 13 hmy Commented @ 2008-08-23 10:09 pm

    你这个输出结果并没有dns服务器在运行,看看我的输出结果吧
    com2:/home/hmy# netstat -natu|grep 53
    tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN
    udp 0 0 0.0.0.0:53 0.0.0.0:*
    另外networkmanager应该可以设置成不自动修改dns地址。

  14. 14 雪梨 Commented @ 2008-08-23 10:42 pm

    @pythonikkat
    NetworkManager 就是上边说的:

    点 ubuntu 桌面右上角网络图标,选 手动配置,解锁,DNS,
    添加 127.0.0.1

  15. 15 随风 Commented @ 2008-08-24 12:13 am

    另外一种方案
    pdnsd(其它的dns缓存软件也可以,没必要搞个大块头bind来做缓存)
    指向opendns 现在默认配置里有opendns节,取消注解就行了。
    或者dns根服务器。
    pdnsd --- dns缓存器。

  16. 16 hmy Commented @ 2008-08-24 8:00 am

    用pdnsd 指向根dns服务器也是不不错的方法。
    ps: bind其实块头不大

    有时间我发布一个用puppet来配置上面提到的那些内容的puppet配置文件。