Поиск по сайту:

Как использовать команду dig в Linux


Команда Linux dig позволяет запрашивать DNS-серверы и выполнять поиск DNS. Вы также можете найти домен, к которому ведет IP-адрес. Мы покажем вам, как!

Как работает команда копать

Люди используют команду Linux dig для запроса серверов системы доменных имен (DNS). dig — это аббревиатура от Domain Information Groper. С помощью dig вы можете запрашивать у DNS-серверов информацию о различных записях DNS, включая адреса хостов, почтовые обмены, серверы имен и другую связанную информацию. Он был задуман как инструмент для диагностики проблем с DNS. Тем не менее, вы можете использовать его, чтобы покопаться и узнать больше о DNS, который является одной из центральных систем, поддерживающих маршрутизацию интернет-трафика.

Интернет использует адреса интернет-протокола (IP) для определения «местоположений» в Интернете, но люди используют доменные имена. Когда вы вводите доменное имя в приложение, например веб-браузер или SSH-клиент, что-то должно преобразовываться из доменного имени в фактический IP-адрес. Здесь на помощь приходит система доменных имен.

Когда вы используете доменное имя с любой программой, подключенной к Интернету, ваш локальный маршрутизатор не может разрешить его (если только оно не кэшировано из предыдущего запроса). Таким образом, ваш маршрутизатор запрашивает либо DNS-сервер вашего интернет-провайдера (ISP), либо любой другой, для использования которого вы настроили свою систему. Они называются серверами-предшественниками DNS.

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

Если сервер-предшественник DNS не может найти домен в своем кэше, он связывается с корневым сервером имен DNS. Корневой сервер не будет хранить информацию, необходимую для преобразования доменных имен в IP-адреса, но он будет содержать списки серверов, которые могут помочь с вашим запросом.

Корневой сервер просматривает домен верхнего уровня, к которому принадлежит ваше доменное имя, например .COM, .ORG, .CO.UK и т. д. Затем он отправляет список серверов доменов верхнего уровня, которые обрабатывают эти типы доменов, обратно на сервер-предшественник DNS. Затем сервер-предшественник DNS может снова отправить запрос на сервер домена верхнего уровня.

Сервер домена верхнего уровня отправляет сведения об авторитетном сервере имен (где хранятся сведения о домене) обратно на сервер-предшественник DNS. Затем DNS-сервер запрашивает авторитетный сервер имен, на котором размещена зона домена, который вы изначально ввели в свою программу. Авторитетный сервер имен отправляет IP-адрес обратно на DNS-сервер, который, в свою очередь, отправляет его обратно вам.

Установка копать

dig уже был установлен на наших компьютерах с Ubuntu 18.04 и Fedora 30. Однако нам пришлось установить его на компьютер Manjaro 18.04 с помощью следующей команды:

sudo pacman -Sy bind-tools

Начало работы с копанием

В нашем первом примере мы вернем IP-адреса, связанные с доменным именем. Часто несколько IP-адресов связаны с одним доменным именем. Это часто происходит, например, если используется балансировка нагрузки.

Мы используем параметр запроса +short, как показано ниже, который дает нам краткий ответ:

dig linux-console.net +short

Все IP-адреса, связанные с доменом linux-console.net, перечислены для нас. С другой стороны, если мы не используем параметр запроса +short, вывод будет довольно подробным.

Итак, мы набираем следующее, чтобы передать его через less:

dig linux-console.net | less

Вывод отображается в формате less, как показано ниже.

Вот полный список:

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> linux-console.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12017
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;linux-console.net. IN A

;; ANSWER SECTION:
linux-console.net. 3551 IN A 151.101.194.217
linux-console.net. 3551 IN A 151.101.130.217
linux-console.net. 3551 IN A 151.101.66.217
linux-console.net. 3551 IN A 151.101.2.217

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Mar 22 07:44:37 EDT 2020
;; MSG SIZE rcvd: 106

Давайте разберем это по частям.

Заголовок

Во-первых, давайте посмотрим, что у нас есть в заголовке:

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> linux-console.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12017
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

Теперь, вот что все это значит:

  • Первая строка: версия dig и запрашиваемый домен.
  • Глобальные параметры.  Как мы увидим, вы можете использовать dig для одновременного запроса нескольких доменов. В этой строке показаны параметры, которые были применены ко всем запросам домена. В нашем простом примере это была просто опция +cmd (команда) по умолчанию.
  • Код операции: запрос. Это тип запрошенной операции, в данном случае это был запрос. Это значение также может быть query для обратного запроса или status, если вы просто проверяете состояние системы DNS.
  • Статус: Нет ошибок. Ошибок не было, и запрос был правильно разрешен.
  • ID: 12017: этот случайный идентификатор связывает запрос и ответ вместе.
  • Флаги: qr rd ra: обозначают запрос, требуется рекурсия и доступна рекурсия. Рекурсия — это одна из форм поиска DNS (другая — итеративная). Вы также можете увидеть AA, что означает авторитетный ответ, означающий, что ответ был предоставлен полномочным сервером имен.
  • Запрос: 1: количество запросов в этом сеансе, который был один.
  • Ответ: 4: количество ответов в этом ответе, то есть четыре.
  • Полномочие: 0: количество ответов, пришедших от полномочного сервера имен, в данном случае равно нулю. Ответ был возвращен из кэша сервера-предшественника DNS. В ответе не будет официального раздела.
  • Дополнительно: 1: есть одна дополнительная информация. (Как ни странно, ничего не указано, если это значение не равно двум или выше.)

