我是一个想学习如何设置 DNS 名称服务器的新手。我应该使用 djbdns、BIND 还是其他东西?
当前的网络要求包括子域支持、SSL 和邮件服务,所有这些都需要非常轻的流量。我想要一个解决方案,有朝一日可以扩展到更重的流量和可能更棘手的要求(如负载平衡)。此时我会在 Linux 上运行。
我读到如果配置不当,BIND 会出现安全问题,而且它的配置可能很棘手。我还读到 djbdns 更易于配置、更安全且负载重。djbdns 的论点似乎是合理的,但我没有正确评估它们的专业知识。如果 BIND 更好,我会很感激讨论 djbdns 的这些声明。
谢谢。
我过去曾与 djbdns 合作过,目前运行着一堆 BIND 服务器。
djbdns 最大的问题,最好按照我一年级老师在我成绩单上的说法:“和别人玩得不好”。它根本不像 unix 盒子上的其他任何东西,在各种非常小的方式上,以后可能会咬你。它使用您在其他任何地方都看不到的区域文件的语法。
djbdns 的最大优势在于它是从头开始设计的,以安全为目标#1。
如果您要设置 DNS 服务器,将其暴露在互联网上,然后从不维护它,那么 djbdns 将是您的最佳选择。
在现实世界中,大多数管理员最好使用操作系统供应商提供的 BIND 包,并在有更新时及时修补它。但是运行它 chroot 是一个好主意,并且将您的权威 DNS 服务器与您的递归解析器 DNS 服务器分开是一个好主意。
如果您找到有关 DNS 的文档,将包含 BIND,而不太可能包含 djbdns。如果您使用 dig,它返回的格式可以粘贴到 BIND 区域文件中并工作。它的行为就像任何普通的 unix 守护进程,而不是来自另一个星球的东西。
我们使用一些硬件负载均衡器并对我们的递归解析器 BIND 服务器进行负载均衡;效果很好。只需确保用户在发送请求时获得相同的源 IP,并且任何支持 UDP 和 TCP 的负载平衡设置都应该工作。如果你在做权威 DNS,负载均衡就像拥有多个服务器并在 whois 信息中发布所有服务器一样简单;其他 DNS 服务器将智能地进行负载平衡。
对于权威服务,nsd。
对于递归的,unbound。
两者都很小(因此等待被发现的安全漏洞可能更少),积极维护并支持所有最近的 DNS 事物(DNSSEC、IPv6 等)。
否则,BIND 是好软件。
djbdns是一个人的项目,长期无人维护,不安全(作者就这么说了),官网漏洞百出。(现在,我确信我会从 djbboys 那里得到很多反对票,我的代表。对我的口味来说太高了 :-)
如果是为了你自己,并且如果你想了解 DNS 的工作原理,我会使用 djbdns。
如果您想了解其他人如何使用 DNS,以及如何支持典型的企业部署,请学习绑定。
如果您的目标是最少的努力和支持,并且您相当称职,那么 djbdns 的支持开销要低得多。
如果您更多地处于围栏的新手方面,您可能会更容易被捆绑并运行,但请记住,它更有可能以奇怪和古怪的方式爆炸。
如果我还不知道 djbdns(和绑定),我也会研究 powerdns 和 maradns,但我怀疑对于小型安装它是否比 djbdns 套件更好。
无论如何,即使您使用 bind 将您的 DNS 发布到 Internet,您仍然应该在 localhost 上运行 dnscache(djbdns 套件的一部分)以用于系统的解析器。
跳过 djbdns。虽然 djb 是英雄,但他将数学家的傲慢带到了软件上。事实上,它在启动/停止方面的行为不像其他软件,这可能很好地证明了管理守护程序的巧妙技术。但是如果你不经常使用它,你将不得不拿出文档,因为一切都如此不同。如果您将其设置在其他人维护的系统上,您将需要为他们编写清晰的文档——他们需要完整阅读这些文档才能进行简单的操作。从 init 中运行东西很可爱,甚至很聪明。但它也令人讨厌、令人惊讶和不标准。
此外,由于坚持只尊重标准而不是软件互操作性,我遇到了 djbdns 的问题,导致了严重的问题。解决这些问题非常浪费时间,因为它取决于 DNS 数据包的微小差异。
djbdns 在某些情况下也有奇怪的行为,这会导致人们使用 djb 以外的工具(例如使用 nslookup)对您的 DNS 服务器进行故障排除,从而获得令人惊讶的结果。你会浪费时间解释“实际上,我只是使用这个名为 djbdns 的不起眼的 DNS 服务器。问题是你的诊断工具给你一个奇怪的消息,但它工作正常。如果你看看这个数据包捕获,你可以知道. 这与几个月前 djbdns 无法与您的 DNS 服务器正确互操作的问题无关。也与几周前我不在办公室时遇到的问题有关队友一个小时重启DNS服务器。”
qmail 到处都有类似的问题。
设置 djbdns 具有一定的教育价值,如果您提出问题并有时间消磨时间的话。你也可以通过阅读 djb 的网站学到很多东西。
有两组安全问题。允许攻击者访问系统的安全漏洞——djbdns 几乎肯定没有这些漏洞。几年前bind在短时间内发现了不少尴尬的,也暴露了不好的设计。我希望在这么多年里,它已经被完全重写了。如果您真的想在这方面安全,请在虚拟机(例如 Xen)下运行它。还要考虑一下,如果您在目标模式下运行 SELinux 的 Linux 系统,您将有一个 bind 设置,并且可能不会为 djbdns 设置一个。bind + SELinux 系统可能更安全。
另一个问题是防止缓存中毒的安全性。我的猜测是 djbdns 在发布时会更好,而现在由于受到更多关注,bind 可能会更好。这可能是您听到绑定不安全的原因,除非“正确配置”。你至少应该研究和理解这个问题。在此过程中,您可能会发现两个 DNS 服务器都存在哪些配置风险。
对于大多数用户来说,重负载下的行为是一个无意义的标准。谨防将性能用作评估软件的标准,而这很少是性能瓶颈。您没有为庞大的用户群托管缓存 DNS 服务器,在那里您可能会以很高的速度收到请求。您正在运行权威 DNS 以提供可能在同一系统上运行的服务。这些服务比 DNS 贵数千倍。您的 Internet 链接甚至可能不足以使您的 DNS 服务器负载过重,但如果您在提供的服务上承受如此繁重的负载,DNS 可能不会成为瓶颈。
你可能想看看MaraDNS,一个安全感知的 DNS 服务器。
安全的。MaraDNS 的安全历史与任何其他 DNS 服务器一样好或更好。例如,MaraDNS 始终使用安全的随机数生成器随机化 DNS 查询的 Query ID 和源端口;并且永远不会受到“新”缓存中毒攻击。
支持的。MaraDNS 的维护和更新历史悠久。MaraDNS 最初创建于 2001 年。MaraDNS 1.0 于 2002 年发布,MaraDNS 1.2 于 2005 年 12 月发布。MaraDNS 已经过广泛的测试,包括 SQA 流程和超过四年的实际使用。MaraDNS 继续得到全面支持:最新版本于 2009 年 2 月 13 日完成。将成为 MaraDNS 2.0 一部分的代码 Deadwood 正在积极开发中。
便于使用。一个基本的递归配置只需要一个三行配置文件。一个基本的权威配置只需要一个四行的配置文件和一个一行的zone文件。MaraDNS 有完整的文档,包含易于理解的教程和完整且最新的参考手册。
小的。MaraDNS 非常适合嵌入式应用程序和其他服务器必须使用尽可能少的资源的环境。MaraDNS 的二进制文件小于任何其他当前维护的递归 DNS 服务器。
开源。MaraDNS 是完全开源的,该许可证是一个包含两个条款的 BSD 许可证,几乎与 FreeBSD 许可证相同。
请参阅maraDNS advocacy页面,其中比较了几种可能有助于您选择的 DNS 服务器软件。
如果您只是为自己运行 DNS,则 djbdns 是更好的软件包。它是从去年开始就识别出主要 DNS 安全问题的少数软件包之一,并已在几年前构建/修补以修复它。对于 DNS 缓存,我在所有不作为权威 DNS 服务器运行的服务器上安装 dnscache(djbdns 的一部分)。对于大多数项目,它确实比 BIND 工作得更好,但考虑到今天的硬件,BIND 的额外重量和较慢的速度不是问题。
为了经验,无论您选择运行哪个包,我都会学习 BIND 的基础知识。
Djbdns 设置为非常易于从命令行进行管理。对 DNS 数据的所有更改都是作为命令完成的。在 BIND 中,您编辑一系列文本文件。
您可以获得两者的包裹。我认为 IE 与其他浏览器的区别。IE 是内置的,适用于许多事情,并且您不会更改默认设置。Djbdns 是不同的,需要一组不同的权衡。对于 ISP,从 BIND 迁移到 djbdns 可能有点棘手,因为默认情况下 BIND 进行缓存和名称服务,而 djbdns 将其分为两部分。这是首选的安全解决方案,但更难设置,因此许多 BIND 安装都不会打扰。
就个人而言,我会说您需要学习 BIND 的基础知识以供参考,但是转向其他内容将使您将来成为更快乐的系统管理员 :)
我在 ISP 行业工作过的大多数地方似乎都在使用 djbdns,它提供了出色的构建块和基础来将“托管”服务分层 - 编写脚本来生成区域文件非常简单,这意味着您可以存储所有 DNS 数据无论如何在SQL中。它每秒处理大量的查询并且可以安全启动。
如果您需要扩展它,只需查看http://haproxy.1wt.eu并在其背后弹出一些权威服务器!我还强烈建议在您选择部署的任何设置中将解析器从权威服务器中分离出来。
其他值得一读的内容是 MaraDNS 和 PowerDNS。
我主要将 FreeBSD 用于这类事情,因为它与 BIND 捆绑在一起,所以我从来没有真正花精力去学习其他任何东西。然而,我发现 BIND 相当容易配置,并且因为它是由 FreeBSD 从安全角度维护的,所以我只需要跟踪该通道的任何安全问题。
所以我想对你来说最好的选择是同时尝试它们,看看哪个最适合你,除非你使用与它们中的任何一个捆绑在一起的操作系统。
如果您想了解 DNS,O'Reilly 的书“ DNS 和 BIND ”的副本以及安装的最新版本的 bind 可能是最好的方法。
确实,BIND 在其生命周期中遇到了更多的安全问题。dnjdns 直到去年才出现,但它的架构与 BIND 非常不同,如果您不熟悉命名系统的工作原理,您可能会发现更难上手。
如果您只是想了解如何运行 DNS服务器(而不是了解协议等),您最好选择一个并深入研究。我希望您会找到两者的二进制包在您选择的任何 *nix 发行版中。话虽如此,使用软件从源代码编译有一些优势,如果宣布了安全漏洞,您可能需要重新构建这些软件。
与任何面向互联网的服务一样,无论您使用什么软件,一些常识和务实的想法都是最好的选择。如果您必须启用动态更新,请确保已签名。如果您允许区域传输,请限制谁可以从您的服务器执行它们等。
绑定。
如果您将学习如何配置它(同时阅读一大堆有点令人厌烦的与 DNS 相关的 RFC),那么您将来可以轻松切换到另一个 DNS 服务器(无论出于何种目的)。我在 FreeBSD、Linux 甚至是 Vista 笔记本电脑(用于 VMware NAT'ed 主机)上到处都使用 BIND 作为主服务器和辅助服务器。
顺便说一句,阅读 BIND 的源代码并了解例如 gethostbyname() 或 gethostbyaddr() 等经典函数的工作原理是一种乐趣。