DNS区域文件记录中的空白“名称”字段

时间:2011-12-12 05:02:25

标签: dns bind

我目前正在解析我工作中的大量区域文件,以便我们可以将这些数据存储在数据库中并轻松重新生成区域文件。

我正在尝试使我的解析器非常严格,以便我们可以获取任何格式错误的区域文件,并且我会在“名称”字段中找到一些没有任何内容的记录。

示例:

$TTL 120
$ORIGIN example.com

@    NS      example.com
@    A       192.0.2.178
www  CNAME   example.com
     A       192.0.2.144
file CNAME   example.com

如何处理第二张A记录?它是一种有效的语法吗?

2 个答案:

答案 0 :(得分:5)

空白的“名称”字段表示只使用与上一条记录相同的名称,因此在您的示例中,A记录用于www.example.com。见RFC 1035的第5.1节。

  

如果RR的条目以a开头   如果空白,则假定RR由最后声明的所有者拥有。

但是,这也会使此特定文件非法 - 您不能在同一标签上显示CNAMEA条记录。见RFC 1034的§3.6.2。

答案 1 :(得分:3)

我知道这是一个老问题 - 只是偶然发现它同时寻找其他东西,无论如何最后评论 - “空白”名称“字段意味着只使用与前一条记录相同的名称”不正确。

只要区域文件中没有标签(标签是左侧的字段 - 即主机名或完全限定的域名),它就会被$ORIGIN变量的值限定({在这种情况下,{1}} = example.com - 也可以由$ORIGIN引用。)

所以在上面的区域文件中,记录......

@ 相同 A 192.0.2.144 原样..
example.com A 192.0.2.144

说了这么多,这个区域文件包含相当差的语法,因为它们似乎都没有完全限定 - 即根目录没有尾随点 - 如

@ A 192.0.2.144

$ORIGIN example.com.

我猜这个名字服务器要么运行不好,要么是错误的。

基本上/通常在BIND区域文件中至少,如果没有通过尾随点完全限定,则将$ ORIGIN var的值附加到标签上。