Введение
Dig (Domain Information Groper) — это мощный инструмент командной строки для запросов к DNS-серверам имен.
С помощью команды dig
вы можете запрашивать информацию о различных записях DNS, включая адреса хостов, почтовые обмены и серверы имен. Это наиболее часто используемый системными администраторами инструмент для устранения неполадок DNS из-за его гибкости и простоты использования.
В этом руководстве мы покажем вам, как использовать утилиту dig
, на практических примерах и подробных объяснениях наиболее распространенных параметров dig
.
Установить копать
Чтобы проверить, доступна ли команда dig
в вашей системе, введите:
dig -v
Вывод должен выглядеть так:
DiG 9.11.3-1ubuntu1.1-Ubuntu
Если в вашей системе нет dig
, приведенная выше команда напечатает «dig: команда не найдена». Вы можете легко установить инструмент dig
с помощью менеджера пакетов вашего дистрибутива.
Установите dig на Ubuntu и Debian
sudo apt update && sudo apt install dnsutils
Установите dig на CentOS и Fedora
sudo yum install bind-utils
Установить dig в Arch Linux
sudo pacman -S bind-tools
Понимание результатов раскопок
В своей простейшей форме, при использовании для запроса одного хоста (домена) без дополнительных аргументов, команда dig достаточно детализирована.
В следующем примере мы запустим запрос для получения информации о домене linux.org
.
dig linux.org
Вывод должен выглядеть так:
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> linux.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30498
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;linux.org. IN A
;; ANSWER SECTION:
linux.org. 300 IN A 104.27.167.219
linux.org. 300 IN A 104.27.166.219
;; Query time: 34 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Fri Jan 10 14:24:19 CET 2020
;; MSG SIZE rcvd: 70
Мы идем по разделам и объясняем вывод команды dig
:
Первая строка вывода выводит установленную версию dig и вызванный запрос. Во второй строке показаны глобальные параметры (по умолчанию только cmd).
; <<>> DiG 9.13.3 <<>> linux.org
;; global options: +cmd
Если вы не хотите включать эти строки в вывод, используйте опцию +nocmd
. Эта опция должна быть первой после команды dig
.
Первый раздел включает технические сведения об ответе, полученном от запрошенного органа (DNS-сервера). Заголовок показывает код операции (действие, выполняемое dig) и статус действия. В этом примере статус NOERROR
означает, что запрошенный орган без проблем обслужил запрос.
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37159
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5
Этот раздел можно удалить с помощью опции +nocomments
, которая также отключает заголовки некоторых других разделов.
Псевдораздел OPT отображается по умолчанию только в новых версиях утилиты dig. Подробнее о механизмах расширения DNS (EDNS) можно прочитать здесь.
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
Если вы не хотите включать этот раздел в вывод, используйте опцию +noedns
.
В разделе " QUESTION " dig
показывает наш запрос question (вопрос). По умолчанию для dig
требуется запись A.
;; QUESTION SECTION:
;linux.org. IN A
Вы можете отключить этот раздел, используя опцию +noquestion
.
Раздел «ОТВЕТ» дает нам ответ на наш вопрос. Как уже упоминалось, по умолчанию dig
запрашивает запись A. Здесь домен linux.org
указывает на IP-адрес 104.18.59.123
.
;; ANSWER SECTION:
linux.org. 300 IN A 104.18.59.123
linux.org. 300 IN A 104.18.58.123
Обычно вы не хотите отключать ответ, но вы можете удалить этот раздел из вывода, используя параметр +noanswer
.
Раздел «AUTHORITY» сообщает нам, какие серверы являются основными, чтобы отвечать на вопросы DNS о запрашиваемом домене.
;; AUTHORITY SECTION:
linux.org. 86379 IN NS lia.ns.cloudflare.com.
linux.org. 86379 IN NS mark.ns.cloudflare.com.
Вы можете отключить этот раздел вывода, используя параметр +noauthority
.
Раздел «ДОПОЛНИТЕЛЬНО» дает нам информацию об IP-адресах полномочных DNS-серверов, показанных в разделе полномочий.
;; ADDITIONAL SECTION:
lia.ns.cloudflare.com. 84354 IN A 173.245.58.185
lia.ns.cloudflare.com. 170762 IN AAAA 2400:cb00:2049:1::adf5:3ab9
mark.ns.cloudflare.com. 170734 IN A 173.245.59.130
mark.ns.cloudflare.com. 170734 IN AAAA 2400:cb00:2049:1::adf5:3b82
Параметр +noadditional
отключает дополнительный раздел ответа.
Последний раздел вывода dig включает статистику запросов.
;; Query time: 22 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Fri Jan 10 14:30:24 CET 2020
;; MSG SIZE rcvd: 70
Вы можете отключить эту часть с помощью опции +nostats
.
Распечатать только ответ
В большинстве случаев вам нужен только быстрый ответ на запрос копания.
Получить краткий ответ
Чтобы получить краткий ответ на свой вопрос, используйте опцию +short
:
dig linux.org +short
104.18.59.123
104.18.58.123
Вывод будет включать только IP-адреса записи A.
Получить подробный ответ
Для получения более подробного ответа отключите все результаты с помощью опции +noall
, а затем включите только раздел ответов с опцией +answer
.
dig linux.org +noall +answer
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> linux.org +noall +answer
;; global options: +cmd
linux.org. 300 IN A 104.27.167.219
linux.org. 300 IN A 104.27.166.219
Сервер имен, зависящий от запроса
По умолчанию, если серверы имен не указаны, dig
использует серверы, перечисленные в файле /etc/resolv.conf
.
Чтобы указать сервер имен, на котором будет выполняться запрос, используйте символ @
(at), за которым следует IP-адрес или имя хоста сервера имен.
Например, чтобы запросить имя сервера Google (8.8.8.8) для информации о домене linux.org
, используйте:
dig linux.org @8.8.8.8
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> linux.org @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54855
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;linux.org. IN A
;; ANSWER SECTION:
linux.org. 299 IN A 104.27.167.219
linux.org. 299 IN A 104.27.166.219
;; Query time: 34 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Jan 10 14:40:41 CET 2020
;; MSG SIZE rcvd: 70
Запрос типа записи
Dig позволяет выполнять любой допустимый DNS-запрос, добавляя тип записи в конце запроса. В следующем разделе мы покажем вам примеры того, как искать наиболее распространенные записи, такие как A (IP-адрес), CNAME (каноническое имя), TXT (текстовая запись), MX (почтовый обменник) и NS ( сервер имён).
Запрос записей А
Чтобы получить список всех адресов для доменного имени, используйте параметр a
:
dig +nocmd google.com a +noall +answer
google.com. 299 IN A 172.217.16.174
Как вы уже знаете, если тип записи DNS не указан, dig запросит запись A. Вы также можете запросить запись A, не указывая параметр a
.
Запрос записей CNAME
Чтобы найти псевдоним доменного имени, используйте параметр cname
:
dig +nocmd mail.google.com cname +noall +answer
mail.google.com. 601626 IN CNAME googlemail.l.google.com.
Запрос TXT-записей
Используйте параметр txt
, чтобы получить все записи TXT для определенного домена:
dig +nocmd google.com txt +noall +answer
google.com. 3600 IN TXT "v=spf1 include:_spf.google.com ~all"
google.com. 300 IN TXT "docusign=1b0a6754-49b1-4db5-8540-d2c12664b289"
google.com. 3600 IN TXT "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com. 300 IN TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
google.com. 3600 IN TXT "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="
Запрос записей MX
Чтобы получить список всех почтовых серверов для определенного домена, используйте опцию mx
:
dig +nocmd google.com mx +noall +answer
google.com. 491 IN MX 50 alt4.aspmx.l.google.com.
google.com. 491 IN MX 30 alt2.aspmx.l.google.com.
google.com. 491 IN MX 40 alt3.aspmx.l.google.com.
google.com. 491 IN MX 20 alt1.aspmx.l.google.com.
google.com. 491 IN MX 10 aspmx.l.google.com.
Запрос NS-записей
Чтобы найти авторитетные имена серверов для нашего конкретного домена, используйте параметр ns
:
dig +nocmd google.com ns +noall +answer
google.com. 343727 IN NS ns2.google.com.
google.com. 343727 IN NS ns3.google.com.
google.com. 343727 IN NS ns4.google.com.
google.com. 343727 IN NS ns1.google.com.
Запросить все записи
Используйте any
опцию, чтобы получить список всех записей DNS для определенного домена:
dig +nocmd google.com any +noall +answer
google.com. 172 IN A 172.217.16.174
google.com. 115 IN AAAA 2a00:1450:4001:814::200e
google.com. 431 IN MX 40 alt3.aspmx.l.google.com.
google.com. 431 IN MX 20 alt1.aspmx.l.google.com.
google.com. 431 IN MX 10 aspmx.l.google.com.
google.com. 431 IN MX 50 alt4.aspmx.l.google.com.
google.com. 431 IN MX 30 alt2.aspmx.l.google.com.
google.com. 57 IN SOA ns1.google.com. dns-admin.google.com. 288864427 900 900 1800 60
google.com. 343707 IN NS ns3.google.com.
google.com. 343707 IN NS ns4.google.com.
google.com. 343707 IN NS ns1.google.com.
google.com. 343707 IN NS ns2.google.com.
Обратный поиск DNS
Чтобы запросить имя хоста, связанное с определенным IP-адресом, используйте параметр -x
.
Например, чтобы выполнить обратный поиск по 149.20.4.15
, вам нужно будет использовать:
dig -x 149.20.4.15 +noall +answer
Как видно из приведенного ниже вывода, IP-адрес 149.20.4.15
связан с именем хоста mirror-isc3.debian.org
.
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> -x 149.20.4.15 +noall +answer
;; global options: +cmd
15.4.20.149.in-addr.arpa. 3600 IN PTR mirror-isc3.debian.org.
Массовый поиск
Если вы хотите запросить большое количество доменов, вы можете добавить их в файл (по одному домену в строке) и использовать параметр -f
, за которым следует имя файла.
В следующем примере мы запрашиваем домены, перечисленные в файле domains.txt
.
Создайте файл domains.txt:
nano domains.txt
Введите список доменов, например:
ubuntu.org
debian.org
google.com
Введите следующую команду терминала:
dig -f domains.txt +short
Вы должны получить вывод, подобный следующему:
69.16.230.42
130.89.148.77
128.31.0.62
149.20.4.15
172.217.16.174
b.root-servers.net.
c.root-servers.net.
d.root-servers.net.
e.root-servers.net.
f.root-servers.net.
g.root-servers.net.
h.root-servers.net.
i.root-servers.net.
a.root-servers.net.
j.root-servers.net.
k.root-servers.net.
l.root-servers.net.
m.root-servers.net.
Файл.digrc
Поведением команды dig можно управлять, устанавливая параметры для каждого пользователя в файле ${HOME}/.digrc
.
Если файл .digrc
существует в домашнем каталоге пользователя, указанные параметры применяются до аргументов командной строки.
Например, если вы хотите просмотреть только раздел ответов, откройте текстовый редактор и создайте следующий файл ~/.digrc
:
nano ~/.digrc
Вставьте следующие параметры
+nocmd +noall +answer
Когда вы снова запустите команду dig, она прочитает параметры, установленные во вновь созданном файле конфигурации, перед запуском команды.
Вывод
dig
— это инструмент командной строки для запроса информации DNS и устранения проблем с DNS.