我正在关注这个教程:http://groups.drupal.org/node/16862在我的 ubuntu 机器上设置子域名。在步骤 III 中,我使用的db.mydev
IP 和教程中的一样:
mydev. 86400 IN SOA mydev. hostmaster.mydev. (
20091028 ; serial yyyy-mm-dd
10800; refresh every 15 min
3600; retry every hour
3600000; expire after 1 month +
86400 ); min ttl of 1 day
IN NS mydev.
IN MX 10 mydev.
IN A 12.85.28.217
*.mydev. IN A 12.85.28.217
但是,当我使用named-checkzone mydev db.mydev
它检查语法时,我收到错误消息:zone mydev/IN: has no NS records
。有什么提示吗?
答案1
我同意 Andrew B 的观点,但出于可读性考虑,我不建议只在那里使用空格。在该位置使用 @ 符号或区域的完全限定名称(“mydev.”)可使内容更具可读性。磁盘空间不再昂贵,为了节省几个字符而导致文件无法理解区域解析器正在做什么,这并不是胜利。
进一步解释一下,每个资源记录声明都由标签、TTL、类、类型和值组成。但您可以省略除值之外的任何一个,它们将从上面继承。
您发布的片段是试为类 IN 和类型 SOA、NS、MX 和 A 的记录声明名称为“mydev.”的记录,但由于您在 NS、MX 和 A 记录声明的行首遗漏了重要的空格,因此您遇到了问题。
如果方括号中的项目是继承的默认值,则而不是:
[mydev.] IN NS mydev.
[mydev.] IN MX 10 mydev.
[mydev.] IN A 12.85.28.217
您无意中声明:
IN.[mydev.] [IN] NS mydev.
IN.[mydev.] [IN] MX 10 mydev.
IN.[mydev.] [IN] A 12.85.28.217
因此,从来没有为普通的旧版本声明过 NS 记录:
mydev. IN NS mydev.
导致您看到的错误消息“zone mydev/IN: 没有 NS 记录”
答案2
您需要在以“IN”开头的每一行开头至少添加一个空格或制表符(鸣谢:@mdpc 对制表符提醒的编辑)。有些管理员不喜欢使用制表符:在这种情况下,您应该尽可能让所有这些条目都与相同的空格对齐。
这是因为从技术上讲,您忽略了所定义记录的第一个字段。这是不必在每一行开头都放置“mydev.”或“@”的快捷方式,但只有当您以非记录数据的内容开头时,它才有效。