Работа с консольной утилитой DIG

Работа с консольной утилитой DIG

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

DIG (domain information groper) утилита для обращения к системе DNS.
Утилита DIG входит в стандартный комплект DNS сервера BIND.

Вывод команды без ключей и дополнительных параметров.

По умолчанию получаем A-запись домена (IP-адрес)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ dig bogachev.biz

; <<>> DiG 9.8.3-P1 <<>> bogachev.biz
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29922
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;bogachev.biz. IN A

;; ANSWER SECTION:
bogachev.biz. 21600 IN A 188.64.175.175

;; Query time: 58 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Tue Dec 20 19:56:41 2016
;; MSG SIZE rcvd: 46

Давайте рассмотрим разделы подробней:

  • HEADER (заголовок): показывает версию DIG, глобальные опции используемые с командой и другую дополнительную информацию;
  • QUESTION SECTION (секция запроса): Показывает наш запрос, то бишь мы запросили показать A-запись (команда DIG без параметров) для домена bogachev.biz;
  • ANSWER SECTION (секция ответа): Показывает ответ полученный от DNS, в нашем случае показывает A-запись для bogachev.biz;

Последняя секция это статистика по запросу (служебная информация) - время выполнения запроса, имя DNS-сервера который запрашивался, когда был создан запрос и размер сообщения.

По необходимости мы можем выполнить запрос от определенного DNS-сервер, например:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ dig @ns1.yandex.ru ya.ru

; <<>> DiG 9.8.3-P1 <<>> @ns1.yandex.ru ya.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5973
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;ya.ru. IN A

;; ANSWER SECTION:
ya.ru. 7200 IN A 213.180.193.3
ya.ru. 7200 IN A 93.158.134.3
ya.ru. 7200 IN A 213.180.204.3

;; AUTHORITY SECTION:
ya.ru. 7200 IN NS ns1.yandex.ru.
ya.ru. 7200 IN NS ns2.yandex.ru.

;; ADDITIONAL SECTION:
ns1.yandex.ru. 345600 IN A 213.180.193.1
ns2.yandex.ru. 345600 IN A 93.158.134.1
ns1.yandex.ru. 3600 IN AAAA 2a02:6b8::1
ns2.yandex.ru. 3600 IN AAAA 2a02:6b8:0:1::1

;; Query time: 6 msec
;; SERVER: 213.180.193.1#53(213.180.193.1)
;; WHEN: Tue Dec 20 20:04:44 2016
;; MSG SIZE rcvd: 202

Наблюдаем две новые секции:
AUTHORITY SECTION: Показывает имена DNS-серверов обработавших наш запрос;
ADDITIONAL SECTION: Показывает ip-адреса этих DNS-серверов (из секции AUTHORITY SECTION)
На примере моего домена дополнительных строк не появится, поэтому я попробую на примере яндекса.

Вывод только секции ANSWER SECTION.

В большинстве случаев требуется только IP адрес домена, а именно вывод секции ANSWER SECTION.

Для этого существуют ключи:

  • +nocomments - отключает линию комментариев;
  • +noauthority - отключает секцию AUTHORITY SECTION;
  • +noadditional – отключает секцию ADDITIONAL SECTION;
  • +nostats – отключает секцию статистики;
  • +noanswer – выключает секцию ответа ANSWER SECTION.
1
2
3
4
5
6
7
$ dig ya.ru +nocomments +noquestion +noauthority +noadditional +nostats

; <<>> DiG 9.8.3-P1 <<>> ya.ru +nocomments +noquestion +noauthority +noadditional +nostats
;; global options: +cmd
ya.ru. 2801 IN A 93.158.134.3
ya.ru. 2801 IN A 213.180.193.3
ya.ru. 2801 IN A 213.180.204.3

Можно упростить задачу и для этого существует ключ +noall, который выключает все секции.
Таким образом мы используем ключ +noall и добавляем ключ +answer, тем самым уменьшая длину запроса.

1
2
3
4
5
6
7
$ dig ya.ru +noall +answer

; <<>> DiG 9.8.3-P1 <<>> ya.ru +noall +answer
;; global options: +cmd
ya.ru. 2737 IN A 93.158.134.3
ya.ru. 2737 IN A 213.180.193.3
ya.ru. 2737 IN A 213.180.204.3

Запрос NS-записи.

Для запроса NS-записей домена используем аргумент NS, а также используемые ранее ключи, чтобы отбросить ненужную информацию.

1
2
3
4
5
6
$ dig NS ya.ru +noall +answer

