Dig (Domain Information Groper) — мощный инструмент командной строки для запросов к именам DNS-серверов.
С помощью команды dig вы можете запрашивать информацию о различных записях DNS, включая адреса хостов, почтовые обмены и серверы имен. Это наиболее часто используемый инструмент среди системных администраторов для устранения проблем DNS из-за его гибкости и простоты использования.
В этом уроке мы покажем вам, как использовать утилиту dig с помощью практических примеров и подробных объяснений наиболее распространенных вариантов dig.
Чтобы проверить, доступна ли команда dig для вашего типа системы:
dig -v
Результат должен выглядеть примерно так:
DiG 9.11.3-1ubuntu1.1-Ubuntu
Если в вашей системе нет инструмента dig, вывод будет следующий dig: command not found
, вы сможете легко установить с помощью диспетчера пакетов вашего дистрибутива.
sudo apt install dnsutils
sudo yum install bind-utils
В простейшей форме, когда он используется для запроса одного хоста (домена) без каких-либо дополнительных аргументов, dig довольно многословен.
В следующем примере мы выполним запрос для получения информации о домене linux.org
.
dig linux.org
Результат должен выглядеть примерно так:
Объясним вывод команды dig:
; <<>> DiG 9.13.3 <<>> linux.org
;; global options: +cmd
Если вы не хотите, чтобы эти строки были включены в вывод, используйте эту опцию +nocmd
. Эти параметры должны быть самым первым аргументом после команды dig.
NOERROR
означает, что запрашиваемый орган обслуживал запрос без каких-либо проблем.;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37159
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5
Эта часть вывода может быть удалена с помощью опции +comments
. Когда этот параметр используется, он отключает некоторые другие разделы заголовков.
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
Если вы не хотите, чтобы этот раздел был включен в вывод, используйте этот параметр +noedns
.
;; QUESTION SECTION:
;linux.org. IN A
Вы можете отключить этот раздел, используя эту опцию +noquestion
.
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 SECTION:
linux.org. 86379 IN NS lia.ns.cloudflare.com.
linux.org. 86379 IN NS mark.ns.cloudflare.com.
Вы можете отключить этот раздел вывода с помощью этой опции +noauthority
.
;; 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
;; 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
.
В большинстве случаев вы хотели бы получить только быстрый ответ на ваш запрос.
Чтобы получить короткий ответ на запрос, воспользуйтесь опцией +short
:
dig linux.org +short
104.18.59.123
104.18.58.123
Вывод будет содержать только IP-адреса записи A.
Для более подробного ответа отключите все результаты с помощью параметров +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 (серверы имен).
Чтобы получить список всех адресов (адресов) для имени домена, используйте параметр a
:
dig +nocmd google.com a +noall +answer
google.com. 128 IN A 216.58.206.206
Как вы уже знаете, если тип записи DNS не указан, dig запросит запись A. Вы также можете запросить запись A без указания опции a
Чтобы найти доменное имя псевдонима, используйте параметр cname
:
dig +nocmd mail.google.com cname +noall +answer
mail.google.com. 553482 IN CNAME googlemail.l.google.com.
Используйте параметр 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"
Чтобы получить список всех почтовых серверов для определенного домена, воспользуйтесь опцией 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.
Чтобы найти авторитетные серверы имен для нашего конкретного домена, используйте параметр 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.
Используйте этот параметр 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
Чтобы запросить имя хоста, связанное с определенным 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
Поведение команды dig может контролироваться путем настройки для каждого параметра пользователя в файле ${HOME}/.digrc
.
Если файл .digrc
присутствует в домашнем каталоге пользователя, параметры, указанные в нем, применяются до аргументов командной строки.
Например, если вы хотите отобразить только раздел ответа, откройте текстовый редактор и создайте следующий файл ~/.digrc
:
+nocmd +noall +answer
К настоящему времени у вас должно быть хорошее представление о том, как использовать команду dig в Linux, и вы должны иметь возможность устранить большинство проблем, связанных с DNS.
Вопрос у меня такой. Выполняю запрос —
Получаю ответ —
Как можно удалить из ответа — 2312 IN PTR
оставив запись вида
201.180.100.84.in-addr.arpa mail.ru.
Буду премного благодарен за идеи.