dig: проверка DNS из консоли — 18 команд и разбор вывода по строкам
7 мин чтения
dig: проверка DNS из консоли — 18 команд и разбор вывода по строкам

dig: проверка DNS из консоли — 18 команд и разбор вывода по строкам

Онлайн-чекеры DNS показывают результат, но не показывают, откуда он взялся: из кэша, от вашего провайдера или действительно с авторитативного сервера. dig показывает весь ответ целиком — с флагами, кодом, TTL и временем запроса. Разбираем каждую строку и собираем набор готовых команд.

dig — утилита из пакета BIND для отправки произвольных DNS-запросов и разбора полных ответов сервера. В отличие от онлайн-сервисов она позволяет спросить конкретный сервер, конкретный тип записи и увидеть служебные поля ответа, по которым понятно, кэш это или нет и почему запрос не сработал.

Где взять dig

На десктопных Linux и macOS утилита обычно уже есть. В контейнерах и минимальных образах — почти никогда, потому что пакет с ней не входит в базовый набор.

Система Установка
Debian, Ubuntu apt install bind9-dnsutils
RHEL, Rocky, AlmaLinux, Fedora dnf install bind-utils
Alpine apk add bind-tools
macOS Уже в системе: /usr/bin/dig
Windows Нет и не будет — ISC свернула сборки под Windows. Только WSL

Синтаксис за тридцать секунд

dig [@сервер] [имя] [тип] [+опции]

dig example.com                 # A-запись через резолвер из resolv.conf
dig example.com MX              # почтовые серверы
dig @8.8.8.8 example.com NS     # спросить конкретный резолвер
dig +short example.com          # только результат, без обвязки

Порядок аргументов свободный: dig MX example.com и dig example.com MX работают одинаково.

Полный вывод и что означает каждая строка

; <<>> DiG 9.20.26 <<>> example.com A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41234
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;example.com.                   IN      A

;; ANSWER SECTION:
example.com.            300     IN      A       93.184.216.34

;; Query time: 23 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Sep 14 08:15:03 UTC 2026
;; MSG SIZE  rcvd: 56

Число 300 в строке ответа — это TTL в секундах: сколько резолверы имеют право держать запись в кэше. При смене IP именно оно определяет, сколько вы будете ждать переключения.

Флаги в заголовке — самое полезное поле

В строке flags: перечислены только установленные биты. По ним читается, откуда пришёл ответ.

Флаг Расшифровка Что это значит на практике
qr Query Response Это ответ, а не запрос. Есть всегда
aa Authoritative Answer Ответ от авторитативного сервера, не из кэша. Его отсутствие — признак кэша
tc Truncated Ответ не влез в UDP, нужен повтор по TCP
rd Recursion Desired Клиент просил рекурсию. Снимается через +norecurse
ra Recursion Available Сервер умеет рекурсию. rd без ra — сервер авторитативный
ad Authentic Data DNSSEC-подпись проверена и валидна
cd Checking Disabled Клиент просил не валидировать DNSSEC

Коды ответа: что означает status

Поле status — это диагноз в одном слове. Шесть значений покрывают почти все реальные случаи.

Status Что случилось Куда смотреть
NOERROR Всё в порядке Но если ANSWER: 0 — это NODATA: имя есть, записи такого типа нет
NXDOMAIN Имени не существует Опечатка в имени, запись не создана, домен разделегирован
SERVFAIL Сбой на стороне резолвера Провал DNSSEC, не отвечают авторитативные, истекла зона
REFUSED Сервер отказал по политике ACL, рекурсия запрещена для вашего IP, зона не обслуживается
FORMERR Сервер не понял запрос Кривой EDNS, промежуточное устройство портит пакеты
NOTIMP Операция не поддерживается UPDATE или NOTIFY на обычный резолвер
NOERROR с нулём ответов — самая коварная ситуация

Статус зелёный, а записей нет. Это значит, что имя в зоне существует, но записи запрошенного типа у него нет. Классика: домен есть, а AAAA-записи нет, и при этом клиент упорно ходит по IPv6. Смотрите не только на status, но и на счётчик ANSWER в заголовке.

Опции, которые нужны каждый день

Опция Что делает
+short Только результат, одной строкой. Для скриптов
+noall +answer Золотая середина: секция ответа с TTL, без служебных строк
+trace Пройти путь от корня до авторитативного сервера
+norecurse Запрос без рекурсии — так спрашивают авторитативные серверы
+dnssec Попросить DNSSEC-записи, увидеть RRSIG
+multiline Разложить запись построчно с комментариями. Незаменимо для SOA
+tcp Запрос по TCP вместо UDP
+timeout=2 +tries=1 Не ждать по умолчанию 5 секунд и три попытки
+nssearch Опросить все NS зоны и показать SOA от каждого
+yaml Машиночитаемый вывод. Формата +json у dig нет
-x адрес Обратный запрос: IP → имя
-r Не читать ~/.digrc. Обязательно для скриптов
-f файл Пакетный режим: список имён из файла

По умолчанию dig ждёт ответа 5 секунд и делает 3 попытки — зависший запрос упирается в 15 секунд. В любом скрипте и мониторинге это нужно сокращать явно.

