如何以最less的configurationpipe理我的所有域名?

这是关于DNS服务器pipe理的规范性问题 。

我有一百个左右的域名。 所有这些域都需要进行相同的configuration,但是为每个域configuration一个新的区域和/或区域文件似乎是浪费大量时间。 必须有一个更好的方法来自动化!

我想我正在做些什么…如果我创build一个叫做的区域. ,或者在我的DNS软件中使用其他一些function,以便在请求Alogging时始终返回特定IP,这似乎使我非常接近我期望的最终结果。 我的服务器正在响应请求的权威性,而且它更容易pipe理!

这很好,直到名称服务器validation软件开始检查这些域名。 我想通过添加NSlogging可以使大部分错误消失,但是我的软件不会让我在同一个区域文件中放置多个SOAlogging。

我如何解决这个多重SOAlogging问题?

除非我误解了这个问题,否则我会定期使用BIND来做这件​​事,只要每个区域完全相同,似乎就没有问题。

在我的主名称服务器上,我有指向通用区域named.conf条目,例如

 zone "example.com" { type master; file "primary/example.GENERIC"; }; zone "example.co.uk" { type master; file "primary/example.GENERIC"; }; 

然后是一个zonefile primary/example.GENERIC ,它说,例如

 ;; Start of Authority @ IN SOA ns.teaparty.net. dns.gatekeeper.ltd.uk. ( 2004091201 ; serial number YYYYMMDDNN 28800 ; refresh 8 hours 7200 ; retry 2 hours 864000 ; expire 10 days 3600 ) ; min ttl 1 day ;; ;; Name Servers IN NS ns.teaparty.net. IN NS ns2.teaparty.net. 

而且我根本不知道这些区域有什么问题。 我很开放地被告知我误解了这个问题,或者说我的域名实际上不起作用,但是在那之前我认为它对我有用。

请注意, 你不能在中学拉同一个技巧 ; 每个区域需要存储一个不同的文件。但是由于该文件的内容将由主区域的x区块填充并保持最新,这不是什么大问题。

有许多捷径可以让你的生活更轻松:

如果您使用绑定或使用文件来存储区域数据的类似软件:将您的区域指向同一个文件,例如:

 zone "example.net" { type master; file "/etc/bind/zone/default.zone"; }; zone "example.org" { type master; file "/etc/bind/zone/default.zone"; }; 

由于您可以使用特定的DNS短手,因此可以创build通用区域文件:

 $TTL 1h ; default expiration time of all resource records without their own TTL value @ IN SOA ns1.example.com. username.example.com. ( 20140218131405 ; Serial number YYYYMMDDHHMMSS 28800 ; Refresh 8 hours 7200 ; Retry 2 hours 604800 ; Expire 7 days 86400 ; Minimum TTL 1 day ) @ IN NS ns1.example.com. ; ns1.example.com is a primary nameserver @ IN NS ns2.example.com. ; ns2.example.com is a backup nameserver @ IN MX 10 mail.example.com. ; mail.example.com is the mailserver @ IN MX 20 mail2.example.com. ; the secondary mailserver @ IN A 192.0.2.1 ; IPv4 address for the bare domain IN AAAA 2001:db8:10::1 ; IPv6 address for the bare domain www IN A 192.0.2.1 ; www.domain IN AAAA 2001:db8:10::1 ; IPv6 address for www.domain - note by starting the line with a blank it becomes the continuation of the previous record and this IPv6 record applies to www wwwtest IN CNAME www ; wwwtest is an alias for www 

这使得使用区域文件中的主机名不以点结束的事实 总是使用$ORIGIN进行扩展,而$ORIGIN又被隐式设置为区域名称。 而@是$ ORIGIN的简称。


不要手动维护单个区域文件,而是启用一个与名称服务器以编程方式交互的方法。

我已经使用了PowerDNS,它允许RDMS作为后端,与我们当时使用的LAMP堆栈非常吻合。 像Amazon Route 53这样的云服务也暴露了web-API。

但即使是古老的Bind也支持dynamic更新 ,这是一种通过发送特殊forms的DNS消息来添加,replace或删除主服务器中的logging的方法。 这些消息的格式和含义在RFC 2136中规定。

dynamic更新通过在区域语句中包含allow-updateupdate-policy子句来启用。 有关更多信息,请查看“ 绑定pipe理员参考手册” 。

简答

如果您在BIND中查找“零configuration”设置,它不存在。 设置根区( . )似乎是一个好主意,但不是,您需要find一个解决scheme,不涉及打破DNS来满足您的需求。

长答案

在过去的一年里,我们已经多次获得这个问题的变种。

答案很简单:您不能设置单个区域定义。 在这种情况下,任何让您定义或以其他方式综合多个SOAlogging的软件都是损坏的软件,破坏的事情不在ServerFault的主题中。 你或者需要select使这个pipe理更简单的DNS软件,或者你需要提出一个不涉及这个特定快捷方式的不同策略。

确实有一些技巧可以使生活变得更简单…以BIND为例,定义多个区域都是相同的,这些区域都引用相同的模板区域文件。 这是完全合法的,validation软件会发现没有错误:请参阅MadHatter的答案。 大多数人都通过这个解决scheme,因为每次获取新的域时,添加一个区域声明仍然是“太多的工作”,但是这种托pipe没有“configuration一次,走开”选项。

较新版本的BIND支持一个名为allow-new-zones的选项,它允许您通过新的rndc addzonefunctiondynamic地创build区域定义。 你可能想看看这个,看看它是否符合你的需求。

除了build议的解决scheme,你的select是有限的。 有时候,如果软件没有按照你想要的方式去做,你只是坚持做这项工作。

当你说“域需要configuration相同”,你的意思是他们必须持有相同的资源logging? 在这种情况下,除了一个域名之外的所有DNAME RR都不是一个更清洁的解决scheme吗?

我不能通过@MadHatter来导入相同的模板文件,同时严格遵守问题的范围。 我只能为LDAP后端提供类似的方法(在我的情况下,与powerDNS一起使用):为相关的SOA和NSlogging添加associatedDomain属性,如下所示:

 dn: dc=vanitydomains,ou=DNS,dc=myDIT objectClass: dNSDomain2 objectClass: domainRelatedObject dc: vanitydomains associatedDomain: vanitydomain.ORG associatedDomain: vanitydomain.NET associatedDomain: vanitydomain.COM associatedDomain: vanitydomain.INFO sOARecord: NS1.example.com sysadmin.example.com 2011100701 28800 1800 2592000 10800 dNameRecord: example.com nSRecord: NS1.example.com nSRecord: NS2.example.com