У меня есть контроллер домена Windows 2008 R2, который также является DNS-сервером. При разрешении определенных TLD возвращается SERVFAIL:
$ dig bogus.
; <<>> DiG 9.8.1 <<>> bogus.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31919
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;bogus. IN A
Я получаю тот же результат для реального TLD, как и com.
при запросе DC, как показано выше. Сравните с BIND-сервером, который работает как положено:
$ dig bogus. @128.59.59.70
; <<>> DiG 9.8.1 <<>> bogus. @128.59.59.70
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 30141
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;bogus. IN A
;; AUTHORITY SECTION:
. 10800 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2012012501 1800 900 604800 86400
;; Query time: 18 msec
;; SERVER: 128.59.59.70#53(128.59.59.70)
;; WHEN: Wed Jan 25 14:09:14 2012
;; MSG SIZE rcvd: 98
Точно так же, когда я запрашиваю свой DNS-сервер Windows с dig . any
, я получаю SERVFAIL, но серверы BIND возвращают корневую зону, как и ожидалось.
Это похоже на проблему, описанную в http://support.microsoft.com/kb/968372, за исключением того, что я использую два сервера пересылки (128.59.59.70 сверху, а также 128.59.62.10) и обращаюсь к корневым подсказкам, поэтому предварительные условия для выставить вопрос не то же самое. Тем не менее, я также применил MaxCacheTTL
исправление реестра, как описано, и перезапустил DNS и весь сервер, но проблема сохраняется. Проблема возникает на всех контроллерах домена в этом домене и возникла с полугода назад, даже если серверы получают автоматические обновления Windows.
РЕДАКТИРОВАТЬ
Вот журнал отладки. Клиент 160.39.114.110, это моя рабочая станция.
1/25/2012 2:16:01 PM 0E08 PACKET 000000001EA6BFD0 UDP Rcv 160.39.114.110 2e94 Q [0001 D NOERROR] A (5)bogus(0)
UDP question info at 000000001EA6BFD0
Socket = 508
Remote addr 160.39.114.110, port 49710
Time Query=1077016, Queued=0, Expire=0
Buf length = 0x0fa0 (4000)
Msg length = 0x0017 (23)
Message:
XID 0x2e94
Flags 0x0100
QR 0 (QUESTION)
OPCODE 0 (QUERY)
AA 0
TC 0
RD 1
RA 0
Z 0
CD 0
AD 0
RCODE 0 (NOERROR)
QCOUNT 1
ACOUNT 0
NSCOUNT 0
ARCOUNT 0
QUESTION SECTION:
Offset = 0x000c, RR count = 0
Name "(5)bogus(0)"
QTYPE A (1)
QCLASS 1
ANSWER SECTION:
empty
AUTHORITY SECTION:
empty
ADDITIONAL SECTION:
empty
1/25/2012 2:16:01 PM 0E08 PACKET 000000001EA6BFD0 UDP Snd 160.39.114.110 2e94 R Q [8281 DR SERVFAIL] A (5)bogus(0)
UDP response info at 000000001EA6BFD0
Socket = 508
Remote addr 160.39.114.110, port 49710
Time Query=1077016, Queued=0, Expire=0
Buf length = 0x0fa0 (4000)
Msg length = 0x0017 (23)
Message:
XID 0x2e94
Flags 0x8182
QR 1 (RESPONSE)
OPCODE 0 (QUERY)
AA 0
TC 0
RD 1
RA 1
Z 0
CD 0
AD 0
RCODE 2 (SERVFAIL)
QCOUNT 1
ACOUNT 0
NSCOUNT 0
ARCOUNT 0
QUESTION SECTION:
Offset = 0x000c, RR count = 0
Name "(5)bogus(0)"
QTYPE A (1)
QCLASS 1
ANSWER SECTION:
empty
AUTHORITY SECTION:
empty
ADDITIONAL SECTION:
empty
Каждый параметр в окне журнала отладки был отмечен, кроме «фильтр по IP». Напротив, когда я запрашиваю, скажем, account.google.com, я вижу, как DNS-сервер выходит к своему серверу пересылки (например, 128.59.59.70). В этом случае я не видел пакетов, отправляемых с моего DNS-сервера, хотя bogus.
он не находился в кеше (журнал отладки уже запущен, и я впервые запрашиваю этот сервер bogus.
или любой TLD). Он только что возвратил SERVFAIL, не обращаясь ни к какому другому DNS-серверу, как в статье Microsoft KB, указанной выше.