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

clw*_*wen 3 domain-name-system bind dns-zone

我正在关注本教程:http : //groups.drupal.org/node/16862在我的 ubuntu 机器上设置子域。在第三步中,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
Run Code Online (Sandbox Code Playgroud)

但是,当我named-checkzone mydev db.mydev用来检查语法时,我收到错误消息:zone mydev/IN: has no NS records. 任何提示?

And*_*w B 9

在以“IN”开头的每一行的开头,您至少需要一个空格字符或一个制表符(信用:@mdpc 对制表符提醒的编辑)。一些管理员不偏爱制表符:在这种情况下,您应该尽可能使所有这些条目与相同的空格对齐。

这是因为您在技术上遗漏了您定义的记录的第一个字段。这是不必输入“mydev”的捷径。或在每一行的开头使用“@”,但只有当您以不是记录数据的内容开始行时,它才有效。


Mic*_*lly 5

我同意 Andrew B 的观点,但出于可读性的目的,我不建议在那里只使用空格。在该位置使用 @ 符号或区域的完全限定名称 ("mydev.") 可显着提高可读性。磁盘空间不再昂贵并且以拥有一个您不了解区域解析器正在做什么的文件为代价来节省几个字符并不是一种胜利。

进一步解释一下,每个资源记录声明由一个标签、一个 ttl、一个类、一个类型和一个值组成。但是您可以省略除 value 之外的任何一个,它们将从上面继承。

您发布的代码段试图声明名称为“mydev”的记录。对于 IN 类和 SOA、NS、MX 和 A 类型的记录,但是因为您在 NS、MX 和 A 记录声明的行开头遗漏了重要的空格,所以您遇到了问题。

如果方括号中的项目是继承的默认值,而不是:

[mydev.]   IN    NS         mydev.
[mydev.]   IN    MX   10    mydev.
[mydev.]   IN    A          12.85.28.217
Run Code Online (Sandbox Code Playgroud)

您无意中声明:

IN.[mydev.]   [IN]   NS         mydev.
IN.[mydev.]   [IN]   MX   10    mydev.
IN.[mydev.]   [IN]   A          12.85.28.217
Run Code Online (Sandbox Code Playgroud)

因此,没有为普通旧声明任何 NS 记录:

mydev.   IN   NS   mydev.
Run Code Online (Sandbox Code Playgroud)

导致您看到的错误消息,“zone mydev/IN: has no NS records”