djbdns vs bind [关闭]


20

我是一个新手,想学习如何设置DNS名称服务器。我应该使用djbdns,BIND还是其他?

当前的网络要求包括子域支持,SSL和邮件服务,所有这些都需要非常少的流量。我想要一种有朝一日可以扩展到更大流量和更棘手的需求(例如负载平衡)的解决方案。此时,我将在Linux上运行。

我已经了解到,如果未正确配置BIND,则会遇到安全问题,并且其配置可能会很棘手。我还阅读了djbdns,它更易于配置,更安全,并且与重负载相等。djbdns的论点似乎是合理的,但我没有专业知识来正确评估它们。如果BIND更好,那么我很乐意讨论有关djbdns的声明。

谢谢。


权威服务还是递归服务?
bortzmeyer

我认为是权威的。
chernevik

Answers:


14

我过去曾与djbdns合作,目前运行一堆BIND服务器。

djbdns的最大问题最好是将我的一年级老师放在我的成绩单上的方式:“不能与其他人一起玩”。它根本不会像unix盒上的其他任何东西那样以很小的方式表现出来,以后可能会咬你。它对区域文件使用一种语法,您在其他任何地方都看不到。

djbdns的最大优点是它是从头开始设计的,以安全性为目标#1。

如果您要设置DNS服务器,将其公开到Internet,然后再也不进行维护,那么djbdns将是您的理想之选。

在现实世界中,大多数管理员最好使用OS供应商提供的BIND软件包,并在有更新时立即对其进行修补。但是,以chroot方式运行它是一个好主意,并且将权威DNS服务器与递归解析器DNS服务器分开是一个好主意。

如果您找到有关DNS的文档,则将包含BIND,并且不太可能包含djbdns。如果使用dig,则可以将返回的格式粘贴到BIND区域文件中并工作。它的行为就像任何普通的unix守护进程一样,而不是其他星球的守护进程。

我们使用一些硬件负载平衡器,并对递归解析器BIND服务器进行负载平衡。效果很好。只要确保用户将请求发送到时获得相同的源IP,并且任何支持UDP和TCP的负载平衡设置都应该起作用。如果您使用的是权威DNS,则负载平衡就像拥有多台服务器并将所有服务器发布在whois信息中一样简单。其他DNS服务器将智能地平衡负载。


2
我喜欢认为djdns不起作用,这是您的错,如果起作用,则是DJ。
戴夫·切尼

2
整个讨论是有帮助的,单挑一个答案似乎对其他答案有些不公平。这与我自己得出的结论最接近:无论技术上的差异如何,BIND都会得到文档和社区的更好支持。另一个答案指出,了解似乎可以简化将来的DNS交互。这些优点似乎比djbdns在简化配置方面提供的任何好处更为重要。
chernevik

9

要获得权威服务,请使用nsd

对于递归的,unbound

两者都很小(因此可能等待发现的安全漏洞更少),正在积极维护并支持所有最近的DNS事物(DNSSEC,IPv6等)。

否则,BIND是好的软件。

djbdns是一个单人项目,长期未维护,并不安全(作者只是这么说),而且官方网站上充斥着错误。(现在,我敢肯定,我会从djbboys那里获得很多反对意见,我的代表对我的品味太高了:-)


8

如果它是您自己的,并且想了解DNS的工作原理,我会使用djbdns。

如果您想了解其他人如何进行DNS以及如何支持典型的企业部署,请学习绑定。

如果您的目标是付出最小的努力和支持,并且您有足够的能力,那么djbdns的支持开销要低得多。

如果您更喜欢栅栏的新手,则绑定和运行起来可能会更容易,但是请记住,它更可能以怪异和古怪的方式爆炸。

如果我还不了解djbdns(并绑定),我也会研究powerdns和maradns,但是我怀疑对于小型安装,它是否比djbdns套件更好。

无论如何,即使您使用绑定将DNS通告到Internet,也应该为系统的解析器运行在localhost上运行的dnscache(djbdns套件的一部分)。


6

跳过djbdns。尽管djb是英雄,但他继承了数学家对软件的傲慢态度。就启动/停止而言,它的行为不像其他软件,这可能很好地证明了管理后台程序的巧妙技巧。但是,如果您不定期使用文档,则必须提取文档,因为所有内容都非常不同。如果您在其他人也维护的系统上进行设置,则需要为其编写清晰的文档-他们需要全文阅读才能进行简单的操作。从init中运行东西很可爱,甚至很聪明。但这也是令人讨厌,令人惊讶和不规范的。

此外,由于坚持仅遵守标准而不是软件互操作性,我遇到了djbdns引起的严重问题。对这些问题进行故障排除是浪费大量时间,因为它取决于DNS数据包中的细微差异。

