Wat*_*i02 0 domain-name-system dns-zone
我有一个 example.com 的 DNS 区域,其类型A为foo.example.com. 在同一台服务器上,我有另一个命名为的区域foo.example.com,并且在该区域的顶部没有定义 A 记录。如果我的服务器收到对 的查询foo.example.com,它会返回example.com区域中定义的记录吗?(或者搜索算法会在到达更具体的区域后停止,然后回答“未找到”?)
一个类似的问题:
如果我把所有的上述情况,如果我再设置一个A记录在顶部foo.example.com区域(@)指向一个不同的IP地址,该地址将被退回?
foo.example.com. 3600 IN A <location A>
Run Code Online (Sandbox Code Playgroud)
@ 3600 IN A <location B>
Run Code Online (Sandbox Code Playgroud)
显然你不需要两者 - 我正在梳理 DNS 的行为。但是有没有一种标准的方法来解决这个问题——一个标准的地方来放置它?
我正在使用绑定。
And*_*w B 10
当在权威名称服务器上定义重叠区域时,最具体的区域用于提供答案。
example.com. IN A?命中example.com区域。foo.example.com. IN A?命中foo.example.com区域。如果foo.example.com在example.com区域中定义,它将被忽略。sub.foo.example.com. IN A?命中foo.example.com区域,因为它比请求更具体example.com。在您的特定示例中,查询的返回值是NXDOMAIN因为该foo.example.com区域没有为自己提供 A 记录定义。
使用 DNS 术语,在父区域和更具体的区域之间的边界处有一个有效的区域切割。RFC2181 §6.1描述了您的场景的正确行为:
这样的服务器对一个区域中但不在另一个区域中的所有资源记录具有权威性。指示区域切割的 NS 记录是创建的子区域的属性,该子区域或其任何子域的来源的任何其他记录也是如此。一个区域的服务器不应为与另一个区域中的名称相关的查询返回权威答案,其中包括 NS,可能还有 A,区域切割处的记录,除非它恰好也是另一个区域的服务器。
除了下面提到的 DNSSEC 情况之外,服务器应该忽略 NS 记录以外的数据,以及定位 NS 记录中列出的服务器所必需的 A 记录,这些数据可能恰好配置在区域切割的区域中。
至于哪个是最佳实践,这完全取决于您。您可以将所有记录放在一个区域中,或者为您的子域划分单独的区域文件(如果这样更方便的话)。(比如说,因为它们每个都包含数百条记录)我要警告的一件事不是很明显,就是验证工具named-checkzone通常不知道位于同一服务器上的子区域,并且如果父区域可能会生成不正确的警告zone 包括对子区域内记录的引用。(例如,CNAME 别名)