BIND: query failed (SERVFAIL)

Автор: | 01/11/2012
 

Свежеустановленный и настроенный BIND упорно не хотел отдавать зону для только что добавленного домена:

$ dig @77.120.106.40 website.co.ua


;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 39605

;; QUESTION SECTION:
;website.co.ua. IN A

В HEADER вывода видно что «status: SERVFAIL«.

В логах BIND-a точного описания ошибки не было:

# tail /var/log/bind/named.log
debug 1: client 82.144.220.27#62890: query failed (SERVFAIL) for website.co.ua/IN/A at query.c:3919

Файл зоны на первый взгляд ошибок не содержал:

$TTL 3600

@ IN SOA ns1.website.co.ua. admin.website.co.ua. (
20120110001 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
@ IN NS ns1.website.co.ua.
@ IN NS ns3.dc.volia.com.
@ MX 10 mx.website.co.ua.
@ IN A 77.120.106.40
www IN A 77.120.106.40
mx IN A 77.120.106.40
ns1 IN A 77.120.106.40

BIND при рестарте тоже об ошибках ничего не сообщал:

# /etc/rc.d/named restart
Stopping named.
Starting named.

Проблема нашлась с помощью named-checkzone:

# named-checkzone website.co.ua /var/named/zones/master/website.co.ua
dns_rdata_fromtext: /var/named/zones/master/website.co.ua:3: near ‘20120110001’: out of range
zone website.co.ua/IN: loading from master file /var/named/zones/master/website.co.ua failed: out of range
zone website.co.ua/IN: not loaded due to errors.

Из вывода видно, что серийный номер ( 20120110001′: out of range ) имеет неверное значение.

В данном случае, ошибка — лишний 0 после 20120110. Исправим файл, приведя серийный номер к виду

2012011001      ; Serial

Ещё раз проверим файл зоны:

# named-checkzone website.co.ua /var/named/zones/master/website.co.ua
zone website.co.ua/IN: loaded serial 2012011001
OK

Перезагрузим сервер:

# /etc/rc.d/named restart
Stopping named.
Starting named.

Попробуем получить ответ:

$ dig @77.120.106.40 website.co.ua

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41434
;; QUESTION SECTION:
;website.co.ua. IN A

;; ANSWER SECTION:
website.co.ua. 3600 IN A 77.120.106.40

… Профит!