(Переписываю большую часть этого вопроса, поскольку многие из моих исходных тестов не имеют отношения к новой информации)
У меня проблемы с DNS-серверами Server 2012R2. Самым большим побочным эффектом этих проблем является то, что электронные письма Exchange не проходят. Обменивайтесь запросами для записей AAAA перед попыткой записи A. Когда он видит SERVFAIL для записи AAAA, он даже не пробует записи A, он просто отказывается.
Для некоторых доменов при запросе к моим DNS-серверам Active Directory я получаю SERVFAIL вместо NOERROR без каких-либо результатов.
Я пробовал это с нескольких разных контроллеров домена Server 2012R2, на которых работает DNS. Один из них - это совершенно отдельный домен в другой сети за другим брандмауэром и подключением к Интернету.
Два адреса, которые, как я знаю, вызывают эту проблему: smtpgw1.gov.on.ca
и mxmta.owm.bell.net
Я использовал dig
на Linux-машине, чтобы проверить это (192.168.5.5 - мой контроллер домена):
grant@linuxbox:~$ dig @192.168.5.5 smtpgw1.gov.on.ca -t AAAA
; <<>> DiG 9.9.5-3ubuntu0.5-Ubuntu <<>> @192.168.5.5 smtpgw1.gov.on.ca -t AAAA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 56328
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;smtpgw1.gov.on.ca. IN AAAA
;; Query time: 90 msec
;; SERVER: 192.168.5.5#53(192.168.5.5)
;; WHEN: Wed Oct 21 14:09:10 EDT 2015
;; MSG SIZE rcvd: 46
Но запросы к общедоступному контроллеру домена работают должным образом:
grant@home-ssh:~$ dig @4.2.2.1 smtpgw1.gov.on.ca -t AAAA
; <<>> DiG 9.9.5-3ubuntu0.5-Ubuntu <<>> @4.2.2.1 smtpgw1.gov.on.ca -t AAAA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 269
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 8192
;; QUESTION SECTION:
;smtpgw1.gov.on.ca. IN AAAA
;; Query time: 136 msec
;; SERVER: 4.2.2.1#53(4.2.2.1)
;; WHEN: Wed Oct 21 14:11:19 EDT 2015
;; MSG SIZE rcvd: 46
Как я уже сказал, я пробовал это в двух разных сетях и доменах. Один из них - это совершенно новый домен, в котором определенно есть все настройки по умолчанию для DNS. Другой был перенесен на Server 2012, поэтому некоторые старые настройки 2003/2008 годов могли быть перенесены. Я получаю одинаковые результаты на обоих.
Отключение EDNS с помощью dmscnd /config /enableednsprobes 0
исправляет это. Я вижу много результатов поиска о том, что EDNS является проблемой в Server 2003, но мало что совпадает с тем, что я вижу в Server 2012. Ни один из брандмауэров не имеет проблем с EDNS. Однако отключение EDNS должно быть временным обходным решением - это предотвращает использование DNSSEC и может вызвать другие проблемы.
Я также видел несколько сообщений о проблемах с Server 2008R2 и EDNS, но в тех же сообщениях говорится, что в Server 2012 все исправлено, поэтому он должен работать правильно.
Я также попытался включить журнал отладки для DNS. Я вижу пакеты, которые ожидал, но это не дает мне большого представления о том, почему он возвращает SERVFAIL. Вот соответствующие части журнала отладки DNS-сервера:
Первый пакет - запрос от клиента к моему DNS-серверу
10/16/2015 9:42:29 AM 0974 PACKET 000000EFF1BF01A0 UDP Rcv 172.16.0.254 a61e Q [2001 D NOERROR] AAAA (7)smtpgw1(3)gov(2)on(2)ca(0) UDP question info at 000000EFF1BF01A0 Socket = 508 Remote addr 172.16.0.254, port 50764 Time Query=4556080, Queued=0, Expire=0 Buf length = 0x0fa0 (4000) Msg length = 0x002e (46) Message: XID 0xa61e Flags 0x0120 QR 0 (QUESTION) OPCODE 0 (QUERY) AA 0 TC 0 RD 1 RA 0 Z 0 CD 0 AD 1 RCODE 0 (NOERROR) QCOUNT 1 ACOUNT 0 NSCOUNT 0 ARCOUNT 1 QUESTION SECTION: Offset = 0x000c, RR count = 0 Name "(7)smtpgw1(3)gov(2)on(2)ca(0)" QTYPE AAAA (28) QCLASS 1 ANSWER SECTION: empty AUTHORITY SECTION: empty ADDITIONAL SECTION: Offset = 0x0023, RR count = 0 Name "(0)" TYPE OPT (41) CLASS 4096 TTL 0 DLEN 0 DATA Buffer Size = 4096 Rcode Ext = 0 Rcode Full = 0 Version = 0 Flags = 0
Второй пакет - запрос от моего DNS-сервера к их DNS-серверу.
10/16/2015 9:42:29 AM 0974 PACKET 000000EFF0A22160 UDP Snd 204.41.8.237 3e6c Q [0000 NOERROR] AAAA (7)smtpgw1(3)gov(2)on(2)ca(0) UDP question info at 000000EFF0A22160 Socket = 9812 Remote addr 204.41.8.237, port 53 Time Query=0, Queued=0, Expire=0 Buf length = 0x0fa0 (4000) Msg length = 0x0023 (35) Message: XID 0x3e6c Flags 0x0000 QR 0 (QUESTION) OPCODE 0 (QUERY) AA 0 TC 0 RD 0 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 "(7)smtpgw1(3)gov(2)on(2)ca(0)" QTYPE AAAA (28) QCLASS 1 ANSWER SECTION: empty AUTHORITY SECTION: empty ADDITIONAL SECTION: empty
Третий пакет - ответ от их DNS-сервера (NOERROR)
10/16/2015 9:42:29 AM 0974 PACKET 000000EFF2188100 UDP Rcv 204.41.8.237 3e6c R Q [0084 A NOERROR] AAAA (7)smtpgw1(3)gov(2)on(2)ca(0) UDP response info at 000000EFF2188100 Socket = 9812 Remote addr 204.41.8.237, port 53 Time Query=4556080, Queued=0, Expire=0 Buf length = 0x0fa0 (4000) Msg length = 0x0023 (35) Message: XID 0x3e6c Flags 0x8400 QR 1 (RESPONSE) OPCODE 0 (QUERY) AA 1 TC 0 RD 0 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 "(7)smtpgw1(3)gov(2)on(2)ca(0)" QTYPE AAAA (28) QCLASS 1 ANSWER SECTION: empty AUTHORITY SECTION: empty ADDITIONAL SECTION: empty
Четвертый пакет - ответ моего DNS-сервера клиенту (SERVFAIL)
10/16/2015 9:42:29 AM 0974 PACKET 000000EFF1BF01A0 UDP Snd 172.16.0.254 a61e R Q [8281 DR SERVFAIL] AAAA (7)smtpgw1(3)gov(2)on(2)ca(0) UDP response info at 000000EFF1BF01A0 Socket = 508 Remote addr 172.16.0.254, port 50764 Time Query=4556080, Queued=4556080, Expire=4556083 Buf length = 0x0fa0 (4000) Msg length = 0x002e (46) Message: XID 0xa61e 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 1 QUESTION SECTION: Offset = 0x000c, RR count = 0 Name "(7)smtpgw1(3)gov(2)on(2)ca(0)" QTYPE AAAA (28) QCLASS 1 ANSWER SECTION: empty AUTHORITY SECTION: empty ADDITIONAL SECTION: Offset = 0x0023, RR count = 0 Name "(0)" TYPE OPT (41) CLASS 4000 TTL 0 DLEN 0 DATA Buffer Size = 4000 Rcode Ext = 0 Rcode Full = 2 Version = 0 Flags = 0
Другие примечания:
dig @192.168.5.5 -t AAAA serverfault.com
возвращает NOERROR и никаких результатов. То же самое для google.com
правильно возвращает адреса Google IPv6.Я установил еще один компьютер Server 2012R2, не подключенный к домену, и установил роль DNS-сервера и протестировал его с помощью команды nslookup -type=aaaa smtpgw1.gov.on.ca localhost
. У него нет таких же проблем.
Обе виртуальные машины находятся на одном хосте и в одной сети, что устраняет любые проблемы с сетью / брандмауэром. Теперь все зависит либо от уровня исправления, либо от члена домена / контроллера домена.
Применил все обновления, без разницы. Пройдено, чтобы дважды проверить, есть ли какие-либо различия в конфигурации между моим новым тестовым сервером и настройками DNS моего контроллера домена, и есть - контроллер домена имеет настройки пересылки.
Теперь я уверен, что пробовал с пересылками и без них в моих первоначальных тестах, но я пробовал только с помощью dig
с машины linux. Когда я использую nslookup на компьютере с Windows, я получаю немного разные результаты с настройкой пересылки и без нее (пробовал с Google, OpenDNS, 4.2.2.1 и DNS-серверами моего интернет-провайдера).
С комплектом экспедитора я получаю Server failed
.
Без пересылки (поэтому он использует корневые DNS-серверы) я получаю No IPv6 address (AAAA) records available for smtpgw1.gov.on.ca
.
Но это все еще не то же самое, что я получаю для других доменов, у которых нет записей IPv6 - nslookup в Windows просто не возвращает результатов для других доменов.
С экспедиторами или без них, dig
все еще показывает SERVFAIL
для этого имени при запросе моего DNS-сервера Windows.
Есть небольшая разница между проблемным доменом и другими, которые кажутся актуальными, даже если я не задействую свой DNS-сервер Windows:
dig -t aaaa @8.8.8.8 smtpgw1.gov.on.ca
не имеет ответов и не имеет раздела с полномочиями.
dig -t aaaa @8.8.8.8 serverfault.com
не возвращает ответов, но имеет раздел полномочий. То же самое и с большинством других доменов, которые я пробую, независимо от того, какой преобразователь я использую.
Так почему же этот раздел полномочий отсутствует и почему DNS-сервер Windows рассматривает его как сбой, в то время как другие DNS-серверы этого не делают?
Я еще немного заглянул в сеть и почитал. Запрос на запись AAAA, если она не существует, возвращает SOA. Оказывается, SOA предназначена для другого домена, который запрашивается. Я подозреваю, что именно поэтому Windows отклоняет ответ. Запросите AAAA для mx.atomwide.com. Ответ SOA для lgfl.org.uk. Я посмотрю, сможем ли мы добиться прогресса с этой информацией. РЕДАКТИРОВАТЬ: Для справки в будущем, временное отключение «Защищенного кеша от загрязнения» позволит выполнить запрос. Не идеально, но доказывает, что проблема в хитрой DNS-записи. RFC4074 также является хорошим справочником - Введение и Раздел.
В соответствии с KB832223
Причина
Эта проблема возникает из-за функциональных возможностей механизмов расширения для DNS (EDNS0), которые поддерживаются в Windows Server DNS.
EDNS0 допускает больший размер пакетов протокола дейтаграмм пользователя (UDP). Однако некоторые программы брандмауэра могут не разрешать пакеты UDP, размер которых превышает 512 байт. Следовательно, эти DNS-пакеты могут быть заблокированы брандмауэром.
Microsoft предлагает следующее решение:
разрешение
Чтобы решить эту проблему, обновите программу брандмауэра, чтобы она распознавала и разрешала пакеты UDP, размер которых превышает 512 байт. Для получения дополнительной информации о том, как это сделать, обратитесь к производителю вашего брандмауэра.
Microsoft предлагает следующее решение проблемы:
Обходной путь
Чтобы обойти эту проблему, отключите функцию EDNS0 на DNS-серверах Windows. Для этого выполните следующие действия:
В командной строке введите следующую команду и нажмите Enter:
dnscmd /config /enableednsprobes 0
Примечание. Введите в этой команде 0 (ноль), а не букву «O» после «enableednsprobes».