; <<>> DiG 9.8.3-P1 <<>> NS ya.ru +noall +answer
;; global options: +cmd
ya.ru. 4990 IN NS ns1.yandex.ru.
ya.ru. 4990 IN NS ns2.yandex.ru.

Запрос MX-записи.

По аналогии с предыдущим пунктом, используем аргумент MX.

1
2
3
4
5
$ dig MX ya.ru +noall +answer

; <<>> DiG 9.8.3-P1 <<>> MX ya.ru +noall +answer
;; global options: +cmd
ya.ru. 4881 IN MX 10 mx.yandex.ru.

Просмотр всех типов DNS-записей.

1
2
3
4
5
6
7
8
9
10
11
12
13
$ dig ya.ru ANY +noall +answer

; <<>> DiG 9.8.3-P1 <<>> ya.ru ANY +noall +answer
;; global options: +cmd
ya.ru. 3600 IN SOA ns1.yandex.ru. sysadmin.yandex.ru. 2016120900 900 600 2592000 900
ya.ru. 1733 IN TXT "v=spf1 redirect=_spf.yandex.ru"
ya.ru. 4835 IN MX 10 mx.yandex.ru.
ya.ru. 122 IN AAAA 2a02:6b8::3
ya.ru. 2387 IN A 93.158.134.3
ya.ru. 2387 IN A 213.180.193.3
ya.ru. 2387 IN A 213.180.204.3
ya.ru. 4759 IN NS ns1.yandex.ru.
ya.ru. 4759 IN NS ns2.yandex.ru.

Краткий вывод DIG.

Для просмотра только IP-адрес, без лишней информации, используем опцию +short.

1
2
3
4
5
6
7
8
9
10
$ dig ya.ru ANY +short
ns1.yandex.ru. sysadmin.yandex.ru. 2016120900 900 600 2592000 900
"v=spf1 redirect=_spf.yandex.ru"
10 mx.yandex.ru.
2a02:6b8::3
93.158.134.3
213.180.193.3
213.180.204.3
ns1.yandex.ru.
ns2.yandex.ru.

Просмотр информации об обратной зоне домена (PTR).

Для просмотра обратной зоны необходимо использовать ключ
Допустим хотим узнать PTR запись для IP-адреса 93.158.134.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ dig -x 93.158.134.3

; <<>> DiG 9.8.3-P1 <<>> -x 93.158.134.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28329
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;3.134.158.93.in-addr.arpa. IN PTR

;; ANSWER SECTION:
3.134.158.93.in-addr.arpa. 2099 IN PTR www.yandex.ru.

;; AUTHORITY SECTION:
134.158.93.in-addr.arpa. 18717 IN NS ns3.yandex.ru.
134.158.93.in-addr.arpa. 18717 IN NS ns4.yandex.ru.

;; Query time: 4 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Tue Dec 20 20:24:08 2016
;; MSG SIZE rcvd: 106

Запрос информации о нескольких доменах.

Для запроса информации о нескольких доменах возможно использование текстового файла со списком доменов.

1
2
3
$ cat lookup.txt 
bogachev.biz
ya.ru

Далее используем ключ -f для чтения информации из файла:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ dig -f lookup.txt +noall +answer
bogachev.biz. 19762 IN A 188.64.175.175
ya.ru. 1749 IN A 93.158.134.3
ya.ru. 1749 IN A 213.180.193.3
ya.ru. 1749 IN A 213.180.204.3
google.com. 135 IN A 81.200.2.185
google.com. 135 IN A 81.200.2.180
google.com. 135 IN A 81.200.2.184
google.com. 135 IN A 81.200.2.176
google.com. 135 IN A 81.200.2.179
google.com. 135 IN A 81.200.2.183
google.com. 135 IN A 81.200.2.186
google.com. 135 IN A 81.200.2.187
google.com. 135 IN A 81.200.2.177
google.com. 135 IN A 81.200.2.182
google.com. 135 IN A 81.200.2.181
google.com. 135 IN A 81.200.2.178

Также можно комбинировать тип DNS записи c опцией -f, например для вывода MX записей:

1
2
3
4
5
6
7
8
$ dig MX -f lookup.txt +noall +answer
bogachev.biz. 21600 IN MX 10 mx.yandex.net.
ya.ru. 4138 IN MX 10 mx.yandex.ru.
google.com. 600 IN MX 10 aspmx.l.google.com.
google.com. 600 IN MX 30 alt2.aspmx.l.google.com.
google.com. 600 IN MX 50 alt4.aspmx.l.google.com.
google.com. 600 IN MX 20 alt1.aspmx.l.google.com.
google.com. 600 IN MX 40 alt3.aspmx.l.google.com.

