设置子域时出现“区域没有 NS 记录”错误

设置子域时出现“区域没有 NS 记录”错误

我正在关注这个教程:http://groups.drupal.org/node/16862在我的 ubuntu 机器上设置子域名。在步骤 III 中,我使用的db.mydevIP 和教程中的一样:

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.”或“@”的快捷方式,但只有当您以非记录数据的内容开头时,它才有效。

相关内容