我目前正在工作中解析大量区域文件,以便我们可以将这些数据存储在数据库中并轻松地重新生成区域文件。
我正在尝试使我的解析器非常严格,以便我们可以挑选任何格式错误的区域文件,并且我遇到了一些“名称”字段中没有任何内容的记录。
例子:
$TTL 120
$ORIGIN mywebsite.com
@ NS mynameserver.com
@ A 112.134.156.178
www CNAME mywebsite.com
A 111.122.133.144
file CNAME mywebsite.com
如何处理第二条 A 记录?这是有效的语法吗?
答案1
它的名称与上一条记录重复,因此在您的示例中,它将是“www”地址记录。在您的示例中,第二个“@ A”记录不需要“@”。
您举的 CNAME 示例无效,因为 CNAME 不能有另一个同名的记录。我记得,旧版本的 BIND 只会对此发出警告,但新版本的 BIND 不会加载有这些错误的区域。其他类型的记录是有效的 - 例如,这就是您为名称添加多个地址(基于客户端的 DNS 循环)或为域添加多个(主要、次要和第三)MX 或 NS 记录的方式。
$TTL 120
$ORIGIN mywebsite.com.
@ NS mynameserver.com.
@ A 112.134.156.178
www CNAME mywebsite.com. ; Invalid, CNAME cannot share with an A record
www A 111.122.133.144
file CNAME mywebsite.com. ; Alias of www.mywebsite.com.
您在区域中应该看到的内容与此类似:
$TTL 86400
$ORIGIN example.com.
; nameservers in another domain - must point at A records
@ NS ns1.example.net.
NS ns2.example.net.
; mail hosted elsewhere - must be A records
MX 10 mail.example.net.
MX 20 backupmail.example.net.
; web farm - nameserver will return both A
; records when requested and client will alternate between them
www A 192.0.2.200
A 192.0.2.201
; points at www.example.com. - in this case both CNAME (www.example.com.
; and A records (192.0.2.200, 192.0.2.201) should be in the response returned.
www2 CNAME www