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

5 февраля 2021 |

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

A stylized terminal window on a Linux system. Fatmawati Achmad Zaenuri / Shutterstock

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

Как работает команда dig

Люди используют команду dig в Linux для запроса серверов системы доменных имен (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

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

sudo pacman -Sy bind-tools

Начало работы с dig

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

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

dig howtogeek.com + short

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

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

dig howtogeek.com | less

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

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

, & lt, & lt, & gt, & gt, DiG 9.11.3-1ubuntu1.11-Ubuntu & lt, & lt, & gt, & gt, howtogeek.com ,, глобальные параметры: + cmd ,, Получил ответ: ,, — & gt, & gt, HEADER & lt, & lt, — opcode: QUERY, status: NOERROR, id: 12017 ,, flags: qr rd ra, QUERY: 1, ANSWER: 4, АВТОРИТЕТ: 0, ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: 1 ,, OPT PSEUDOSECTION:, EDNS: version: 0, flags :, udp: 65494 ,, РАЗДЕЛ ВОПРОСА:, howtogeek.com. В РАЗДЕЛЕ ОТВЕТОВ: howtogeek.com. 3551 IN A 151.101.194.217 howtogeek.com. 3551 IN A 151.101.130.217 howtogeek.com. 3551 IN A 151.101.66.217 howtogeek.com. 3551 IN A 151.101.2.217 ,, Время запроса: 0 мс ,, СЕРВЕР: 127.0.0.53 # 53 (127.0.0.53) ,, КОГДА: Воскресенье 22 марта 07:44:37 EDT 2020 ,, РАЗМЕР СООБЩЕНИЯ rcvd: 106

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

Заголовок

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

, & lt, & lt, & gt, & gt, DiG 9.11.3-1ubuntu1.11-Ubuntu & lt, & lt, & gt , & gt, howtogeek.com ,, глобальные параметры: + cmd ,, Получил ответ: ,, — & gt, & gt, HEADER & lt, & lt, — opcode: QUERY, status: NOERROR, id: 12017 ,, flags: qr rd ra, QUERY: 1, ANSWER: 4, АВТОРИТЕТ: 0, ДОПОЛНИТЕЛЬНО: 1

Вот что все это означает:

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

Opt Pseudosection

Затем мы видим следующее в псевдоразрезе Opt:

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

Давайте разбейте это на части:

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

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

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

,, РАЗДЕЛ ВОПРОСА:, howtogeek.com. IN A

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

  • howtogeek.com: доменное имя, которое мы запрашиваем.
  • IN: мы делаем запрос интернет-класса.
  • A: Если не указано иное, dig запросит запись A (адрес) с DNS-сервера.

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

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

howtogeek.com. 3551 IN A 151.101.194.217 howtogeek.com. 3551 IN A 151.101.130.217 howtogeek.com. 3551 IN A 151.101.66.217 howtogeek.com. 3551 IN A 151.101.2.217

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

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

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

Статистика — последний раздел, и он содержит следующую информацию:

,, Время запроса: 0 мс ,, СЕРВЕР: 127.0.0.53 # 53 (127.0.0.53) ,, КОГДА: 22 марта, 07:44:37 EDT 2020 ,, РАЗМЕР СООБЩЕНИЯ 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 марта, 22:44:37 EDT 2020: когда был сделан запрос.
  • MSG SIZE rcvd: 106: Размер сообщения, полученного от DNS-сервера.

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

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

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

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

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

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

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

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

dig howtogeek.com + nocomments

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

dig howtogeek.com + noall

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

dig howtogeek.com + noall + answer

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

dig howtogeek.com + noall + answer + stats

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

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

echo «+ noall + answer» & gt, $ HOME / .digrc

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

cat .digrc

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

dig ubuntu.org копать linux.org dig github.com

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

Записи DNS

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

  • Запись: связывает домен с 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-сервер для своего запроса, вы можете использовать знак (@), чтобы передать его в dig в качестве параметра командной строки.

С DNS по умолчанию server (см. ниже), 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 ubuntu.org fedora.org manjaro.com

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

Наш файл называется «domains.txt.«Мы воспользуемся cat, чтобы показать его содержимое, а затем передадим его в копать с параметром -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

Presto! IP-адрес преобразуется в gnu.org.

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

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

dig ptr 148.188.51.209.in-addr.arpa

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

Сможете ли вы выкопать?

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

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


Напишите пару строк: