Назад | Перейти на главную страницу

Ошибка «в зоне нет записей NS» при настройке поддомена

Я следую этому руководству: 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. Есть подсказки?

Вам нужен хотя бы один символ пробела или табуляции (кредит: редактирование @mdpc для напоминания табуляции) в начале каждой строки, которая начинается с «IN». Некоторые администраторы не пристрастны к вкладкам: в таких случаях вы должны стараться, чтобы все эти записи были выровнены с одинаковыми пробелами, где это возможно.

Это потому, что вы технически не учитываете первое поле определяемых вами записей. Это ярлык для того, чтобы не вводить «mydev». или "@" в начале каждой из этих строк, но это работает, только если вы начинаете строку с чего-то, что не является записанными данными.

Я согласен с Эндрю Б, за исключением того, что для удобства чтения я бы не рекомендовал использовать там только пробелы. Используйте символ @ или полное имя зоны («mydev.») В этом месте, чтобы сделать вещи более читаемыми. Дисковое пространство больше не является дорогостоящим, и экономия нескольких символов за счет наличия файла, в котором вы не понимаете, что делает анализатор зоны, не является победой.

Чтобы пояснить немного дальше, каждое объявление записи ресурса состоит из метки, ttl, класса, типа и значения. Но вы можете опустить любой из них, кроме значения, и они будут унаследованы сверху.

Опубликованный вами фрагмент пытаясь объявлять записи с именем «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

вы непреднамеренно заявляете:

IN.[mydev.]   [IN]   NS         mydev.
IN.[mydev.]   [IN]   MX   10    mydev.
IN.[mydev.]   [IN]   A          12.85.28.217

и в результате никакая NS-запись никогда не объявляется для простого старого:

mydev.   IN   NS   mydev.

в результате появляется сообщение об ошибке "зона mydev / IN: нет записей NS"