Проблемы с DNS-сервером
При возникновении проблем с DNS-сервером проведите диагностику первичного и вторичного DNS-сервера. В этой статье приведены способы диагностики и расположение основных конфигурационных и лог-файлов.
Файлы и логи DNS-серверов
Файлы | CentOS | Debian, Ubuntu |
---|---|---|
Конфигурационный файл BIND | /etc/named.conf | /etc/bind/named.conf |
Файлы доменных зон BIND | /var/named/* | /etc/bind/domains |
Конфигурационный файл PowerDNS | /etc/pdns/pdns.conf | /etc/powerdns/pdns.conf |
Записи доменных зон PowerDNS.Записи хранятся в базах данных MySQL, отдельная база на каждое пространство имён. | Пространство по умолчанию — powerdns. | Пространство по умолчанию — pdns. |
Логи BIND и PowerDNS | /var/log/messages | /var/log/syslog |
Диагностика первичного (master) DNS-сервера
DNS-сервер не отдаёт доменную зону
Проверьте, что первичный DNS-сервер отдаёт зону:
dig <домен> @<IP-адрес> ANY +short
Ответ на запрос должен быть вида:
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
DNS-сервер не запущен или порт DNS (53) закрыт, если получен ответ вида:
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
Если получен пустой ответ, значит у DNS-сервера нет информации о домене. Возможно, он не смог загрузить доменную зону. В этом случае смотрите лог.
DNS-сервер BIND не смог загрузить доменную зону
Наиболее распространённая причина проблемы в том, что файл доменной зоны некорректный.
Проверьте следующее:
- Если домен имеет сервера имён в своей же зоне, то в файле доменной зоны должны быть указаны ресурсные A-записи для серверов имён. Например, домен domain.com и сервера имён ns1.domain.com, ns2.domain.com. Отсутствие A-записей в логе выглядит так: Для решения проблемы добавьте в файл доменной зоны 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.
ns1 IN A <IP-адрес первичного сервера имён> ns2 IN A <IP-адрес вторичного сервера имён>
- Ресурсная запись CNAME не должна быть указана вместе с A-записью для одного поддомена: Это приводит к ошибке вида:
me.domain.name. IN A 8.8.8.8 me.domain.name. IN CNAME google.com
Также CNAME-запись нельзя создать для доменов второго уровня.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.
Диагностика вторичного (slave) DNS-сервера
Проверка связи с первичным DNS-сервером
Подключитесь к первичному серверу по telnet к 53 порту:
telnet <IP-адрес первичного сервера> 53
Если подключиться не удаётся, проверьте настройки файервола на первичном и вторичном серверах.
Проверка возможности передачи доменной зоны от первичного сервера к вторичному
Выполните команду:
dig <домен> @<IP-адрес> axfr
Ответ должен быть вида:
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
Частая причина проблемы: в файле доменной зоны DNS-сервера в allow-transfer указан приватный IP-адрес, который недоступен со вторичного сервера.
Права доступа
Если во время передачи доменной зоны от первичного сервера к вторичному в логе есть строки вида:
zone domain.name/IN: loading from master file /var/named/domain.name failed: permission denied
one domain.name/IN: not loaded due to errors.
То причина проблемы в отсутствии прав на файл доменной зоны. Файл доменной зоны должен принадлежать владельцу, от имени которого работает BIND:
ls -ld /var/named/domain.name
-rw------- 1 named named 395 Апр 18 06:24 /var/named/domain.name
Проверьте права на директорию /var/named:
ls -ld /var/named/
drwxr-x--- 5 root named 4096 Апр 18 06:32 /var/named/