Dig (Domain Information Groper) – мощный инструмент командной строки для запросов к именам DNS-серверов.
С помощью команды dig вы можете запрашивать информацию о различных записях DNS, включая адреса хостов, почтовые обмены и серверы имен. Это наиболее часто используемый инструмент среди системных администраторов для устранения проблем DNS из-за его гибкости и простоты использования.
В этом уроке мы покажем вам, как использовать утилиту dig с помощью практических примеров и подробных объяснений наиболее распространенных вариантов dig.
Установка Dig
Чтобы проверить, доступна ли команда dig для вашего типа системы:
dig -v
Результат должен выглядеть примерно так:
DiG 9.11.3-1ubuntu1.1-Ubuntu
Если в вашей системе нет инструмента dig, вывод будет следующий dig: command not found
, вы сможете легко установить с помощью диспетчера пакетов вашего дистрибутива.
Установка Dig на Ubuntu и Debian
sudo apt install dnsutils
Установка Dig на CentOS и Fedora
sudo yum install bind-utils
Понимание вывода Dig
В простейшей форме, когда он используется для запроса одного хоста (домена) без каких-либо дополнительных аргументов, dig довольно многословен.
В следующем примере мы выполним запрос для получения информации о домене linux.org
.
dig linux.org
Результат должен выглядеть примерно так:
Объясним вывод команды 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
Эта часть вывода может быть удалена с помощью опции
+comments
. Когда этот параметр используется, он отключает некоторые другие разделы заголовков. - Этот раздел отображается по умолчанию только в более новых версиях утилиты dig.
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096
Если вы не хотите, чтобы этот раздел был включен в вывод, используйте этот параметр
+noedns
. - Это раздел, где dig показывает наш запрос (вопрос). По умолчанию dig запросит запись A.
;; QUESTION SECTION: ;linux.org. IN A
Вы можете отключить этот раздел, используя эту опцию
+noquestion
. - Раздел ANSWER дает нам ответ на наш вопрос. Как мы уже упоминали, по умолчанию 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
. - Раздел ADDITIONAL дает нам информацию об 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
- Это последний раздел вывода dig, который включает статистику запроса.
;; Query time: 58 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Oct 12 11:46:46 CEST 2018 ;; MSG SIZE rcvd: 212
Вы можете отключить эту часть с помощью опции
+nostats
.
Печать только ответа
В большинстве случаев вы хотели бы получить только быстрый ответ на ваш запрос.
1. Получите короткий ответ
Чтобы получить короткий ответ на запрос, воспользуйтесь опцией +short
:
dig linux.org +short
104.18.59.123
104.18.58.123
Вывод будет содержать только IP-адреса записи A.
2. Получите подробный ответ
Для более подробного ответа отключите все результаты с помощью параметров +noall
, а затем включите только раздел ответа с опцией +answer
.
dig linux.org +noall +answer
; <<>> DiG 9.13.3 <<>> linux.org +noall +answer
;; global options: +cmd
linux.org. 67 IN A 104.18.58.123
linux.org. 67 IN A 104.18.59.123
Сервер запроса специфического имени
По умолчанию, если не указан сервер имен, вы можете использовать серверы, перечисленные в файле /etc/resolv.conf
.
Чтобы указать сервер имен, с которых будет выполняться запрос, используйте символ @
(at), за которым следует IP-адрес сервера имен или имя хоста.
Например, чтобы запросить сервер имен Google (8.8.8.8) для получения информации о домене linux.org
, который вы использовали:
dig linux.org @8.8.8.8
; <<>> DiG 9.13.3 <<>> linux.org @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39110
;; 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.18.58.123
linux.org. 299 IN A 104.18.59.123
;; Query time: 54 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Oct 12 14:28:01 CEST 2018
;; MSG SIZE rcvd: 70
Запрос типа записи
Dig позволяет выполнить любой действительный запрос DNS, добавив тип записи в конец запроса. В следующем разделе мы покажем вам примеры поиска наиболее распространенных записей, таких как A (IP-адрес), CNAME (каноническое имя) TXT (текстовая запись), MX (почтовый обменник) и NS (серверы имен).
1. Запрос записей A
Чтобы получить список всех адресов (адресов) для имени домена, используйте параметр a
:
dig +nocmd google.com a +noall +answer
google.com. 128 IN A 216.58.206.206
Как вы уже знаете, если тип записи DNS не указан, dig запросит запись A. Вы также можете запросить запись A без указания опции a
2. Запрос записей CNAME
Чтобы найти доменное имя псевдонима, используйте параметр cname
:
dig +nocmd mail.google.com cname +noall +answer
mail.google.com. 553482 IN CNAME googlemail.l.google.com.
3. Запрос записей TXT
Используйте параметр txt
для извлечения всех записей TXT для определенного домена:
dig +nocmd google.com txt +noall +answer
google.com. 300 IN TXT "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com. 300 IN TXT "v=spf1 include:_spf.google.com ~all"
google.com. 300 IN TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
4. Запрос записей MX
Чтобы получить список всех почтовых серверов для определенного домена, воспользуйтесь опцией mx
:
dig +nocmd google.com mx +noall +answer
google.com. 494 IN MX 30 alt2.aspmx.l.google.com.
google.com. 494 IN MX 10 aspmx.l.google.com.
google.com. 494 IN MX 40 alt3.aspmx.l.google.com.
google.com. 494 IN MX 50 alt4.aspmx.l.google.com.
google.com. 494 IN MX 20 alt1.aspmx.l.google.com.
5. Запрос записей NS
Чтобы найти авторитетные серверы имен для нашего конкретного домена, используйте параметр ns
:
dig +nocmd google.com ns +noall +answer
google.com. 84527 IN NS ns1.google.com.
google.com. 84527 IN NS ns2.google.com.
google.com. 84527 IN NS ns4.google.com.
google.com. 84527 IN NS ns3.google.com.
6. Запрос всех записей
Используйте этот параметр any
, чтобы получить список всех записей DNS для определенного домена:
dig +nocmd google.com any +noall +answer
google.com. 299 IN A 216.58.212.14
google.com. 299 IN AAAA 2a00:1450:4017:804::200e
google.com. 21599 IN NS ns2.google.com.
google.com. 21599 IN NS ns1.google.com.
google.com. 599 IN MX 30 alt2.aspmx.l.google.com.
google.com. 21599 IN NS ns4.google.com.
google.com. 599 IN MX 50 alt4.aspmx.l.google.com.
google.com. 599 IN MX 20 alt1.aspmx.l.google.com.
google.com. 299 IN TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
google.com. 21599 IN CAA 0 issue "pki.goog"
google.com. 599 IN MX 40 alt3.aspmx.l.google.com.
google.com. 3599 IN TXT "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com. 21599 IN NS ns3.google.com.
google.com. 599 IN MX 10 aspmx.l.google.com.
google.com. 3599 IN TXT "v=spf1 include:_spf.google.com ~all"
google.com. 59 IN SOA ns1.google.com. dns-admin.google.com. 216967258 900 900 1800 60
Обратный поиск DNS
Чтобы запросить имя хоста, связанное с определенным IP-адресом, используйте этот параметр -x
.
Например, чтобы выполнить обратный поиск, 208.118.235.148
вы должны использовать:
dig -x 208.118.235.148 +noall +answer
Как видно из вывода ниже, IP-адрес 208.118.235.148
связан с именем хоста wildebeest.gnu.org
.
; <<>> DiG 9.13.3 <<>> -x 208.118.235.148 +noall +answer
;; global options: +cmd
148.235.118.208.in-addr.arpa. 245 IN PTR wildebeest.gnu.org.
Массовые запросы
Если вы хотите запросить большое количество доменов, вы можете добавить их в файл (один домен в строке) и использовать параметр -f
, за которым следует имя файла.
В следующем примере мы запрашиваем домены, перечисленные в файле domains.txt
.
lxer.com
linuxtoday.com
tuxmachines.org
dig -f domains.txt +short
108.166.170.171
70.42.23.121
204.68.122.43
Файл .digrc
Поведение команды dig может контролироваться путем настройки для каждого параметра пользователя в файле ${HOME}/.digrc
.
Если файл .digrc
присутствует в домашнем каталоге пользователя, параметры, указанные в нем, применяются до аргументов командной строки.
Например, если вы хотите отобразить только раздел ответа, откройте текстовый редактор и создайте следующий файл ~/.digrc
:
+nocmd +noall +answer
Заключение
К настоящему времени у вас должно быть хорошее представление о том, как использовать команду dig в Linux, и вы должны иметь возможность устранить большинство проблем, связанных с DNS.