DNS 区域文件记录中的空白'name'字段



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

试图使我的解析器非常严格,以便我们可以拾取任何格式不正确的区域文件,并且我遇到了一些"名称"字段中没有任何内容的记录。

例:

$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记录?它是有效的语法吗?

空白的"name"字段表示仅使用与上一条记录相同的名称,因此在您的示例中,A记录用于www.example.com。 请参阅 RFC 1035 的 §5.1。

如果 RR 的条目以空白,则假定 RR 归最后一个声明的所有者所有。

但是,这也使此特定文件非法 - 您不能在同一标签上存在CNAMEA记录。 请参阅 RFC 1034 的 §3.6.2。

我知道

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

每当区域文件中缺少标签时(标签是左侧的字段 - 即主机名或完全限定域名(,它都会由$ORIGIN变量的值限定(在这种情况下$ORIGIN = example.com - 也可以由@引用(。

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

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

话虽如此,这个区域文件包含相当糟糕的语法,因为它似乎没有一个是完全限定的 - 即根的末尾没有尾随点 - 如

$ORIGIN example.com.
somehost.example.com. IN A 192.0.2.144

我猜名称服务器要么运行不佳,要么有问题。

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

最新更新