Как использовать команду 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
вы можете исследовать процессы сетевого колдовства.
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts