dig (Domain Information Groper) е мрежов инструмент от команден ред за изпращане на заявки към DNS неймсървъри.
Dig е част от най-използвания софтуер за DNS BIND. dig замества инструменти като nslookup и host и е наличен във всички основни Linux дистрибуции.
Командата dig изпраща DNS запитвания и показва отговорите, получени от съответните неймсървъри. Повечето DNS администратори използват dig за отстраняване на проблеми с DNS.
Dig е предпочитан инструмент поради гъвкавостта на командите, лесния начин на работа и показване на ясни за разбиране резултати. Други инструменти за DNS диагностика обикновено имат ограничена функционалност в сравнение с dig.
Наличните аргументи и опции на командата може да видите като изпълните в терминал dig -h
. За разлика от по-ранните версии, BIND 9
имплементацията на dig позволява изпращане на многобройни запитвания от команден ред.
За Windows dig
може да се инсталира допълнително: 🔗 Инсталация на dig на Windows 10 | Help
Начин на работа на командата dig
Типичното използване на dig изглежда по следния начин:
dig @server name type
където:
server – е името или IP адреса на неймсървъра, към който изпращаме заявката. Това може да е IPv4 или IPv6 адрес. Когато предоставеният аргумент @server
е хост име, dig резолва това име, преди да изпрати заявка към него.
Ако няма предоставен аргумент @server
, dig се консултира с /etc/resolv.conf
. Ако открие адрес ще изпрати заявка към неймсървърите на този адрес. Ако няма използваеми адреси, dig ще изпрати заявката към localhost
и ще запише като изход отговорите на съответния неймсървър.
name – е домейн името, за чиито DNS записи изпращаме запитването.
type – посочва типа на търсения DNS запис – A, MX, NS и т.н. Ако няма предоставен type аргумент, dig изпраща запитване за А запис.
Структура на резултата от запитването с командата dig
Изходът на командата dig
съдържа следните секции:
dig @ns1.redhat.com redhat.com
Header: Показва номера и глобалните опции на командата dig:
; <<>> DiG 9.10.3-P4-Ubuntu <<>> @ns1.redhat.com redhat.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48736
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 5
Question: показва типа DNS запис в запитването. В примера тъй като няма въведен type
аргумент, dig търси А
записа на домейна redhat.com
:
;; QUESTION SECTION:
;redhat.com. IN A
Answer: показва отговора от запитването – А
записа на redhat.com
:
;; ANSWER SECTION:
redhat.com. 3600 IN A 209.132.183.105
Authority: показва DNS сървъра, който има правомощия да отговаря на тази заявка. Отговорът показва DNS неймсървърите на redhat.com
:
;; AUTHORITY SECTION:
redhat.com. 3600 IN NS ns2.redhat.com.
redhat.com. 3600 IN NS ns4.redhat.com.
redhat.com. 3600 IN NS ns3.redhat.com.
redhat.com. 3600 IN NS ns1.redhat.com.
Additional: Показва IP адресите на неймсървърите, посочени в секция Authority:
;; ADDITIONAL SECTION:
ns1.redhat.com. 129959 IN A 209.132.186.218
ns2.redhat.com. 47159 IN A 209.132.183.2
ns3.redhat.com. 129959 IN A 66.187.233.212
ns4.redhat.com. 78214 IN A 209.132.188.218
Секция Статистика в долната част на изхода показва статистически данни за датата, продължителността и големината на запитването както и името на неймсървъра, от който сме получили отговора:
;; Query time: 235 msec
;; SERVER: 209.144.50.138#53(209.144.50.138)
;; WHEN: Tue Jan 30 00:58:48 EET 2018
;; MSG SIZE rcvd: 191
Показване само на секция Аnswer
Причината да правим DNS запитване с dig
е информацията в секция Answer (отговор). Така че, можем да изключим всички останали секции, като добавим към командата следните опции:
+nocomments
– изключване на коментари;+noquestions
– изключване на секция question;+noauthority
– изключване на секция authority;+noadditional
– изключване на секция additional;+nostats
– изключване на секция статистика.
Следващата dig
команда показва само секция Answer:
$ dig redhat.com +nocomments +noquestion +noauthority +noadditional +nostats
; <<>> DiG 9.10.3-P4-Ubuntu <<>> redhat.com +nocomments +noquestion +noauthority +noadditional +nostats
;; global options: +cmd
redhat.com. 3534 IN A 209.132.183.105
Вместо да въвеждаме в командата една по една опциите на всички секции, които не искаме да се зареждат в изхода на dig
, можем да деактивираме всички секции, като използваме опцията +noall
(това ще изключи и секцията за отговори) и добавяме +аnswer
, която ще показва само раздела за отговори.
Горната команда може да бъде написана и в кратка форма, както е показано по-долу, което показва само секция Answer:
$ dig redhat.com +noall +answer
; <<>> DiG 9.10.3-P4-Ubuntu <<>> redhat.com +noall +answer
;; global options: +cmd
redhat.com. 3151 IN A 209.132.183.105
Дълъг или кратък отговор?
По подразбиране dig
показва дълъг отговор:
redhat.com. 3151 IN A 209.132.183.105
За да получите кратък отговор, добавете в dig
командата опция +short
:
$ dig +short redhat.com
209.132.183.105
Записване на dig аргументи в предефиниран файл .digrc
Видяхме, че използването на допълнителни опции ни позволява да персонализираме dig
да работи по най-удобния за нас начин. Но въвеждането на няколко опции след всяко запитване не може да се нарече приятелско отношение към администратора от страна на командата.
Ако искате dig
да показва само секция Answer, не е нужно да пишете +noall +answer
във всяка команда. Вместо това добавете опциите във файла .digrc
, както е показано по-долу:
$ cat $ ~/.digrc
+ noall +answer
Сега командата dig
ще използва опциите +noall +answer
по подразбиране. По този начин работата с dig
става много лесна защото от една страна не въвеждаме много опции при всяко запитване и от друга – отговорите на неймсървърите се разчитат по-бързо защото няма излишна информация в терминала.
Запитване за DNS записи на домейн с командата dig
В следващите редове показваме примерни запитвания за най-често използваните DNS записи:
DNS А запис (IPv4 и IPv6)
$ dig yahoo.com a
yahoo.com. 581 IN A 98.139.180.180
yahoo.com. 581 IN A 98.138.252.38
yahoo.com. 581 IN A 206.190.39.42
$ dig yahoo.com aaaa
yahoo.com. 390 IN AAAA 2001:4998:c:e33::53
yahoo.com. 390 IN AAAA 2001:4998:58:2201::73
yahoo.com. 390 IN AAAA 2001:4998:44:204::100d
DNS NS запис
$ dig yahoo.com ns
yahoo.com. 171560 IN NS ns1.yahoo.com.
yahoo.com. 171560 IN NS ns5.yahoo.com.
yahoo.com. 171560 IN NS ns4.yahoo.com.
yahoo.com. 171560 IN NS ns3.yahoo.com.
yahoo.com. 171560 IN NS ns2.yahoo.com.
DNS MX запис
$ dig yahoo.com mx
yahoo.com. 1800 IN MX 1 mta7.am0.yahoodns.net.
yahoo.com. 1800 IN MX 1 mta6.am0.yahoodns.net.
yahoo.com. 1800 IN MX 1 mta5.am0.yahoodns.net.
DNS CNAME запис
$ dig mail.yahoo.com cname
mail.yahoo.com. 108 IN CNAME fd-geoycpi-uno.gycpi.b.yahoodns.net.
DNS TXT запис
dig yahoo.com txt
yahoo.com. 1493 IN TXT "v=spf1 redirect=_spf.mail.yahoo.com"
DNS TTL запис
$ dig yahoo.com ttl
yahoo.com. 525 IN A 98.139.180.180
yahoo.com. 525 IN A 98.138.252.38
yahoo.com. 525 IN A 206.190.39.42
DNS PTR (reverse) запис
$ dig -x 68.180.131.16
16.131.180.68.in-addr.arpa. 1800 IN PTR ns1.yahoo.com.
DNS SOA запис
$ dig yahoo.com soa
yahoo.com. 1306 IN SOA ns1.yahoo.com. hostmaster.yahoo-inc.com. 2018013007 3600 300 1814400 600
По този начин се показват само стойностите от SOA секцията на зоновия файл на домейна и информацията не е лесна за разчитане. Затова добавяме опцията +multiline
в командата:
$ dig yahoo.com soa +multiline
yahoo.com. 1296 IN SOA ns1.yahoo.com. hostmaster.yahoo-inc.com. (
2018013007 ; serial
3600 ; refresh (1 hour)
300 ; retry (5 minutes)
1814400 ; expire (3 weeks)
600 ; minimum (10 minutes)
)
Запитване на неймсървър по избор с командата dig
Вместо да пишем отделна заявка за всеки DNS запис можем да изпратим запитване за SOA запис, в който се посочва главния (master) неймсървър и след това да изпратим запитване за всички DNS записи на домейна към master неймсървърa:
$ dig @ns1.yahoo.com yahoo.com any +multiline
yahoo.com. 1800 IN CAA 0 iodef "mailto:security@yahoo.com"
yahoo.com. 1800 IN CAA 0 issue "symantec.com"
yahoo.com. 1800 IN CAA 0 issue "digicert.com"
yahoo.com. 1800 IN TXT "v=spf1 redirect=_spf.mail.yahoo.com"
yahoo.com. 172800 IN NS ns3.yahoo.com.
yahoo.com. 172800 IN NS ns2.yahoo.com.
yahoo.com. 172800 IN NS ns4.yahoo.com.
yahoo.com. 172800 IN NS ns5.yahoo.com.
yahoo.com. 172800 IN NS ns1.yahoo.com.
yahoo.com. 1800 IN MX 1 mta7.am0.yahoodns.net.
yahoo.com. 1800 IN MX 1 mta6.am0.yahoodns.net.
yahoo.com. 1800 IN MX 1 mta5.am0.yahoodns.net.
yahoo.com. 1800 IN AAAA 2001:4998:c:e33::53
yahoo.com. 1800 IN AAAA 2001:4998:44:204::100d
yahoo.com. 1800 IN AAAA 2001:4998:58:2201::73
yahoo.com. 1800 IN A 98.138.252.38
yahoo.com. 1800 IN A 98.139.180.180
yahoo.com. 1800 IN A 206.190.39.42
yahoo.com. 1800 IN SOA ns1.yahoo.com. hostmaster.yahoo-inc.com. (
2018013007 ; serial
3600 ; refresh (1 hour)
300 ; retry (5 minutes)
1814400 ; expire (3 weeks)
600 ; minimum (10 minutes)
)
Виждаме, че в изходната информация се съдържа един по-малко известен запис CAA. Записът CAA (Certification Authority Authorization) се използва, за да посочи кои сертифициращи органи (CA) имат право да издават сертификати за домейна.
Изпращане на многобройни запитвания с командата dig
С помощта на dig
можем да изпращаме многобройни запитвания за различни домейни и различни типове DNS записи в една единствена команда:
~$ dig redhat.com ns debian.com aaaa centos.org mx
redhat.com. 53437 IN NS ns2.redhat.com.
redhat.com. 53437 IN NS ns3.redhat.com.
redhat.com. 53437 IN NS ns1.redhat.com.
redhat.com. 53437 IN NS ns4.redhat.com.
debian.com. 300 IN AAAA 2001:4f8:1:c::15
debian.com. 300 IN AAAA 2001:41c8:1000:21::21:4
debian.com. 300 IN AAAA 2001:67c:2564:a119::148:14
centos.org. 3600 IN MX 20 mail2.centos.org.
centos.org. 3600 IN MX 10 mail.centos.org.
Batch mode: използване на информация от файл
С командата cat
създайте текстов файл, който да съдържа домейна, типа DNS запис и по желание допълнителни опции, като записвате заявките по една на ред:
$ cat > digfile
+short google.com mx
+short yahoo.com mx
Запазете файла с CTRL+D
. Добавете опция -f
и името на файла в dig
командата (ако файлът е в поддиректория, въведете коректния път до файла):
$ dig -f digfile
30 alt2.aspmx.l.google.com.
20 alt1.aspmx.l.google.com.
10 aspmx.l.google.com.
50 alt4.aspmx.l.google.com.
40 alt3.aspmx.l.google.com.
1 mta5.am0.yahoodns.net.
1 mta7.am0.yahoodns.net.
1 mta6.am0.yahoodns.net.
Кой DNS сървър отговаря на моите запитвания с командата dig?
Можем да видим кой DNS сървър отговаря на нашите заявки, като погледнем в последната секция Статистика от изхода на dig
. DNS сървърът е посочен в реда SERVER
.
Изпращаме запитване към публичния DNS на google.com 8.8.8.8
:
dig @8.8.8.8 centos.org
;; Query time: 63 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jan 30 00:34:11 EET 2018
;; MSG SIZE rcvd: 55
В секция Статистика след ;; SERVER:
е записан коректният IP адрес (дори в командата да въведем хост име на неймсървъра, в статистиката винаги се записва IP адреса на отговарящия неймсървър).
Сега изпълняваме нормална заявка с dig
:
dig centos.org
;; Query time: 26 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Tue Jan 30 00:34:21 EET 2018
;; MSG SIZE rcvd: 44
Този път получихме отговора от локалния DNS неймсървър 127.0.1.1
.
Надяваме се, че информацията в тази статия ще Ви бъде от ползва при изпращане на запитвания за DNS записи на домейни с командата dig
.