这是关于 DNS 服务器管理的规范问题。
我有一百个左右的域。所有这些域都需要进行相同的配置,但必须为每个域配置一个新的区域和/或区域文件似乎是一种巨大的浪费时间。必须有更好的方法来自动化它!
我想我正在做某事......如果我创建一个名为 的区域.
,或者在我的 DNS 软件中使用其他一些功能来在请求记录时始终返回特定 IP A
,这似乎让我非常接近我想要的结果结果。我的服务器对请求做出权威响应,而且管理起来更容易!
在名称服务器验证软件开始检查这些域之前,这一直很好。我发现我可以通过添加记录来消除大部分错误,但是我的软件不允许我在同一个区域文件中NS
放置多个记录。SOA
如何解决这个多SOA
记录问题?
除非我误解了这个问题,否则我会定期使用 BIND 执行此操作,只要每个区域绝对相同,它似乎就可以了。
在我的主名称服务器上,我有
named.conf
指向通用区域文件的条目,例如然后是一个区域文件,上面
primary/example.GENERIC
写着,例如而且我根本不知道这些区域有任何问题。我很乐意被告知我误解了这个问题,或者我的域实际上不起作用,但在那之前我认为它对我有用。
请注意,您不能在二级上使用相同的技巧;每个区域都需要存储不同的文件。但是由于该文件的内容将由来自主区域的区域 xfer 填充并保持最新,因此这不是什么大问题。
简答
如果您正在寻找 BIND 中的“零配置”设置,那么它不存在。设置根区域
.
(长答案
在过去的一年里,我们已经多次收到这个问题的变体。
答案很简单:您不能设置单个区域定义。任何允许您
SOA
在此上下文中定义或以其他方式合成多个记录的软件都是损坏的软件,并且做损坏的事情不是 ServerFault 的主题。您要么需要选择让这种管理更简单的 DNS 软件,要么需要想出不涉及此特定快捷方式的不同策略。肯定有一些技巧可以让您的生活更轻松……以 BIND 为例,定义多个都引用同一个模板区域文件的区域是相当普遍的。这是完全合法的,验证软件不会发现任何问题:请参阅 MadHatter 的回答。大多数人忽略了这个解决方案,因为每次获取新域时添加区域声明仍然“工作量太大”,但是这种托管没有“配置一次然后离开”选项。
较新版本的 BIND 支持一个名为的选项
allow-new-zones
,可让您通过新rndc addzone
功能动态创建区域定义。你可能想看看这个,看看它是否符合你的需要。除了建议的解决方案之外,您的选择有些有限。有时,如果软件没有按照您希望的方式做事,您就会被困在工作中。
您可以使用许多快捷方式让您的生活更轻松:
如果您使用 Bind 或使用文件来存储区域数据的类似软件:将您的区域指向同一文件,例如:
因为您可以使用某些 DNS 速记,您可以创建一个通用区域文件:
这利用了这样一个事实,即区域文件中不以点结尾的主机名.始终会扩展,而
$ORIGIN
后者又隐式设置为区域名称。并且@是 $ORIGIN 的简写。与其手动维护单个区域文件,不如启用一种方法以编程方式与您的名称服务器交互。
我使用了 PowerDNS,它允许将 RDMS 作为后端,非常适合我们当时使用的 LAMP 堆栈。Amazon Route 53 等云服务也公开了 Web-API。
但即使是古老的 Bind 也支持动态更新,这是一种通过向主服务器发送特殊形式的 DNS 消息来添加、替换或删除记录的方法。这些消息的格式和含义在RFC 2136中指定。
通过在 zone 语句中包含一个
allow-update
或一个子句来启用动态更新。update-policy
有关详细信息,请查看绑定管理员参考手册。当您说“域需要进行相同的配置”时,您的意思是它们必须保存相同的资源记录吗?在这种情况下,
DNAME
除了一个域之外的所有域的 RR 不是更清洁的解决方案吗?我无法击败@MadHatter 导入相同模板文件的技巧,同时严格保持在您的问题范围内。我只能为
LDAP
后端提供类似的方法(在我的例子中,与 powerDNS 一起使用):associatedDomain
为相关的 SOA 和 NS 记录添加属性,如下所示: