В статье приведены решения наиболее часто возникающих проблем, связанных с работой DNSmanager.

Файлы и логи DNS-серверов


Конфигурационный файл BIND

CentOS: /etc/named.conf

Debian: /etc/bind/named.conf

Файлы доменных зон BIND

CentOS: /var/named/*

Debian: /etc/bind/domains

Конфигурационный файл PowerDNS

CentOS: /etc/pdns/pdns.conf

Debian: /etc/powerdns/pdns.conf

Записи доменных зон PowerDNS

Записи хранятся в базах данных MySQL, отдельная база на каждое пространство имён. Пространство по умолчанию — powerdns для CentOS, pdns для Debian.

Логи BIND и PowerDNS

CentOS: /var/log/messages

Debian: /var/log/syslog

Диагностика первичного (master) DNS-сервера


DNS-сервер не отдаёт доменную зону

Проверьте, что на первичном DNS-сервере зона отдаётся:

dig <домен> @<IP-адрес> ANY +short
BASH

<домен> — доменное имя.

<IP-адрес> — IP-адрес DNS-сервера, как правило, совпадает с основным IP-адресом сервера.

Ответ на запрос должен быть вида:

dig domain.name @1.1.1.1 ANY +short
mary.me. root.example.com. 2014041800 10800 3600 604800 86400
ns2.example.com.
ns1.example.com.
"v=spf1 ip4:1.1.1.1 a mx ~all"
10 mail.domain.name.
1.1.1.1
BASH

DNS-сервер не запущен, если получен ответ вида:

dig domain.nam @1.1.1.1 ANY +short
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> domain.nam @1.1.1.1 ANY +short
;; global options: +cmd
;; connection timed out; no servers could be reached
BASH

Если получен пустой ответ, значит, у DNS-сервера нет информации о домене. Возможно, он не смог загрузить доменную зону. Смотрите лог.

DNS-сервер BIND не смог загрузить доменную зону

Наиболее распространённая причина проблемы в том, что файл доменной зоны некорректный.

Проверьте следующее:

  1. Если домен имеет сервера имён в своей же зоне, то в файле доменной зоны должны быть указаны ресурсные A-записи для серверов имён. Например, домен domain.com и сервера имён ns1.domain.com, ns2.domain.com. В логе отсутствие A-записей выглядит так:

    zone domain.name/IN: NS 'ns1.domain.name' has no address records (A or AAAA)
    zone domain.name/IN: NS 'ns2.domain.name' has no address records (A or AAAA)
    zone domain.name/IN: not loaded due to errors. 
    BASH

    Для решения проблемы добавьте в файл доменной зоны A-записи:

    ns1 IN A <IP-адрес первичного сервера имён>
    ns2 IN A <IP-адрес вторичного сервера имён>
    BASH
  2. Ресурсная запись CNAME не должна быть указана вместе с A-записью для одного поддомена:

    me.domain.name.   IN      A       8.8.8.8
    me.domain.name.   IN      CNAME   google.com
    BASH

    Это приводит к ошибке вида:

    zone domain.name/IN: loading from master file /var/named/domain.name failed: CNAME and other data
    zone domain.name/IN: not loaded due to errors.
    BASH

    Также обратите внимание, что CNAME-запись нельзя создать для доменов второго уровня.

Диагностика вторичного (slave) DNS-сервера


Проверка связи с первичным DNS-сервером

Подключитесь к первичному серверу по telnet к 53 порту:

telnet <IP-адрес первичного сервера> 53
BASH

Если подключиться не удаётся, проверьте настройки файервола на первичном и вторичном серверах.

Проверка возможности передачи доменной зоны от первичного сервера к вторичному

Выполните команду:

dig <домен> @<IP-адрес> axfr
BASH

<домен> — доменное имя.

<IP-адрес> — адрес, указанный на первичном сервере в директиве transfer-source для пространства доменных имён в конфигурационном файле BIND. Можно также узнать на форме редактирования пользователя, который является владельцем доменной зоны: Учётные записи → Пользователи → Изменить → поле IP-адрес.

Ответ должен быть вида:

dig domain.name @1.1.1.1 axfr
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> domain.name @1.1.1.1 axfr
;; global options: +cmd
domain.name.		3600	IN	SOA	mary.me. root.example.com. 2014041800 10800 3600 604800 86400
domain.name.		3600	IN	NS	ns1.example.com.
domain.name.		3600	IN	NS	ns2.example.com.
domain.name.		3600	IN	TXT	"v=spf1 ip4:1.1.1.1 a mx ~all"
domain.name.		3600	IN	MX	10 mail.domain.name.
domain.name.		3600	IN	A	1.1.1.1
ftp.domain.name.	3600	IN	A	1.1.1.1
mail.domain.name.	3600	IN	A	1.1.1.1
pop.domain.name.	3600	IN	A	1.1.1.1
smtp.domain.name.	3600	IN	A	1.1.1.1
www.domain.name.	3600	IN	A	1.1.1.1
domain.name.		3600	IN	SOA	mary.me. root.example.com. 2014041800 10800 3600 604800 86400
BASH

Частые причины проблемы:

  1. Для пользователя указан приватный IP-адрес, который недоступен со вторичного сервера.
  2. Адрес вторичного сервера не указан в allow-transfer доменной зоны. Чтобы добавить адрес вторичного сервера зайдите в DNSmanager под пользователем, который является владельцем доменной зоны → Настройки → Настройки DNS → поле Allow-transfer.

Права доступа

Если во время передачи доменной зоны от первичного сервера к вторичному в логе есть строки вида:

zone domain.name/IN: loading from master file /var/named/domain.name failed: permission denied
one domain.name/IN: not loaded due to errors.
BASH

Причина проблемы в отсутствии прав на файл доменной зоны. Файл доменной зоны должен принадлежать владельцу, от имени которого работает BIND:

ls -ld /var/named/domain.name
-rw------- 1 named named 395 Апр 18 06:24 /var/named/domain.name
BASH

Также проверьте права на директорию /var/named:

ls -ld /var/named/
drwxr-x--- 5 root named 4096 Апр 18 06:32 /var/named/
BASH