Выбрать псевдосекцию

Далее мы видим следующее в Opt Pseudosection:

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494

Давайте разберем это:

  • EDNS: версия 0: используемая версия системы расширений для DNS. EDNS передает расширенные данные и флаги, увеличивая размер пакетов протокола пользовательских дейтаграмм (UDP). На это указывает флаг переменного размера.
  • флаги: флаги не используются.
  • udp: 4096: размер пакета UDP.

Раздел вопросов

В разделе «Вопрос» мы видим следующее:

;; QUESTION SECTION:
;linux-console.net. IN A

Вот что это значит:

  • linux-console.net: доменное имя, которое мы запрашиваем.
  • В: Мы делаем запрос для интернет-класса.
  • A: Если мы не укажем иное, dig запросит запись A (адрес) с DNS-сервера.

Раздел ответов

Раздел «Ответ» содержит следующие четыре ответа, которые мы получили от DNS-сервера:

linux-console.net. 3551 IN A 151.101.194.217
linux-console.net. 3551 IN A 151.101.130.217
linux-console.net. 3551 IN A 151.101.66.217
linux-console.net. 3551 IN A 151.101.2.217

Вот что означают эти ответы:

  • 3551: это время жизни (TTL), 32-разрядное целое число со знаком, которое содержит временной интервал, в течение которого запись может быть кэширована. По истечении этого срока данные должны использоваться в ответе на запрос до тех пор, пока они не будут обновлены DNS-сервером.
  • В: Мы сделали запрос в Интернете.
  • О: мы запросили запись A с DNS-сервера.

Раздел статистики

Статистика является заключительным разделом и содержит следующую информацию:

;; Query time: 0 msec 
;; SERVER: 127.0.0.53#53(127.0.0.53) 
;; WHEN: Sun Mar 22 07:44:37 EDT 2020 
;; MSG SIZE rcvd: 106

Вот что у нас есть:

  • Время запроса: 0 мс: время, затраченное на получение ответа.
  • СЕРВЕР: 127.0.0.53#53(127.0.0.53): IP-адрес и номер порта ответившего DNS-сервера. В данном случае он указывает на локальный преобразователь заглушек кэширования. Это перенаправляет DNS-запросы на любые настроенные вышестоящие DNS-серверы. На тестовом компьютере Manajro указанный здесь адрес был 8.8.8.8#53, что является общедоступной службой DNS Google.
  • КОГДА: вс, 22 марта, 07:44:37 по восточному поясному времени 2020 г.: когда был сделан запрос.
  • MSG SIZE rcvd: 106: размер сообщения, полученного от DNS-сервера.

Избирательность

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

Следующие параметры запроса удалят этот раздел из результатов:

  • +nocomments: не показывать строки комментариев.
  • +noauthority: не показывать раздел полномочий.
  • +noadditional: не показывать дополнительный раздел.
  • +nostats: не показывать раздел статистики.
  • +noanswer: не показывать раздел ответов.
  • +noall: Ничего не показывать!

Параметр запроса +noall обычно сочетается с одним из приведенных выше, чтобы включить раздел в результаты. Таким образом, вместо того, чтобы вводить длинную строку параметров запроса для отключения нескольких разделов, вы можете использовать +noall, чтобы отключить их все.

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

  • +комментарии: показать строки комментариев.
  • +authority: показать раздел полномочий.
  • +дополнительно: показать дополнительный раздел.
  • +статистика: показать раздел статистики.
  • +answer: Показать раздел ответов.
  • +all: показать все.

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

dig linux-console.net +nocomments

Если мы используем параметр запроса +noall сам по себе, как показано ниже, мы не получим никакого полезного вывода:

dig linux-console.net +noall

Мы можем выборочно добавлять разделы, которые хотим видеть. Чтобы добавить раздел ответов, мы набираем следующее:

dig linux-console.net +noall +answer

Если мы введем следующее, чтобы включить +stats, мы также увидим раздел статистики:

dig linux-console.net +noall +answer +stats

Часто используется комбинация +noall +answer. При необходимости вы можете добавить другие разделы в командную строку. Если вы не хотите вводить +noall +answer в командной строке каждый раз, когда используете dig, вы можете поместить их в файл конфигурации с именем «.digrc». Он находится в вашем домашнем каталоге.