同样,在某些情况下,djbdns也会具有奇怪的行为,这将导致人们使用djb以外的工具(例如,使用nslookup)对DNS服务器进行故障排除,以获得令人惊讶的结果。您将浪费时间来解释“实际上,我只是使用了这个模糊的DNS服务器djbdns。问题是您的诊断工具正在向您发送一条奇怪的消息,但是它工作正常。如果查看此数据包捕获,您可以知道,这与几个月前djbdns无法与您的DNS服务器正确互操作的问题无关,也与我们几周前不在办公室的问题有关队友一个小时重新启动DNS服务器。”

各地的qmail类似问题。

如果您要提问并有时间消磨时间,设置djbdns具有一定的教育意义。您还可以通过阅读djb的网站来学到很多东西。

有两套安全问题。允许攻击者访问系统的安全漏洞-djbdns几乎绝对没有任何这些。几年前,bind在很短的时间内发现了许多令人尴尬的内容,这也暴露了一个糟糕的设计。我希望在过去的多年中,它已经被完全重写。如果您确实希望在这方面安全,请在虚拟机(例如Xen)下运行它。还要考虑一下,如果您在具有目标模式的SELinux的Linux系统上运行,则将有一个绑定设置,并且可能不会为djbdns打扰。bind + SELinux系统可能更安全。

另一个问题是防止缓存中毒的安全性。我的猜测是,djbdns发行时会更好,而由于受到更多关注,bind现在可能会更好。除非“正确配置”,否则这可能是您听觉不牢固的原因。您至少应该研究并理解此问题。在此过程中,您可能会发现两台DNS服务器都存在哪些配置风险。

对于大多数用户而言,重负载下的行为是胡说八道。注意将性能用作评估软件的标准,而这很少是性能瓶颈。您并没有为庞大的用户群托管缓存DNS服务器,因为那里的请求率很高。您正在运行权威DNS,以提供可能在同一系统上运行的服务。这些服务比DNS贵数千倍。您的Internet链接甚至可能不足以沉重地负担DNS服务器的负担,但是如果您在所提供的服务上承受如此沉重的负担,则DNS可能不会成为瓶颈。


5

您可能想看看MaraDNS,这是一种具有安全意识的DNS服务器。

  • 安全。MaraDNS的安全历史记录比其他任何DNS服务器都要好。例如,MaraDNS始终使用安全的随机数生成器将查询ID和DNS查询的源端口随机化;而且从未遭受过“新的”缓存中毒攻击。

  • 支持的。MaraDNS的维护和更新历史悠久。MaraDNS最初创建于2001年。MaraDNS 1.0于2002年发布,MaraDNS 1.2于2005年12月发布。MaraDNS已通过SQA流程以及超过四年的实际使用进行了广泛的测试。MaraDNS继续得到完全支持:最新版本已于2009年2月13日完成。即将成为MaraDNS 2.0一部分的代码Deadwood正在积极开发中。

  • 使用方便。基本的递归配置仅需要一个三行配置文件。基本的权威配置仅需要四行配置文件和一行区域文件。MaraDNS已有完整文档记录,其中包含易于遵循的教程和完整且最新的参考手册。

  • 小。MaraDNS非常适合嵌入式应用程序和服务器必须使用绝对最小数量资源的其他环境。MaraDNS的二进制文件比任何其他当前维护的递归DNS服务器的二进制文件小。

  • 开源。MaraDNS是完全开源的,该许可证是一个两节BSD许可证,几乎与FreeBSD许可证相同。

请参阅maraDNS倡导页面,其中有几种可以帮助您选择的DNS服务器软件的比较。


如项目首页上所述,作者不再维护MaraDNS
Joseph Holsten

1
作为更正,尽管我不再积极开发MaraDNS,但我仍在维护它(错误修复,新编译器和Linux发行版的更新等)。实际上,我刚刚在今年(2014年)发布了新的MaraDNS版本,并可能会在明年发布:maradns.samiam.org/download.html
samiam 2014年

4

如果您只为自己运行DNS,则djbdns是更好的软件包。它是去年发现主要DNS安全问题的少数软件包之一,并在数年之前对其进行了构建/修补以对其进行修复。对于DNS缓存,我在不作为权威DNS服务器运行的所有服务器上安装dnscache(djbdns的一部分)。对于大多数项目,它确实比BIND更好地工作,但是考虑到当今的硬件,BIND的额外重量和较慢的速度已成问题。

作为经验,无论您选择运行哪个软件包,我都会学习BIND的基础知识。

Djbdns设置为真正易于从命令行进行管理。DNS数据的所有更改都作为命令完成。在BIND中,您可以编辑一系列文本文件。

