如何以最少的配置管理所有域?


10

这是有关DNS服务器管理的规范问题

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

我想我正在做某事...如果我创建一个名为的区域.,或者在我的DNS软件中使用其他功能始终在A请求记录时返回特定的IP ,这似乎使我非常接近期望的目标结果。我的服务器是对请求的权威响应,并且管理起来非常容易!

在名称服务器验证软件开始检查这些域之前,这一直很好。我发现可以通过添加NS记录来消除大部分错误,但是我的软件不允许我SOA在同一区域文件中放置多个记录。

我如何解决这个多SOA记录问题?

Answers:


12

除非我误解的问题,我经常BIND做到这一点,似乎是只要罚款,每一个区域是完全一致的。

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

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

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

然后是一个区域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.

而且我完全不知道这些区域有任何问题。我很容易被告知我误解了这个问题,或者我的域名实际上不起作用,但是直到那时我才认为它对我有用。

请注意,您不能在辅助节点上使用相同的技巧;每个区域都将需要存储一个不同的文件。但是,由于该文件的内容将由来自主区域的区域xfers填充并保持最新,因此这并不是什么大问题。


4

您可以使用许多快捷方式来简化生活:

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

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

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

因为可以利用某些DNS速记,所以可以创建通用区域文件:

$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的简写。


与其手动维护各个区域文件,不如使一种方法与您的名称服务器进行编程交互。

我使用了PowerDNS,它允许RDMS作为后端,非常适合我们当时使用的LAMP堆栈。诸如Amazon Route 53之类的云服务也公开了Web-API。

但是,即使是古老的Bind也支持动态更新动态更新是一种通过向主服务器发送特殊形式的DNS消息来在主服务器中添加,替换或删除记录的方法。这些消息的格式和含义在RFC 2136中指定。

通过在zone语句中包含allow-updateupdate-policy子句来启用动态更新。有关更多信息,请参见《绑定管理员参考手册》


2
您的答案的前半部分仍然是固定的,但是我不确定DDNS是否适用于此...不能将其用于添加或删除区域,这使大多数人在此情况下都无法实现。(不必为每个区域添加都触摸named.conf)我在BIND领域中最了解的是新rndc addzone选项,但这仍然很丑陋,因为它最终在工作目录中生成了带有哈希名称的配置文件,每个添加的区域。
安德鲁B

在理解您要说的内容时,有一种不同的解释是,许多领域的困难在于维护和复制工作。自动化/脚本化DNS是一个没有充分记录的东西。
HBruijn 2015年

4

简短答案

如果要在BIND中寻找“零配置”设置,则该设置不存在。设置根区域(.)似乎是个好主意,但实际上并非如此,您需要找到一种不涉及破坏DNS即可满足您需要的解决方案。

长答案

在过去的一年中,我们已经多次获得该问题的变体。

答案很简单:您无法设置单个区域定义。SOA在这种情况下,允许您定义或合成多个记录的任何软件都是已损坏的软件,而ServerFault则不在此列。您要么需要选择使您的管理更简单的DNS软件,要么需要提出一种不涉及此特定快捷方式的其他策略。

肯定有一些技巧可以使生活更轻松...以BIND为例,定义多个都引用相同模板区域文件的区域是很平常的事。这是完全合法的,验证软件不会发现任何问题:请参阅MadHatter的答案。大多数人都忽略了此解决方案,因为每次获得新域时添加区域声明仍然很繁琐,但是对于这种托管,没有“一次性配置并退出”选项。

较新版本的BIND支持名为的选项allow-new-zones,该选项使您可以通过新rndc addzone功能动态地动态创建区域定义。您可能想看看它,看看它是否符合您的需求。

除了建议的解决方案之外,您的选择还受到一些限制。有时,如果软件无法按照您希望的方式进行操作,那么您就只能坚持工作。


-2

当您说“域需要配置相同”时,是否表示它们必须保留相同的资源记录?在那种情况下,不是DNAME一个域的所有域的RR都会是一种更干净的解决方案?

我不能通过@MadHatter来克服同样的问题,即导入同一模板文件,同时严格将其限制在您的问题范围内。我只能为LDAP后端提供类似的方法(在我的情况下,与powerDNS一起使用):添加associatedDomain相关SOA和NS记录的属性,如下所示:

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

遗憾的是,由于RFC的限制,DNAME技术没有达到区域的顶点。由DNAME记录产生的CNAME合成仍然受到非合成CNAME记录的相同约束。与MadHatter的解决方案不同,结果与100%相同的RRsets相去甚远。
安德鲁B
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.