Команда dig

Команда dig позволяет использовать одноименную утилиту для отправки запросов серверам доменных имен. Данная утилита входит в состав сервера доменных имен BIND, который включен в стандартный комплект поставки большинства дистрибутивов. При использовании dig пользователь может указать имя сервера доменных имен, который должен обработать запрос, поэтому рассматриваемая утилита используется главным образом для диагностики серверов доменных имен.

Базовый синтаксис команды выглядит следующим образом:

$ dig [@имя-сервера-доменных-имен] [параметры] имя-домена-или-IP-адрес

Утилита поддерживает ряд параметров командной строки. Наиболее полезным параметром является параметр -t, позволяющий указать интересующий пользователя тип ресурсной записи (вместо этого параметра может использоваться указание типа ресурсной записи). В частности, поддерживаются следующие типы ресурсных записей:

  • A (адрес IPv4)
  • AAAA (адрес IPv6)
  • CNAME (каноническое имя или псевдоним)
  • MX (имя узла сервера электронной почты)
  • NS (имя сервера доменных имен)
  • PTR (указатель на каноническое имя, используемый для обратных разрешений доменных имен)
  • SOA (источник информации и доменной зоне)
  • TXT (произвольная текстовая запись)

По умолчанию утилита осуществляет запросы значений ресурсных записей типа A. При этом существует абстрактный тип ресурсных записей ANY, позволяющий вывести значения всех доступных ресурсных записей. Параметр -x позволяет осуществить обратное разрешение доменного имени. В случае необходимости получения информации о множестве доменных имен следует использовать параметр -f с путем к файлу, содержащему список этих имен (по одному имени в строке).

Вывод утилиты разделен на ряд секций:

  • Заголовок: содержит информацию о версии утилиты, ее параметрах и флагах.
  • QUESTION SECTION: содержит информацию о запросе, передаваемом серверу доменных имен.
  • ANSWER SECTION: содержит информацию об ответе, полученном от сервера доменных имен.
  • AUTHORITY SECTION: содержит имя сервера или серверов доменных имен, которые предоставляют информацию об указанном имени.
  • ADDITIONAL SECTION: содержит IP-адреса серверов доменных имен, перечисленных в предыдущей секции.
  • Область статистики: содержит статистическую информацию, такую, как время выполнения запроса и размер принятого сообщения.

Пользователь может скрыть комментарии (заголовок, область статистики и названия секций) с помощью параметра +nocomments, секцию AUTHORITY SECTION с помощью параметра +noauthority, секцию ADDITIONAL SECTION с помощью параметра +noadditional, область статистики с помощью параметра +nostats и секцию ANSWER SECTION с помощью параметра +noanswer (хотя это и не совсем разумно). Существуют и обратные параметры без префикса no, которые могут использоваться для показа отдельных секций (например, для показа лишь секции ANSWER SECTION достаточно использовать комбинацию параметров +noall и +answer). Все параметры, которые должны использоваться утилитой по умолчанию, могут быть помещены в скрытый файл конфигурации .digrc в домашней директории пользователя.

Примеры использования

Получение IP-адреса сервера по имени домена

Для получения IP-адреса сервера ресурса по имени его домена достаточно передать утилите имя домена без каких-либо параметров:

$ dig linux-faq.ru

В результате будет получен следующий вывод, содержащий достаточное количество ненужной информации:

; <<>> DiG 9.11.1-P2-RedHat-9.11.1-2.P2.fc26 <<>> linux-faq.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46630
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;linux-faq.ru.            IN    A

;; ANSWER SECTION:
linux-faq.ru.        834    IN    A    54.172.136.192

;; Query time: 0 msec
;; SERVER: 192.168.188.253#53(192.168.188.253)
;; WHEN: Пн июл 24 02:04:41 MSK 2017
;; MSG SIZE  rcvd: 57

Несложно заметить, что сервер имеет IP-адрес 54.172.136.192. Для получения более компактного вывода может использоваться следующая команда:

$ dig +noall +answer linux-faq.ru

Теперь вывод будет содержать лишь наиболее важную информацию:

linux-faq.ru.        700    IN    A    54.172.136.192

Получение имен доменов почтовых серверов, связанных с доменом

Для получения имен доменов почтовых серверов, связанных с заданным доменом, нужно четко указывать тип ресурсной записи MX. Для этого может использоваться параметр -t:

$ dig -t MX linux-faq.ru +noall +answer

Также параметр -t может просто пропускаться:

$ dig MX linux-faq.ru +noall +answer

В обоих случаях будет получен аналогичный вывод:

; <<>> DiG 9.11.1-P2-RedHat-9.11.1-2.P2.fc26 <<>> MX linux-faq.ru +noall +answer
;; global options: +cmd
linux-faq.ru.        9728    IN    MX    10 emx.mail.ru.

Получение имен серверов доменных имен, связанных с доменом

Для получения имен серверов доменных имен, связанных с заданным доменом, нужно четко указывать тип ресурсной записи NS. Для этого может использоваться параметр -t:

$ dig -t NS linux-faq.ru +noall +answer

Также параметр -t может просто пропускаться:

$ dig NS linux-faq.ru +noall +answer

В обоих случаях будет получен аналогичный вывод:

; <<>> DiG 9.11.1-P2-RedHat-9.11.1-2.P2.fc26 <<>> NS linux-faq.ru +noall +answer
;; global options: +cmd
linux-faq.ru.        301    IN    NS    ns2.r01.ru.
linux-faq.ru.        301    IN    NS    ns1.r01.ru.

Получение значений всех доступных ресурсных записей

Для получения значений всех доступных ресурсных записей, связанных с заданным доменом, нужно использовать тип ресурсной записи ANY. Для этого может использоваться параметр -t:

$ dig -t ANY linux-faq.ru +noall +answer

Также параметр -t может просто пропускаться:

$ dig ANY linux-faq.ru +noall +answer

В обоих случаях будет получен аналогичный вывод:

; <<>> DiG 9.11.1-P2-RedHat-9.11.1-2.P2.fc26 <<>> ANY linux-faq.ru +noall +answer
;; global options: +cmd
linux-faq.ru.        9431    IN    MX    10 emx.mail.ru.
linux-faq.ru.        163    IN    A    54.172.136.192
linux-faq.ru.        163    IN    NS    ns2.r01.ru.
linux-faq.ru.        163    IN    NS    ns1.r01.ru.

Обратное разрешение доменного имени

Для того, чтобы осуществить обратное разрешение доменного имени достаточно использовать параметр -x и задать IP-адрес сервера:

$ dig -x 54.172.136.192

Использование определенного сервера доменных имен

Для использования определенного сервера доменных имен необходимо указать его имя или IP-адрес после символа @:

$ dig @ns1.r01.ru linux-faq.ru