Ошибка DNS-запроса при первой попытке, но второй запрос проходит успешно

Вопрос или проблема

У меня есть много систем Raspberry Pi, которые расположены в различных сетях, над которыми я не имею контроля.

Недавно я заметил, что в одной сети иногда, но не всегда первый DNS-запрос не выполняется, но второй может разрешить имя:

pi@pi:~ $ ping api.twilio.com
ping: unknown host api.twilio.com

pi@pi:~ $ ping api.twilio.com
PING nlb-api-public-c3207ffe0810c880.elb.us-east-1.amazonaws.com      
(18.211.224.155) 56(84) bytes of data.
...

api.twilio.com был только примером, я также смог воспроизвести это с другими доменными именами, такими как google.com.

Я надеялся, что nslookup даст мне больше подсказок:

pi@pi:~ $ ping api.twilio.com
ping: unknown host api.twilio.com
pi@pi:~ $ nslookup api.twilio.com
Server:         127.0.0.1
Address:        127.0.0.1#53

** server can't find api.twilio.com: REFUSED

pi@pi:~ $ ping api.twilio.com
PING nlb-api-public-c3207ffe0810c880.elb.us-east-1.amazonaws.com (18.208.54.140) 56(84) bytes of data.
^C
--- nlb-api-public-c3207ffe0810c880.elb.us-east-1.amazonaws.com ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3106ms

pi@pi:~ $ nslookup api.twilio.com
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
api.twilio.com  canonical name = virginia.us1.api-lb.twilio.com.
virginia.us1.api-lb.twilio.com  canonical name = nlb-api-public-c3207ffe0810c880.elb.us-east-1.amazonaws.com.
Name:   nlb-api-public-c3207ffe0810c880.elb.us-east-1.amazonaws.com
Address: 18.212.47.248
Name:   nlb-api-public-c3207ffe0810c880.elb.us-east-1.amazonaws.com
Address: 18.211.224.155
Name:   nlb-api-public-c3207ffe0810c880.elb.us-east-1.amazonaws.com
Address: 18.208.54.140

Я мог воспроизвести это поведение на различных системах, но не всегда. Иногда запрос, кажется, работает некоторое время, а затем, через какое-то время, это поведение снова появляется (я предполагаю, что это может происходить после истечения времени аренды DNS?).

Мой вопрос заключается в том, существуют ли лучшие способы выяснить, почему первый запрос иногда не работает правильно? Или еще лучше, если кто-то знает, что может вызывать проблему?

[Существуют ли] более эффективные способы выяснить, почему первый запрос иногда не работает корректно?

  • Узнать, какой DNS-сервер слушает на 127.0.0.1.
  • Если у него не включен лог, включить его и повторить тест.
  • Посмотреть логи.

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

Читать логи при диагностике проблем.

DNS работает по принципу того, кто ответит первым. Если ваш первый DNS-запрос не может найти IP-адрес, он передаст его второму. Если это займет слишком много времени, запрос истечет.

Я бы предложил проверить работу вашего DNS, индивидуально добавив оба DNS-сервера с 0.0.0.0 в качестве вторичного, чтобы протестировать, какой из них дает сбой. Какой бы из них ни был, возможно, он смотрит на 127.0.0.1 вместо DNS. Агент OpenDNS может это сделать. Проверьте ваши ручные настройки DNS. ifconfig -a покажет вам вашу полную IP-конфигурацию, или ip ad -a.

Ответ или решение

Ситуация с тем, что первый DNS-запрос иногда не срабатывает, а второй — работает, может быть вызвана несколькими факторами. Давайте рассмотрим потенциальные причины и способы диагностики этой проблемы.

Возможные причины

  1. Локальный DNS-сервер: Вы используете DNS-сервер, который находится по адресу 127.0.0.1. Это может быть кэшированный DNS-сервер (например, dnsmasq или systemd-resolved), который может неправильно обрабатывать запросы или не иметь актуальной информации в кэше.

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

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

Рекомендованные шаги по диагностике

  1. Проверьте, какой DNS-сервер слушает на 127.0.0.1:

    • Выясните, какой программный продукт отвечает за DNS на вашем устройстве. Это можно сделать, просмотрев конфигурации в файле /etc/resolv.conf или проверив, какой процесс слушает на порту 53.
  2. Включите логирование на локальном DNS-сервере:

    • Если это возможно, включите подробное логирование на вашем локальном DNS-сервере. Это позволит вам увидеть, какие запросы обрабатываются корректно, а какие — нет, а также причины отказов.
  3. Тестируйте запросы по отдельности:

    • Проверьте работоспособность DNS, когда вы добавляете альтернативный DNS-сервер (например, OpenDNS или Google DNS 8.8.8.8) в качестве основного и временно заменяете 127.0.0.1.
    • Для диагностики выполните команды ping и nslookup для отдельных DNS-серверов, чтобы выявить, какой из них вызывает проблему.
  4. Проверка конфигурации сети:

    • Убедитесь, что нет проблем с подключением к интернету. Вы можете использовать команды ifconfig или ip addr для проверки сетевой конфигурации и настройки маршрутизации.
  5. Посмотрите на время кэширования:

    • Проверьте настройки кэша на вашем локальном DNS-сервере. Возможно, время жизни (TTL) записей настроено так, что данные кэшируются слишком долго, что приводит к устаревшим записям.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...