Восемнадцать команд под реальные задачи

# 1. Какой сейчас IP у сайта
dig +short example.com

# 2. То же, но с TTL — видно, сколько ещё будет висеть кэш
dig +noall +answer example.com

# 3. Спросить напрямую авторитативный сервер, минуя кэши
dig @ns1.example.com example.com A +norecurse

# 4. Сравнить два резолвера: свой и публичный
dig @8.8.8.8 +short example.com
dig @1.1.1.1 +short example.com

# 5. Почтовые серверы с приоритетами
dig +noall +answer example.com MX

# 6. Проверить SPF и другие TXT-записи
dig +short example.com TXT

# 7. Проверить DKIM-селектор
dig +short mail._domainkey.example.com TXT

# 8. Политика DMARC
dig +short _dmarc.example.com TXT

# 9. NS-серверы домена
dig +short example.com NS

# 10. SOA с расшифровкой всех полей
dig example.com SOA +multiline +noall +answer

# 11. Обратный запрос: чей это IP
dig -x 8.8.8.8 +short

# 12. Весь путь от корня — куда реально делегирован домен
dig +trace example.com

# 13. Опросить все NS зоны и сравнить серийники
dig example.com +nssearch

# 14. Проверить, отвечает ли сервер по TCP (важно для больших зон)
dig @ns1.example.com example.com ANY +tcp

# 15. Посмотреть DNSSEC-подписи
dig example.com A +dnssec +multiline

# 16. Быстрый запрос для мониторинга: 2 секунды, одна попытка
dig +short +timeout=2 +tries=1 @8.8.8.8 example.com

# 17. Проверить пачку доменов одной командой
dig -f domains.txt +short

# 18. Машиночитаемый вывод
dig example.com A +yaml

Что показывает +trace и почему результат бывает другим

Обычный dig спрашивает ваш резолвер и часто получает кэшированный ответ. +trace идёт по цепочке сам: берёт список корневых серверов, спрашивает у корня, получает отсылку на серверы зоны com, спрашивает у них, получает отсылку на NS вашего домена и только там забирает финальный ответ.

Поэтому +trace — главный инструмент при смене хостинга или регистратора: он показывает, что реально записано в делегировании, а не то, что помнит кэш. Но у него есть четыре особенности, о которых стоит знать.

Особенность Следствие
Обходит кэш резолвера Показывает свежую правду, может отличаться от того, что видят пользователи
Авторитативный сервер видит ваш IP, а не IP резолвера CDN и геобалансировка могут вернуть другой адрес
Не применяет ваши локальные вьюхи и hosts Внутренняя зона через +trace даст NXDOMAIN
Не валидирует DNSSEC, только показывает записи Для настоящей проверки цепочки доверия нужен delv

dig, nslookup или host

Критерий dig nslookup host
Показывает флаги и код ответа Да Нет Нет
Время запроса Да Нет Нет
Есть в Windows из коробки Нет Да Нет
Пригоден для скриптов Да Плохо Сносно

Распространённое заблуждение: nslookup не объявлен устаревшим — слова «deprecated» в актуальных man-страницах BIND нет. Но для диагностики он неудобен, потому что скрывает служебные поля.

dig не показывает, что видит ваше приложение

Ни dig, ни host, ни nslookup не используют системный резолвер: они идут по DNS напрямую и не читают /etc/hosts, mDNS и логику systemd-resolved. Ответ dig и реальное поведение приложения могут расходиться. Чтобы увидеть картину глазами программы, используйте getent hosts example.com или resolvectl query example.com.

Сколько должен занимать запрос

Строка Query time — недооценённый показатель. Норматива на неё нет, но эмпирические диапазоны устойчивые.

Сценарий Норма Плохо
Локальный кэш, попадание 0–2 мс больше 20 мс
Резолвер в том же ЦОД 1–5 мс больше 50 мс
Публичный резолвер, кэш 5–30 мс больше 100 мс
Публичный резолвер, промах 30–120 мс больше 500 мс
Полный +trace от корня 100–400 мс больше 800 мс

Быстрая проверка кэша: выполните один и тот же запрос дважды подряд. Второй должен пройти заметно быстрее. Если время одинаковое — кэширование не работает, и каждый посетитель платит полную стоимость резолва.

Чего dig не покрывает

dig отвечает на вопрос «что в DNS прямо сейчас, с этой машины». Он не ответит на два других: что было ночью и что видят пользователи в других регионах. А проблемы DNS редко бывают постоянными — чаще один из четырёх NS-серверов отвечает через раз, или запись подменилась после чьей-то правки в панели регистратора.

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

Заметить изменение записи до того, как о нём сообщат клиенты

Пруфен проверяет DNS-записи и срок домена и присылает уведомление в Email, Telegram или Макс, когда значение изменилось или сервер перестал отвечать. Доступность при этом контролируется с интервалом от 2 минут из 13 точек мониторинга.

Была ли статья полезна?

Начните мониторинг прямо сейчас

Бесплатный тариф — до 5 проверок. 150 ₽ на баланс при регистрации.

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