dig — стандартная утилита диагностики DNS из состава BIND. В отличие от nslookup, она показывает полную структуру ответа: секции, флаги, TTL и авторитетные серверы. Этого достаточно, чтобы отличить проблему на стороне клиента от ошибки в зоне, проверить делегирование и понять, почему имя не открывается.

Установка и первый запрос

В Debian, Ubuntu и Linux Mint утилита входит в пакет bind9-dnsutils; старый dnsutils остался переходным. В Fedora и RHEL пакет называется bind-utils, в Arch — bind.

sudo apt install bind9-dnsutils
sudo dnf install bind-utils
sudo pacman -S bind
dig -v

Простой запрос без параметров возвращает запись A для имени. Ключ +short оставляет только значение, что удобно для скриптов.

dig example.com
dig example.com A
dig example.com AAAA
dig example.com +short

Как читать вывод

Ответ делится на несколько частей. В заголовке указаны код состояния, идентификатор запроса и флаги. Затем идёт секция вопроса, секция ответа, секция авторитетных серверов и дополнительная секция.

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34871
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; ANSWER SECTION:
example.com.        3600    IN      A       203.0.113.10

Код NOERROR означает, что запрос обработан, но не гарантирует наличие записи: при пустой секции ответа имя существует, просто записей такого типа нет. NXDOMAIN говорит, что имени нет вовсе. SERVFAIL — сервер не смог получить ответ, часто из-за проблем с DNSSEC или недоступности авторитетного сервера. REFUSED означает отказ по правилам доступа.

Флаги читаются так: qr — это ответ, rd — клиент просил рекурсию, ra — сервер её поддерживает, aa — ответ авторитетный, tc — ответ обрезан, ad — данные прошли проверку DNSSEC. Если rd есть, а ra нет, перед вами авторитетный сервер, который не обязан отвечать за другие зоны.

В строке ответа четыре поля: имя, TTL в секундах, класс IN, тип и значение. TTL показывает, сколько секунд запись можно держать в кэше.

Основные типы записей

  • A и AAAA — адреса IPv4 и IPv6.
  • CNAME — псевдоним; цепочка может вести к другому имени.
  • MX — почтовые серверы, перед именем стоит приоритет.
  • TXT — текстовые данные: SPF, DKIM, подтверждения домена.
  • NS — авторитетные серверы зоны.
  • SOA — параметры зоны, включая серийный номер.
  • CAA — какие удостоверяющие центры могут выпускать сертификаты.
  • SRV — приоритет, вес, порт и цель сервиса.
dig example.com MX +short
dig example.com TXT +short
dig _sip._tcp.example.com SRV +short
dig example.com CAA +short

Запрос ANY в современном интернете бесполезен: по RFC 8482 многие серверы отвечают минимальным набором или отказом. Запрашивайте конкретный тип.

TTL и кэширование

TTL — главный источник путаницы при переезде сайта. Пока запись живёт в кэше провайдера или локального резолвера, клиенты видят старый адрес. Перед сменой A-записи уменьшите TTL до 300 секунд и подождите хотя бы прежний период, а после переключения верните нормальное значение.

Ответ из кэша отличается убывающим TTL и отсутствием флага aa. Чтобы увидеть исходное значение, спросите авторитетный сервер напрямую. Ключ +ttlunits печатает время в удобном виде.

dig example.com +ttlunits
dig @ns1.example.net example.com A
dig example.com NS +short
dig @8.8.8.8 example.com A

Отрицательный ответ тоже кэшируется. Время жизни определяется полем minimum в записи SOA и TTL самой SOA. Поэтому после исправления ошибки имя может оставаться недоступным ещё несколько минут или часов.

Делегирование и авторитетные серверы

Команда +trace проходит путь от корневых серверов до нужной зоны и показывает, кто делегирует домен. Это лучший способ найти ошибку в NS-записях родительской зоны.

dig +trace example.com
dig NS example.com +short
dig @a.iana-servers.net example.com A
dig example.com DS +short

Если родительская зона делегирует домен на серверы, которые не отвечают за него, получается «хромая» делегация. Симптом — SERVFAIL или пустой ответ при запросе через рекурсивный резолвер. Проверяйте список NS у регистратора и в самой зоне: они должны совпадать.

DNSSEC и ошибки валидации

Флаг ad появляется, когда проверяющий резолвер подтвердил подписи. Команда delv выполняет проверку самостоятельно и объясняет причину отказа.

dig +dnssec example.com
dig example.com DS +short
delv example.com
dig +cd example.com

Ключ +cd отключает проверку DNSSEC на резолвере. Если с ним ответ приходит, а без него — SERVFAIL, проблема в подписях: истёк срок действия, не совпадает ключ или родитель не опубликовал DS.

Частые проблемы

Имя не открывается, но ping работает. Сравните ответы разных резолверов и проверьте /etc/resolv.conf. В системах с systemd-resolved запросы идут на 127.0.0.53, а реальные серверы видны в resolvectl status.

resolvectl status
dig @127.0.0.53 example.com
cat /etc/resolv.conf
dig +search example.com

Ответ обрезан. Флаг tc означает, что ответ не поместился в UDP-пакет. Повторите запрос по TCP или ограничьте размер буфера.

dig +tcp example.com
dig +bufsize=1232 example.com
dig +ignore example.com
dig +time=2 +tries=1 example.com

Странные имена с точкой. Список search и параметр ndots заставляют резолвер дописывать суффиксы. Для проверки используйте +search, для отключения — полное имя с точкой на конце.

Старый фаервол не пропускает EDNS. Если большие ответы теряются, а маленькие проходят, проверьте +noedns. Это диагностический обход, а не постоянное решение: лучше разрешить EDNS на оборудовании.

Обратные запросы и автоматизация

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

dig -x 203.0.113.10 +short
dig +short A example.com | head -1
dig +short NS example.com | sort
dig +noall +answer example.com A

В скриптах используйте +short и ограничивайте время ожидания. Проверка доступности через DNS не должна висеть минутами: +time=2 +tries=1 ограничивает попытки.

Итог

dig даёт полную картину DNS-ответа: код состояния, флаги, TTL и источник данных. Научитесь читать секции и флаги — и большинство проблем с доменами будете локализовать за минуту. Помните про кэш и отрицательный TTL, проверяйте делегирование через +trace, а для DNSSEC используйте delv и +cd. Этих приёмов хватает, чтобы не гадать, почему сайт открывается не у всех клиентов.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте