我是一个想学习如何设置DNS域名服务器的新手。 我应该使用djbdns,BIND还是其他?
目前的networking需求包括子域支持,SSL和邮件服务,所有这些都是非常轻的stream量。 我想要一个解决scheme,可能有一天会扩大到更重的stream量和可能更棘手的要求(如负载平衡)。 在这个时候我可以在Linux上运行。
我读过BIND有安全问题,如果没有正确configuration,并且它的configuration可能会非常棘手。 我也读过,djbdns更容易configuration,更安全,等于重负载。 djbdns的论点看起来似乎有道理,但我没有专业知识来正确地评估它们。 如果BIND更好,我将不胜感激讨论djbdns的这些声明。
谢谢。
我过去曾经使用djbdns,目前运行一大堆BIND服务器。
djbdns最大的问题是把我的一年级老师放在我的成绩单上的方式是:“和别人玩不好”。 它不像其他任何非常小的方式在unix盒子上的行为,可以咬你。 它使用区域文件的语法,您将不会在其他地方看到。
djbdns的最大优势在于它的devise从一开始就以安全为目标。
如果你打算build立一个DNS服务器,把它暴露给互联网,然后再维护它,那么djbdns就是要走的路。
在现实世界中,大多数pipe理员最好使用来自操作系统供应商的BIND软件包,并在更新时及时修补它。 但运行chroot是一个好主意,并保持你的权威性的DNS服务器分开你的recursionparsing器DNS服务器是一个好主意。
如果你findDNS的文档,BIND将被包含,并且djbdns不太可能被包含。 如果你使用dig,它返回的格式可以被粘贴到一个BIND区域文件中并且工作。 它像任何普通的Unix守护进程,而不是来自另一个星球的东西。
我们使用一些硬件负载平衡器和负载平衡我们的recursionparsing器BIND服务器; 很好。 只要确保用户在发送请求时获得相同的源IP,并且任何支持UDP和TCP的负载均衡设置都可以正常工作。 如果你正在做权威的DNS,负载均衡就像拥有多台服务器一样简单,并且把它们全部发布在whois信息中。 其他DNS服务器将智能地进行负载平衡。
对于权威服务, nsd 。
对于recursion的, 不受限制的 。
两者都很小(所以可能有更less的安全漏洞等待被发现),积极维护和支持所有最近的DNS事情(DNSSEC,IPv6等)。
否则,BIND是好软件。
djbdns是一个单独的项目,长期维持不变,而不是更安全(作者只是这样说),官方网站充满了错误。 (现在,我相信我会从djbboys得到很多的赞誉,我的代表太高了,我的口味:-)
如果是你自己,而且如果你想了解DNS如何工作,我会使用djbdns。
如果你想了解其他人如何做DNS,以及如何支持典型的企业部署,学习绑定。
如果你的目标是最小的努力和支持,而且你有合理的能力,djbdns的支持开销要低得多。
如果你更喜欢围栏的新手,你可能会有更容易的时间来进行绑定和运行,但要记住,以怪异和古怪的方式爆发的可能性更大。
如果我还不知道djbdns(和绑定),我也会看到powerdns和maradns,但我怀疑,对于小安装它比djbdns套件更好。
无论如何,即使您使用bind将广告您的DNS广告到互联网,您仍然应该运行本地主机上的dnscache(djbdns套件的一部分)为您的系统的parsing器。
跳过djbdns。 尽pipedjb是一个英雄,但他却把math家的傲慢传承给了软件。 事实上,它不像其他软件启动/停止它可能是一个巧妙的pipe理守护进程技术的一个很好的例子。 但是如果你没有定期使用这个文档,你将不得不取出文档,因为一切都是如此的不同。 如果你在其他人维护的系统上进行设置,你需要写清楚的文档 – 他们需要完整地阅读这些文档来完成简单的操作。 从init运行的东西是可爱的,甚至是聪明的。 但它也是令人讨厌,令人惊讶和不规范的。
另外,由于坚持只尊重标准,而不是软件互操作性,导致严重问题,导致djbdns问题。 解决这些问题是一个很大的浪费时间,因为它取决于DNS数据包的细微差别。
此外,djbdns在某些情况下会出现奇怪的行为,会导致人们使用除djb之外的工具(例如nslookup)来排除DNS服务器故障,从而获得令人惊讶的结果。 你会浪费你的时间来解释“实际上,我只是使用这个叫做djbdns的晦涩的DNS服务器,问题是你的诊断工具给你一个奇怪的信息,但是它工作正常,如果你看这个包捕获, 。这与我们几个月前的问题没有关系,djbdns没有正确地与你的DNS服务器进行互操作,也没有涉及我们在几个星期前离开办公室的问题,队友一个小时重新启动DNS服务器“。
类似的问题与周围的qmail。
如果你问这个问题,有时间去杀人,那么在build立djbdns方面有一定的教育价值。 你也可以通过阅读djb的网站学到很多东西。
有两套安全问题。 允许攻击者访问系统的安全漏洞 – djbdns几乎肯定没有任何这些漏洞。 几年前,绑定在短时间内发现了不less令人尴尬的事情,也暴露了一个糟糕的devise。 我希望在这么多年里,它已经被彻底改写了。 如果你真的想在这方面安全,在虚拟机(例如Xen)下运行它。 另外考虑一下,如果你使用SELinux在目标模式下运行在Linux系统上,你将有一个绑定的设置,并且可能不会为djbdns设置一个。 bind + SELinux系统可能更安全。
另一个问题是针对caching中毒的安全性。 我的猜测是,当djbdns被释放的时候djbdns更好,现在由于更多的关注,绑定可能会更好。 这可能是你的听力原因,除非“正确configuration”,否则绑定是不安全的。 你至less应该研究和理解这个问题。 在这个过程中,您可能会发现DNS服务器存在哪些configuration风险。
大负荷下的行为对大多数用户而言是无稽之谈。 注意性能用作评估很less成为性能瓶颈的软件的标准。 您没有为一个庞大的用户群托pipe一个cachingDNS服务器,您可能会以很高的速度收到请求。 您正在运行授权DNS来提供可能在同一系统上运行的服务。 这些服务比DNS要贵好几千倍。 您的互联网连接可能不足以大量加载您的DNS服务器,但是如果您提供的服务承受如此沉重的负担,DNS不会是一个可能的瓶颈。
您可能想看看MaraDNS ,一个安全感知的DNS服务器。
安全。 MaraDNS的安全历史与其他DNS服务器一样好或者更好。 例如,MaraDNS总是使用安全的随机数生成器随机化DNS查询的查询ID和源端口; 并且从来不会受到“新”caching中毒攻击的影响。
支持的。 MaraDNS的维护和更新历史悠久。 MaraDNS最初创build于2001年,MaraDNS 1.0于2002年发布,MaraDNS 1.2于2005年12月发布。MaraDNS已经过广泛的testing,均采用SQAstream程,并有四年以上的实际使用。 MaraDNS继续得到全面支持:最新版本于2009年2月13日完成。将成为MaraDNS 2.0一部分的代码Deadwood正在积极开发之中。
使用方便。 一个基本的recursionconfiguration只需要一个三行configuration文件。 一个基本的权威configuration只需要一个四行configuration文件和一个单行区域文件。 MaraDNS完整的文档logging,易于遵循的教程和完整的最新参考手册。
小。 MaraDNS非常适合embedded式应用程序以及服务器必须使用尽可能最less的资源数量的其他环境。 MaraDNS的二进制文件比其他当前维护的recursionDNS服务器的二进制文件要小。
开源。 MaraDNS是完全开源的,这个许可证是一个两层的BSD许可证,几乎与FreeBSD许可证相同。
请参阅maraDNS倡导的页面,其中有几个可帮助您select的DNS服务器软件的比较。
如果你只是为自己运行DNS,djbdns是更好的软件包。 这是为数不多的几个软件包之一,去年已经确定了主要的DNS安全问题,并且在几年前被修补/修补以修复它。 对于DNScaching,我在所有不作为授权DNS服务器运行的服务器上安装dnscache(djbdns的一部分)。 对于大多数项目来说,它确实比BIND工作得更好,但是考虑到今天的硬件,BIND额外的重量和更低的速度是不成问题的。
为了体验,我将学习BIND的基础知识,而不pipe你select运行哪个包。
Djbdns已经被设置为真正的易于从命令行pipe理。 DNS数据的所有更改都按照命令完成。 在BIND中,您可以编辑一系列文本文件。
你可以得到两个包。 我把这个区别看作IE和其他浏览器。 IE来自内置,并为许多事情工作,而不是你从默认情况下更改。 Djbdns是不同的,需要一个不同的权衡。 对于一个ISP来说,从BIND移动到djbdns可能有点棘手,因为默认情况下BIND是caching和名称服务,其中djbdns将其分成两部分。 这个首选的安全解决scheme,但更难以设置,所以许多BIND安装不打扰。
就个人而言,我会说,你需要学习BIND的基础知识,但转移到别的东西会让你更快乐的系统pipe理员:)
我在ISP行业工作的大多数地方似乎都使用djbdns,它提供了极好的构build基础和基础,以便在顶层“托pipe”服务 – 编写脚本来生成区域文件非常简单,这意味着您可以存储所有DNS数据在SQL中。 它每秒处理一个荒谬的数量的查询和安全启动。
如果您需要扩展它,只需浏览http://haproxy.1wt.eu,然后popup一些权威服务器! 我还强烈build议在select部署的任何设置中从权威服务器拆分parsing器。
其他值得一读的是MaraDNS和PowerDNS。
我主要使用FreeBSD来处理这些事情,因为它和BIND捆绑在一起,所以我从来没有真正去学过别的东西。 Hoever我发现BIND相当容易configuration,而且由FreeBSD在安全性方面进行维护,所以我只需要跟踪那个通道的安全问题。
所以我猜你最好的select就是试试他们两个,看看哪一个最适合你,也就是说,除非你使用与他们中的任何一个捆绑在一起的操作系统。
如果您想了解DNS,O'Reilly出版的书“ DNS和BIND ”的副本以及安装的最新版本的bind可能是最好的方法。
BIND确实在其一生中遇到了更多的安全问题。 dnjdns直到去年才有,但它与BIND有着非常不同的架构,如果你不熟悉命名系统的工作方式,你可能会发现更难以拿起。
如果你只是想了解如何运行一个DNS 服务器 (而不是学习协议等),你最好只select一个,并潜入。我希望你会发现二者的二进制包在你select的任何* nix发行版中。 这就是说,从源代码编译软件有一些好处,如果有安全漏洞,你可能需要重新构build。
与任何面向互联网的服务一样,无论使用什么软件,一些常识和务实的思考都是最好的方法。 如果您必须启用dynamic更新,请确保已签名。 如果你允许区域转移,限制谁可以从你的服务器执行它们等。
BIND。
如果您将学习如何configuration它(在阅读大量有关DNS的RFC时),那么您将来可以轻松地切换到另一台DNS服务器(无论用于什么目的)。 我在FreeBSD,Linux甚至是Vista笔记本电脑上都使用BIND作为主服务器和辅助服务器(对于VMware NAT主机)。
顺便说一句,阅读BIND的源代码是一种有趣的事情,例如,像gethostbyname()或gethostbyaddr()这样的经典函数是如何工作的。
经过多年的使用绑定,我终于明白,我的大部分服务器根本不需要运行自己的DNS守护进程。 这可能不适用于你,但想一想:几乎每个域名注册商这些天提供服务器为您的DNSlogging(通常给你一些基于Web的方式来编辑您的DNSlogging)。 他们负责处理信息,pipe理辅助信息等。如果您不需要服务器来响应DNS查询,剩下的就是让服务器进行DNS查询。 为此,我将我的/etc/resolv.conf指向4.2.2.1和4.2.2.2,它们是Level3“anycast”DNS服务器,似乎相当快速和可靠。
另外一个好处是服务器的防火墙configuration不再需要DNS。 你只需要“build立,相关”的规则,以使您的服务器的DNS查询工作。
好吧,所以你没有问你是否需要运行一个DNS守护进程,但这是我回答的问题。 要完成,如果你发现你必须运行一个,我build议坚持绑定,因为它是如此常用,你会发现许多文件,并帮助使它做你想做的。