我有一个example.com的DNS区域,为foo.example.com定义了一个types为A的foo.example.com 。 在同一台服务器上,我有另一个名为foo.example.com区域,并且在区域顶部没有定义Alogging 。 如果我的服务器接收到foo.example.com的查询,它是否会返回example.com区域中定义的logging? (或者,searchalgorithm一旦到达更具体的区域就会停止,然后回答“not found”?)
一个类似的问题:
如果我具备上述全部内容,那么如果我在foo.example.com区域( @ )的顶部设置一条指向不同IP地址的Alogging,将返回哪个地址?
foo.example.com. 3600 IN A <location A>
@ 3600 IN A <location B>
显然你不需要两个 – 我正在嘲笑DNS的行为。 但是,有没有一个标准的方式来处理这个 – 一个标准的地方呢?
我正在使用BIND。
当在授权域名服务器上定义重叠区域时, 最具体的区域用于提供答案。
example.com. IN A?的查询example.com. IN A? example.com. IN A? 击中example.com区域。 foo.example.com. IN A?的查询foo.example.com. IN A? foo.example.com. IN A? 点击foo.example.com区域。 如果foo.example.com在example.com区域中定义, 则会被忽略 。 sub.foo.example.com. IN A?的查询sub.foo.example.com. IN A? sub.foo.example.com. IN A? 命中foo.example.com区域,因为它比example.com更具体。 在您的具体示例中,查询的返回值是NXDOMAIN因为foo.example.com区域本身不提供Alogging定义。
要使用DNS术语,在父区域和特定区域之间的边界处有效切割区域。 RFC2181第6.1节描述了您的scheme的正确行为:
这样的服务器对于区域中不在另一个区域中的所有资源logging具有权威性。 指示区域切割的NSlogging是创build的子区域的属性,该子区域的原点的任何其他logging或其任何子域也是如此。 一个区域的服务器不应该返回与另一个区域中的名称有关的查询的权威性答案,这个区域包括NS,也许还有A,logging在一个区域中,除非它恰好是另一个区域的服务器。
除了下面提到的DNSSEC案例外,服务器应该忽略NSlogging以外的其他数据,并且必要的Alogging用于查找NSlogging中列出的服务器,这些logging可能恰好在区域切割的区域中configuration。
至于哪一个是最佳做法,这完全取决于你。 您可以将所有logging放在单个区域中,或者如果更方便的话,可以为您的子域名打散单独的区域文件。 (比如说,由于它们每个包含数百条logging)我要提醒的一点是,并不是很明显,像named-checkzone这样的validation工具通常不知道生活在同一台服务器上的子区域,并可能产生不正确的警告如果父区域包括对子区域内的logging的引用。 (比如CNAME别名)