dig: отладка DNS-запросов в CLI
DNS- resolver отдал не тот адрес, клиенты не видят обновление, или просто непонятно, какой сервер сейчас отвечает на запросы. dig (Domain Information Groper) — стандартный инструмент для диагностики DNS из терминала. Работает на Linux, macOS, есть в Windows через WSL.
Установка
Базовые флаги
dig имеет два класса опций: короткие флаги (начинаются с -) и ключевые слова с +. Первые управляют поведением запроса, вторые — форматом вывода.
Без аргументов вывод избыточен: много технической информации в header. Для отладки берём нужные куски.
| Флаг | Назначение |
|---|---|
-b <addr> | Исходящий IP-адрес (если несколько интерфейсов) |
-f <file> | Читать запросы из файла, по одному на строку |
-p <port> | Нестандартный порт DNS-сервера |
-t <type> | Тип записи: A, AAAA, MX, TXT, SOA, NS, CNAME, ANY |
-c <class> | Класс сети (по умолчанию IN — Internet) |
-x <addr> | Обратный запрос (PTR) |
-6 | Принудительный IPv6 |
-4 | Принудительный IPv4 |
Быстрый ответ: +short
Для скриптов и быстрой проверки:
Если запись не существует — пустой вывод. Если CNAME — увидите финальный адрес, но не цепочку.
Для AAAA-записей:
+short не показывает TTL и не гарантирует, что это итоговый ответ. CNAME-петля отдаст последнюю запись в цепочке, а не ошибку.
Полный ответ: +noall +answer
Когда нужен TTL, каноническое имя и все записи разом:
TTL в секундах. Если видите маленькое значение (60–300) — запись часто обновляется.
Подробный ответ с timing:
Обратный запрос: -x
Обратная зона: IP → имя хоста.
Не все PTR-зоны заполнены. Пустой ответ при -x — нормально, особенно для клиентских адресов.
IPv6: -6
Принудительный IPv6-транспорт к DNS-серверу:
Если хотите AAAA-запись через IPv4-транспорт — просто запрашивайте тип:
Трассировка цепочки: +trace
Показывает путь от корневых серверов до финального ответа:
Вывод разбит на секции: . (root), TLD (.com), авторитативный NS, ответ.
+trace медленная — обходит иерархию рекурсивно. Используйте для диагностики NXDOMAIN и SERVFAIL.
Определенный resolver: @server
По умолчанию dig берёт системный resolver из /etc/resolv.conf. Явное указание — для сравнения ответов или обхода локального кэша:
AXFR-трансфер работает только если NS разрешает.
AXFR всей зоны — чувствительная операция. Не делайте так на чужих NS без необходимости.
Типичные сценарии
Проверка SOA и NS зоны
Serial в SOA — если вы обновили записи, а он не вырос, трансфер не произошёл.
TTL конкретной записи
300 секунд — низкий TTL, нормально для часто меняющихся записей. Для статики обычно 3600+.
CNAME chain
Цепочка отображается целиком. Если редирект сломался на середине — на каком этапе NXDOMAIN или SERVFAIL станет ясно из вывода.
Сравнение ответов разных resolver’ов
Если адреса разные — проблема не на стороне вашего сервиса, а в конкретном resolver или propagate записи.
Анализ SERVFAIL
Смотрите flags: SERVFAIL в ответе означает NS не смог получить данные. Проверяйте, что запрашиваемый тип записи вообще существует в зоне.
ANY-запрос (осторожно)
Deprecated в продакшене. Но для быстрой диагностики всех типов записи на новом NS — сойдёт.