Возможно перечисление доменов непосредственно в командной строке:

1
2
3
4
5
6
7
8
9
10
11
12
$ dig ya.ru A +noall +answer google.ru MX +noall +answer

; <<>> DiG 9.8.3-P1 <<>> ya.ru A +noall +answer google.ru MX +noall +answer
;; global options: +cmd
ya.ru. 1632 IN A 93.158.134.3
ya.ru. 1632 IN A 213.180.193.3
ya.ru. 1632 IN A 213.180.204.3
google.ru. 600 IN MX 30 alt2.aspmx.l.google.com.
google.ru. 600 IN MX 20 alt1.aspmx.l.google.com.
google.ru. 600 IN MX 50 alt4.aspmx.l.google.com.
google.ru. 600 IN MX 10 aspmx.l.google.com.
google.ru. 600 IN MX 40 alt3.aspmx.l.google.com.

Изменение параметров по умолчанию для команды DIG.

Например если мы хотим, чтобы утилита DIG по умолчанию выводила только секцию ответа ANSWER SECTION, то для этого необходимо внести в файл $HOME/.digrc необходимые ключи, в нашем случае это +noall +answer.

Создать файл содержащий адреса корневых серверов.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
$ dig @f.root-servers.net . ns >> root.cache

; <<>> DiG 9.8.3-P1 <<>> @f.root-servers.net . ns
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26320
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 15
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;. IN NS

;; ANSWER SECTION:
. 518400 IN NS f.root-servers.net.
. 518400 IN NS d.root-servers.net.
. 518400 IN NS k.root-servers.net.
. 518400 IN NS l.root-servers.net.
. 518400 IN NS c.root-servers.net.
. 518400 IN NS b.root-servers.net.
. 518400 IN NS i.root-servers.net.
. 518400 IN NS e.root-servers.net.
. 518400 IN NS g.root-servers.net.
. 518400 IN NS h.root-servers.net.
. 518400 IN NS a.root-servers.net.
. 518400 IN NS j.root-servers.net.
. 518400 IN NS m.root-servers.net.

;; ADDITIONAL SECTION:
a.root-servers.net. 3600000 IN A 198.41.0.4
b.root-servers.net. 3600000 IN A 192.228.79.201
c.root-servers.net. 3600000 IN A 192.33.4.12
d.root-servers.net. 3600000 IN A 199.7.91.13
e.root-servers.net. 3600000 IN A 192.203.230.10
f.root-servers.net. 3600000 IN A 192.5.5.241
g.root-servers.net. 3600000 IN A 192.112.36.4
h.root-servers.net. 3600000 IN A 198.97.190.53
i.root-servers.net. 3600000 IN A 192.36.148.17
j.root-servers.net. 3600000 IN A 192.58.128.30
k.root-servers.net. 3600000 IN A 193.0.14.129
l.root-servers.net. 3600000 IN A 199.7.83.42
m.root-servers.net. 3600000 IN A 202.12.27.33
a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
b.root-servers.net. 3600000 IN AAAA 2001:500:84::b

;; Query time: 3 msec
;; SERVER: 192.5.5.241#53(192.5.5.241)
;; WHEN: Tue Dec 20 20:32:50 2016
;; MSG SIZE rcvd: 492

Вывести трассу DNS запросов к запрашиваему домену.

1
2
3
4
5
$ dig +trace ya.ru

; <<>> DiG 9.8.3-P1 <<>> +trace ya.ru
;; global options: +cmd
;; Received 12 bytes from 192.168.0.1#53(192.168.0.1) in 8 ms

Если необходимо узнать версию DNS-сервера.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ dig -t txt -c chaos VERSION.BIND @18X.X4.XX8.XX

; <<>> DiG 9.8.3-P1 <<>> -t txt -c chaos VERSION.BIND @18X.X4.XX8.XX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18214
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;VERSION.BIND. CH TXT

;; ANSWER SECTION:
VERSION.BIND. 0 CH TXT "9.9.5-P1"

;; AUTHORITY SECTION:
version.bind. 0 CH NS version.bind.

;; Query time: 5 msec
;; SERVER: 18X.X4.XX8.XX#53(18X.X4.XX8.XX)
;; WHEN: Tue Dec 20 20:37:28 2016
;; MSG SIZE rcvd: 77

Для проверки возможности копирования зоны с master сервера на slave сервер.

1
dig @ns2.yandex.ru bogachev.biz. axfr

Для других параметров и опций читаем man dig.