![如何在内网中设置多个 DNS 服务器](https://linux22.com/image/511712/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%86%85%E7%BD%91%E4%B8%AD%E8%AE%BE%E7%BD%AE%E5%A4%9A%E4%B8%AA%20DNS%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我们有一个活动目录网络,混合了Windows DNS, Linux绑定服务器,并希望使用开放DNS作为我们的外部 DNS 提供商。
我想知道什么是最好的方法设置这些服务器(关于转发器、递归等)?
Active Directory 是我们域的主要内部 DNS,有 3 个冗余服务器。DHCP 和我们所有的服务器都使用这些服务器作为 DNS 服务器。然后,我们有一个来自旧网络的旧式 AD 服务器,它仍然对许多域具有权威性。我的邮件过滤器运行 BIND 的缓存实例,最后,我们有几个 Linux Bind 服务器,它们对我们托管的许多网站具有权威性。
我们的主要 AD 服务器是否应该指向我们的旧式 AD 服务器,该服务器指向我们的一个 BIND 服务器,该 BIND 服务器又指向另一个 BIND 服务器,该 BIND 服务器最终指向 openDNS? 或者我们的主要 AD 服务器是否应该直接指向所有这些? - 或者有更好的选择?
如果一个域名在两个地方列出会发生什么? DNS 是否按顺序处理转发器?
那么根服务器呢- 如果我想将 OpenDNS 用于“其他所有事情”,我是否只需将它们列为最后的转发器,并从所有 DNS 服务器中删除根服务器?
递归如何工作- 在这种情况下,我应该使用递归吗?
答案1
托管区域的面向 Internet 的 DNS 服务器应禁用递归,并且仅应用于托管区域。
如果 DNS 服务器上有一个区域,它会认为自己对该区域具有权威性,因此当向它发送请求以获取其托管区域中的记录时,它会明确回答(包括说“没有这样的记录”如果本地不存在 - 它不会转发该请求)。出于这个原因,您不希望在多台服务器上拥有相同的区域。当然,如果一台是主服务器,另一台是接收来自主服务器的区域传输的辅助服务器,您可以在多台服务器上拥有该区域,但您提出问题的方式听起来您已经或正在考虑将多台服务器配置为同一区域的主服务器,而您并不想要这样做。
是的,您会将 OpenDNS 列为最后一个转发器。您实际上不必删除根服务器 - 只要转发到位,您的 DNS 服务器就会遵守该配置。
这个问题很难回答,因为你的 DNS 配置听起来比必要的稍微复杂一些。我想我建议简化一些事情,让 AD 服务器直接转发到 OpenDNS,然后你可以在必要时为本地托管区域添加其他转发器。我不确定你是否会从所有这些转发中获得任何好处。
一般来说,您确实应该将托管面向互联网的区域的服务器(并在这些服务器上禁用递归)与提供内部递归的服务器分开。这会让事情变得简单得多。
答案2
假设一切都是内部的……
理想情况下,你会指定一些只是解析器(例如,几个 BIND 服务器)和其余的对您的内部区域同样具有权威性的服务器。转发器将是:
- 配置为递归
- 使用 OpenDNS 配置为转发器
- 配置为所有内部域的从属或存根(存根可能更好)
- 响应 DHCP 请求/在其静态配置中提供给客户端
对于 DNS,一致性是关键!尽量避免不同的人使用以不同方式配置的不同服务器组,从而设置上百万种不同的设置。我会避免将权威内部服务器(即 AD 服务器)用作解析器以及,如果我能帮忙的话,不要直接把他们的 IP 交给客户。如果你有只需将它们设置为转发至解析器即可。
不要让指定的主服务器和从服务器相互转发:如果客户端发送一个内部根本没有缓存的查询,它将通过转发链中的每个服务器,这远非理想。