Назад в блог

Диагностика DNS: nslookup, dig, DoH

· 7 мин чтения

Кратко: DNS-проблемы - одни из самых частых и трудно диагностируемых причин сбоев, потому что «у меня DNS работает» не значит, что он работает для ваших клиентов. Вот обзор практических инструментов и процедур.

Кратко: DNS-проблемы - одни из самых частых и трудно диагностируемых причин сбоев, потому что «у меня DNS работает» не значит, что он работает для ваших клиентов. Вот обзор практических инструментов и процедур.

Самые частые проблемы DNS

  • Истекла регистрация домена - весь DNS перестаёт работать.
  • Неверная запись A/AAAA - после миграции сервера забыли обновить.
  • Отсутствующий CNAME / MX - email не работает, при этом сайт работает.
  • TTL не подготовлен к быстрым изменениям - кэши провайдеров ещё отдают старые данные.
  • Ошибка DNSSEC - валидаторы отклоняют неподписанные или плохо подписанные записи.
  • Сбой Geo-DNS - резолвер из определённого региона получает неверный ответ.

nslookup: самая простая команда

Доступна во всех ОС без установки. Использует системный DNS-сервер по умолчанию, но его можно явно указать вторым аргументом.

$ nslookup epulz.io
Server:    127.0.0.53
Address:   127.0.0.53#53

Non-authoritative answer:
Name:      epulz.io
Address:   87.197.115.180

# Явно использовать Cloudflare DNS
$ nslookup epulz.io 1.1.1.1

# Конкретный тип записи
$ nslookup -type=MX gmail.com 8.8.8.8
$ nslookup -type=TXT _dmarc.epulz.io 1.1.1.1

dig: подробный DNS-запрос для Unix

dig (Domain Information Groper) значительно подробнее и гибче. Часть пакета bind-utils или dnsutils.

$ dig epulz.io

;; QUESTION SECTION:
;epulz.io.                      IN      A

;; ANSWER SECTION:
epulz.io.               300     IN      A       87.197.115.180

;; Query time: 12 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: ...

Ключевые поля:

  • TTL (300) = секунды, на которые резолвер может кэшировать ответ.
  • ANSWER SECTION = результат.
  • SERVER = какой DNS-резолвер ответил.
  • Query time = длительность - полезно при отладке медленного DNS.

Практические команды

# Краткий ответ (только IP)
$ dig +short epulz.io
87.197.115.180

# Все записи
$ dig epulz.io ANY

# Трассировка всей DNS-иерархии (от root-серверов)
$ dig +trace epulz.io

# Reverse lookup
$ dig -x 87.197.115.180

# Конкретный резолвер
$ dig @8.8.8.8 epulz.io
$ dig @1.1.1.1 epulz.io
$ dig @9.9.9.9 epulz.io

# Валидация DNSSEC
$ dig +dnssec epulz.io

DNS-over-HTTPS (DoH): когда нет UDP/53

В некоторых сетях (корпоративные фаерволы, мобильные данные с блокировками) традиционный DNS-порт 53 заблокирован. DoH упаковывает DNS-запросы в HTTPS-запросы - проходят везде, где работает 443.

# Endpoint DoH Cloudflare
$ curl -s "https://cloudflare-dns.com/dns-query?name=epulz.io&type=A" \
       -H "Accept: application/dns-json" | jq

# Google DoH
$ curl -s "https://dns.google/resolve?name=epulz.io&type=MX" | jq

Онлайн DoH-клиент с приятным UI есть и на - без установки.

Алгоритм при «домен не работает»

  1. Проверьте регистрацию. whois yourdomain.com или через регистратора. Если истекла, больше ничего исправить нельзя.
  2. Проверьте NS-записи. dig NS yourdomain.com @8.8.8.8. Возвращаются ли серверы имён, ответственные за домен? Совпадают ли с теми, что в панели регистратора?
  3. Проверьте A-запись. dig yourdomain.com @8.8.8.8. Возвращает правильный IP?
  4. Протестируйте из внешней сети (мобильные данные, VPN, онлайн-инструмент). У вас самих может быть закэшированы старые данные.
  5. Проверьте TTL. Если только что изменили запись, подождите хотя бы исходный TTL (по умолчанию 1-24 часа).
  6. Проверьте DNSSEC. Если используете, цепочка подписей может быть повреждена. dig +dnssec yourdomain.com покажет флаг ad при успехе.

DNS-распространение: сколько занимает?

«DNS-распространение» - немного вводящий в заблуждение термин. DNS не распространяется к вам - ваши резолверы скачивают ответ и кэшируют согласно TTL. Только после истечения TTL делают новый запрос.

Практические последствия:

  • Планируете миграцию? Снизьте TTL до 60-300 секунд хотя бы за 48 часов.
  • Старый IP останется действительным для некоторых клиентов ещё долго после изменения. Не выключайте старый сервер сразу.
  • Cloud-провайдеры (Cloudflare, AWS Route 53) имеют быстрый TTL и cache invalidation, но конечный клиент всё равно должен ждать TTL своего резолвера.

Вывод

DNS - инфраструктурный клей, который все принимают как данность, пока он не перестанет работать. Регулярный мониторинг DNS-записей (A, NS, MX, их TTL и DNSSEC-валидация) выявит проблему до того, как клиент сообщит о ней по телефону.

Мониторинг DNS и истечения WHOIS

ePulz.io отслеживает записи A/AAAA/MX/NS и истечение регистрации домена. 7 дней бесплатно.

Запустить мониторинг →


Попробуйте ePulz.io бесплатно - 7 дней без банковской карты.

Создать аккаунт