Мы вводим следующее, чтобы создать его с echo:

echo "+noall +answer" > $HOME/.digrc

Затем мы можем ввести следующее, чтобы проверить его содержимое:

cat .digrc

Эти два параметра теперь будут применяться ко всем будущим использованиям dig, как показано ниже:

dig ubuntu.org
dig linux.org
dig github.com

Этот файл конфигурации dig будет использоваться для остальных примеров в этой статье.

DNS-записи

Информация, возвращаемая вашими запросами dig, извлекается из различных типов записей, хранящихся на DNS-сервере. Если мы не запрашиваем что-то другое, dig запрашивает запись A (адрес). Ниже приведены типы записей, обычно используемые с dig:

  • Запись A: связывает домен с IP-адресом версии 4.
  • Запись MX. Обмен почтой записывает электронные письма, отправленные на домены, на правильный почтовый сервер.
  • Запись NS: записи серверов имен делегируют домен (или поддомен) набору DNS-серверов.
  • Запись TXT. В текстовых записях хранится текстовая информация о домене. Как правило, они могут использоваться для подавления поддельных или поддельных сообщений электронной почты.
  • Запись SOA. Начальные авторитетные записи могут содержать большой объем информации о домене. Здесь вы можете найти основной сервер имен, ответственную сторону, метку времени для изменений, частоту обновления зоны и ряд ограничений по времени для повторных попыток и отказов.
  • TTL. Время жизни — это параметр для каждой записи DNS, который определяет, как долго серверу-предшественнику DNS разрешено кэшировать каждый запрос DNS. По истечении этого времени данные необходимо обновить для последующих запросов.
  • ЛЮБОЙ: указывает dig возвращать записи DNS всех возможных типов.

Указание типа записи A не меняет действие по умолчанию, которое заключается в запросе записи адреса и получении IP-адреса, как показано ниже:

dig redhat.com A

Чтобы запросить записи обмена почтой, мы используем следующий флаг MX:

dig yahoo.com MX

Флаг сервера имен возвращает следующее имя корневых серверов имен, связанных с доменом верхнего уровня:

dig fedora.com NS

Чтобы запросить начало авторитетной записи, мы вводим следующий флаг SOA:

dig manjaro.com SOA

Флаг TTL покажет нам время жизни данных в кеше DNS-сервера. Если мы сделаем серию запросов, мы увидим, что время жизни сокращается до нуля, а затем возвращается к исходному значению.

Набираем следующее:

dig usa.gov TTL

Чтобы увидеть текстовые записи, набираем флаг TX:

dig usa.gov TXT

Указание DNS-сервера

Если вы хотите использовать определенный DNS-сервер для своего запроса, вы можете использовать знак at (@), чтобы передать его в dig в качестве параметра командной строки.

При использовании DNS-сервера по умолчанию (см. ниже) dig ссылается на локальный резолвер кэширующей заглушки по адресу 127.0.0.53.

dig usa.gov +stats

Теперь мы вводим следующее, чтобы использовать общедоступный DNS-сервер Google по адресу 8.8.8.8:

dig @8.8.8.8 usa.gov +stats

Использование dig с несколькими доменами

Мы можем передать несколько доменов в dig в командной строке, как показано ниже:

dig ubuntu.org fedora.org manjaro.com

Если вы регулярно проверяете набор доменов, вы можете сохранить их в текстовом файле и передать его в dig. Все домены в файле будут проверены по очереди.

Наш файл называется «domains.txt». Мы будем использовать cat, чтобы показать его содержимое, а затем передать его в dig с опцией -f (файл). Набираем следующее:

cat domains.txt
dig -f domains.txt

Обратный поиск DNS

Если у вас есть IP-адрес и вы хотите знать, куда он идет, вы можете попробовать обратный поиск DNS. Если он разрешается на сервер, зарегистрированный на DNS-сервере, вы можете узнать его домен.

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

Давайте посмотрим, сможем ли мы узнать, куда нас ведет IP-адрес 209.51.188.148. Мы вводим следующее, используя опцию -x (обратный поиск):

dig -x 209.51.188.148

Престо! IP-адрес разрешается в gnu.org.

Поскольку PTR — это запись DNS, и мы знаем, что dig может запрашивать определенные записи DNS, не могли бы мы просто попросить dig получить PTR для нас? Да, мы можем, но это требует немного больше работы.

Мы должны указать IP-адрес в обратном порядке и добавить .in-addr.arpa в конце, как показано ниже:

dig ptr 148.188.51.209.in-addr.arpa

Мы получаем тот же результат; просто потребовалось немного больше усилий.

Вы можете копать это?

Мы все ежедневно пользуемся Интернетом, и пытливые умы часто задавались вопросом, как происходит волшебство, когда мы набираем название веб-сайта в браузере. С dig вы можете исследовать процессы сетевого колдовства.

RELATED: Best Linux Laptops for Developers and Enthusiasts