Задержка связана с запросом AAAA

Я имею автономное, изолировал сеть, запускающую смешанные системы Windows и Linux с сервером Windows 2008 R2, выполняющим AD обязанности и DNS.

Я вижу 5-секундные задержки с использованием getaddrinfo в системах Linux.

В Wireshark я вижу (C-> S значит клиент для сервера DNS):

t=0.000   C->S Query A     foo.example.com    ID=0x1111
t=0.000   C->S Query AAAA  foo.example.com    ID=0x2222
t=0.004   S->C Response to 0x2222, No error
          (Query is echoed)
          Authoritative nameservers:
             example.com: type SOA, class IN, mname svr01.example.com
               Name: example.com
               Type: SOA
               Class: IN
               TTL: 1 hour
               Primary name server: svr01.example.com
               Refresh interval: 15 minutes
               Retry interval: 10 minutes
               Expiration limit: 1 day
               Minimum TTL: 1 hour

[5 second delay]

t=5.004   C->S Query A     foo.example.com    ID=0x1111
t=5.005   S->C Query response A  192.168.1.17'

Если я выполню тот же запрос снова, вскоре после этого, то я не буду видеть задержки, как ожидалось:

t=0.000   C->S Query A     foo.example.com    ID=0x3333
t=0.000   C->S Query AAAA  foo.example.com    ID=0x4444
t=0.001   S->C Query response A  192.168.1.17'

Я могу продолжить получать непосредственные ответы в течение некоторого промежутка времени. Через некоторое время (все еще экспериментирующий) задержка возвратится.

Что продолжается здесь? Если я использую gethostbyname() (который только делает IPv4), или nslookup foo.example.com, нет никакой задержки.

Дополнительная информация:

  • IPv6 отключен на сервере NICs

Обновление:

Этот ответ на Просит, чтобы Ubuntu предложила добавить

options single-request

кому: /etc/resolv.conf. Это, казалось, исправляло проблему для меня.

Однако мне все еще любопытно:

  • Что на самом деле означает запись SOA
  • Почему сервер не отвечает в первый раз на запрос
2
задан 13 April 2017 в 15:22
2 ответа

Ваш DNS-сервер работает с ошибками. На DNS-сервер отправляются два запроса, но он отправляет только один ответ. Клиент делает то, что должны делать клиенты в этом случае, он ждет некоторое время, а затем повторно передает запрос.

Начальная задержка в 5 секунд может быть разумной для неинтерактивного использования. Но для интерактивного использования я бы посчитал, что это слишком много.

Правильным исправлением было бы обновить DNS-сервер до версии без ошибки или связаться с поставщиком, если исправление еще не выпущено. Все остальное - обходной путь.

Использование man resolv.conf в системе Ubuntu объяснит, какие параметры с одним запросом и с одним запросом и повторно открыть делать. Это два разных варианта обходного пути для известной ошибки в определенных DNS-серверах. Недостатком этих опций является то, что они замедляют разрешение имен примерно в два раза. Однако, учитывая, что ошибка, по-видимому, замедляет разрешение имен примерно в 1000 раз, вам все же может быть лучше использовать обходной путь.

При запросе несуществующей записи вы можете вместо этого получить ответ с записью SOA. Причина отправки не только кода ошибки, но и записи SOA заключается в том, что запись SOA содержит информацию, которая позволит кэшировать отрицательный результат.

1
ответ дан 3 December 2019 в 12:46

Правильный способ интерпретации захвата вашего пакета состоит в том, что вы видите отброшенные ответные пакеты для и , A и AAAA ] записывают ответы.

Запись SOA , кажется, сбивает вас с толку и заслуживает подробного рассмотрения:

  • Запись SOA на самом деле находится в разделе полномочий, а не в разделе ответов.
  • NXDOMAIN означает «нет записей с таким именем». Если есть другие записи с тем же именем, но разных типов, вы увидите ответ NOERROR с нулевыми записями в разделе ответов.
  • То, что вы видите, это ответ NOERROR с нулевыми ответами и разделом прав доступа, сообщающим, из какой зоны пришел этот ответ. Вы можете полностью игнорировать компонент SOA . Этот ответ сообщает вам, что не существует записи AAAA .

Теперь, когда мы установили, что ответ AAAA является правильно отформатированным пакетом, и то, что вы должны в этом сценарии, он полностью меняет контекст того, на что мы смотрим. Вы видите случаи, когда A ответов на записи теряются, в дополнение к AAAA ответам теряются. Ваше исследование предполагает, что ответы AAAA теряются чаще, но не исключительно.

Основываясь на предоставленной информации, мы не сможем объяснить, что здесь происходит. Вам необходимо настроить захват пакетов на самих DNS-серверах и определить следующие факторы:

  1. Действительно ли запросы, связанные с отсутствующими ответами, поступают на DNS-сервер?
  2. Если запросы поступают на DNS-сервер, являются ли они ответы действительно отправляются?
  3. Если сервер не отправляет ответы, должен ли ваш DNS-сервер получать эту информацию от другого DNS-сервера, который долго не отвечает? (время ожидания истекает при первой попытке, но запрос находится в кеше для второй попытки) Вы видите достаточно большую загрузку запросов, чтобы переполнять вашу очередь сокета ?
  4. Если сервер - ] отправляя ответы, какие устройства между сервером и клиентом могут терять пакеты? Есть ли у одного из ваших DNS-серверов проблемы с маршрутизацией по сравнению с другими? Кажется, что пакеты теряются со всех DNS-серверов, что указывает на проблему с сетью где-то между клиентом и сервером?

Как видите, здесь может происходить много вещей. Вам нужно будет сузить круг вопросов, чтобы исключить возможные варианты. Прошу прощения за то, что этот ответ не был окончательным, но это было намного больше, чем можно было бы описать в нескольких комментариях. Не стесняйтесь обновить свой вопрос.

0
ответ дан 3 December 2019 в 12:46

Теги

Похожие вопросы