您可以同时获得两者的软件包。我认为IE与其他浏览器的区别。IE内置并且可用于许多方面,并不是您更改了默认值。Djbdns不同,需要不同的权衡。对于ISP,从BIND迁移到djbdns可能会有些棘手,因为默认情况下,BIND会进行缓存和名称服务,而djbdns会将其分为两部分。这种首选的安全解决方案,但更难设置,因此许多BIND安装都无需理会。


3

我个人说您需要学习BIND的基础知识,以供参考,但是继续学习其他内容将使您对将来的系统管理员更加满意:)

我在ISP行业工作过的大多数地方似乎都在使用djbdns,它为在“托管”服务层之上提供了出色的构建块和基础-编写脚本以生成区域文件非常简单,这意味着您可以存储所有DNS数据无论如何在SQL中。它每秒处理大量的查询,并且可以安全启动。

如果需要扩展它,只需浏览一下http://haproxy.1wt.eu并在其后面弹出一些权威服务器!我还极力建议您在选择部署的任何设置中从权威服务器中拆分解析器。

其他值得一读的东西是MaraDNS和PowerDNS。


2

我主要将FreeBSD用于此类事情,并且由于它与BIND捆绑在一起,所以我从来没有真正努力学习其他知识。但是,我发现BIND相当容易配置,并且由于FreeBSD从安全角度对其进行了维护,因此我仅需跟踪该通道即可解决任何安全问题。

因此,我认为对您来说最好的选择是同时尝试这两个套件,然后看看哪个套件最适合您,也就是说,除非您使用与这两个套件捆绑在一起的操作系统。


2

如果您想了解DNS,请阅读O'Reilly的书籍“ DNS and BIND ”以及安装最新版本的bind的最佳方法。

BIND的一生中确实存在更多的安全问题。dnjdns直到去年才发布,但是它的架构与BIND完全不同,如果您不熟悉命名系统的工作原理,可能会发现很难注册。

如果您只是想学习如何运行DNS 服务器(而不是了解协议等),则最好只选择其中一个并进行深入研究。我希望您会找到两者的二进制包在您选择的任何* nix发行版中。话虽这么说,如果宣布有安全漏洞,那么使用源代码进行编译可能会有一些优势,您可能需要重新编译这些软件。

与任何面向互联网的服务一样,无论您使用什么软件,都应遵循一些常识和务实的思想。如果必须启用动态更新,请确保已签名。如果您允许区域传输,请限制谁可以通过您的服务器等执行它们。


1
我加入了djbdns,很快遇到了一些小的安装问题,并且发现并没有一个记录此类问题的庞大社区。没有像“ DNS和绑定”这样的东西。即使我克服了这一障碍,我可能想做的每件事都更有可能讨论BIND解决方案。无论技术是否更好,BIND似乎都有更好的支持。
chernevik

显然,并没有您想要的那么难。我正在努力工作,并在有限的理解下做出最佳选择,而不是穷尽任何特定工具的潜力。我感谢djbdns,perl,lighttpd和Free BSD,以及我当前使用的所有其他开放源代码。好吧,几乎所有。但是我认为您不会比我更期待RTFM的新手或Look TFM。您显然投资了djbdns,这很棒。如果我的意见使您烦恼,我想您可以希望有更聪明的新手,或者您可以努力使我们更容易找到答案。
chernevik

2

绑定

如果您将学习如何配置它(在阅读一大堆与DNS相关的RFC时,那么将来)(无论出于何种目的),您都可以轻松切换到另一台DNS服务器。我在FreeBSD,Linux甚至Vista笔记本电脑(用于VMware NAT的主机)上的所有地方都使用BIND作为主要和辅助服务器。

顺便说一句,阅读BIND的源代码并发现诸如gethostbyname()或gethostbyaddr()之类的经典函数是如何工作的,这是一种乐趣。


2

经过多年的使用绑定,终于让我意识到我的大多数服务器根本不需要运行自己的DNS守护程序。这可能不适用于您,但请考虑一下:如今,几乎每个域注册商都为您提供DNS记录的服务器(通常为您提供基于Web的方式来编辑DNS记录)。他们负责提供信息,管理辅助服务器等。如果您无需服务器响应DNS查询,剩下的就是让您的服务器进行DNS查找。为此,我将/etc/resolv.conf指向4.2.2.1和4.2.2.2,它们是Level3“ anycast” DNS服务器,并且看上去非常快速和可靠。

一个额外的好处是您服务器的防火墙配置不再需要进入DNS。您只需要使用“已建立的相关”规则,即可使用服务器的DNS查询。

好的,所以您不需要询问是否需要运行DNS守护程序,但这就是我回答的问题。只是为了完整起见,如果您发现必须运行一个,我建议您坚持使用bind,因为它是如此常用,您会发现很多文档并帮助使其按自己的意愿做。


看起来很合理,但是通过自己先托管它似乎更容易理解它是如何工作的。
chernevik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.