Модул 8 · 8.2
Проверка на DNS с dig и nslookup
Модул 8: Сигурност и отстраняване на проблеми · Време за четене: 10 минути
Цел на урока: След този урок ще можете да извличате записи с dig и nslookup, да питате конкретен DNS сървър (nameserver) и да разчитате изхода.
Основни понятия: dig, nslookup, Resolve-DnsName, +short, @server, +trace, секциите ANSWER и AUTHORITY, статус NOERROR, NXDOMAIN, SERVFAIL, dig -x
Защо сами да проверявате?
Един панел показва това, което Вие сте въвели. Това, което вижда останалият свят, може да е различно: може би друга страна управлява DNS, или в някой кеш все още стои стар отговор. С програма за запитване Вие задавате същия въпрос като браузър или имейл сървър и виждате реалния отговор.
Има три разпространени програми:
| Програма | Where | Comment |
|---|---|---|
dig | macOS, Linux (под Windows чрез WSL или отделна инсталация) | Най-обстоен, стандартен избор за администратори |
nslookup | Windows, macOS, Linux | Наличен навсякъде, по-кратък изход |
Resolve-DnsName | Windows PowerShell | Удобен под Windows без допълнителен софтуер |
Нямате под ръка команден прозорец? Можете да направите абсолютно същото с онлайн dig инструмент (урок 8.3).
Първото Ви запитване с dig
Отворете Terminal (macOS/Linux) и въведете:
$ dig example.com AИзходът изглежда съкратено така:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41872
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 2847 IN A 192.0.2.10
;; Query time: 12 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP)Какво трябва да прочетете:
- status: най-важната дума. Вижте таблицата по-долу.
- flags:
adозначава, че резолверът е проверил отговора с DNSSEC (урок 8.1). - ANSWER SECTION: самите записи. Колоните са същите като в зона: име, TTL, клас, тип, стойност.
- TTL (тук 2847): колко секунди този отговор още остава в кеша на резолвера. Ако в зоната е зададено 3600, значи отговорът вече е на 753 секунди. Ако попитате отново, ще видите как числото намалява.
- SERVER: кой резолвер сте попитали. У дома това често е Вашият рутер.
Трите статуса, които трябва да познавате
| Статус | Значение | Какво да правите |
|---|---|---|
NOERROR с отговор | Всичко е наред, това е отговорът | Стойността не е вярна? Значи или има грешен запис, или виждате стар кеш |
NOERROR без отговор (ANSWER: 0) | Името съществува, но няма запис от този тип | Често: питате за грешен тип (например A за име, което има само CNAME или само MX) |
NXDOMAIN | Това име изобщо не съществува | Правописна грешка, забравен запис или двойно домейн име като mail.example.com.example.com |
SERVFAIL | Резолверът не можа да получи надежден отговор | DNS сървърите (nameservers) недостъпни, или повредена DNSSEC верига (пробвайте +cd) |
Полезни варианти
Само отговорът с +short:
$ dig +short MX example.com
10 mail.example.com.
20 mail2.example.com.Запитване директно към друг резолвер или DNS сървър с @. Това е най-важният трик при проблеми. Ако попитате самия авторитетен (gezaghebbend) DNS сървър, винаги получавате свежия отговор, без кеш:
$ dig +short NS example.com
ns1.hosting.example.
ns2.hosting.example.
$ dig +short A www.example.com @ns1.hosting.example
192.0.2.20
$ dig +short A www.example.com @9.9.9.9
192.0.2.10Тук виждате веднага какво се случва: DNS сървърът вече дава новия адрес (.20), а публичният резолвер все още има стария в кеша (.10). Не трябва да правите нищо, само да изчакате изтичането на TTL (модул 6).
Други типове: поставете типа след името.
$ dig +short TXT example.com
"v=spf1 a mx include:_spf.hosting.example ~all"
"google-site-verification=AbC123..."
$ dig +short TXT _dmarc.example.com
"v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
$ dig +short CNAME shop.example.com
shops.platform.example.Проследяване на целия път с +trace. Тогава dig сам прави това, което прави един резолвер: първо root, после TLD, после авторитетния сървър (урок 1.4):
$ dig +trace example.com A
. 518400 IN NS a.root-servers.net.
;; Received 239 bytes from 192.168.1.1#53
com. 172800 IN NS a.gtld-servers.net.
;; Received 708 bytes from 198.41.0.4#53(a.root-servers.net)
example.com. 172800 IN NS ns1.hosting.example.
;; Received 412 bytes from 192.5.6.30#53(a.gtld-servers.net)
example.com. 3600 IN A 192.0.2.10
;; Received 57 bytes from 198.51.100.53#53(ns1.hosting.example)С +trace виждате кои DNS сървъри регистърът (registry) наистина връща. Това е полезно, ако се съмнявате дали промяна на DNS сървър вече е влязла в сила.
Виждане на DNSSEC с +dnssec: получавате и RRSIG подписите. С +cd изключвате проверката, за да видите дали SERVFAIL идва от DNSSEC.
Обратен DNS (reverse DNS) с -x (урок 4.6):
$ dig +short -x 192.0.2.25
mail.example.com.Същото с nslookup
nslookup работи на всеки компютър. Най-важните форми:
C:\> nslookup example.com
Server: router.lan
Address: 192.168.1.1
Non-authoritative answer:
Name: example.com
Address: 192.0.2.10
C:\> nslookup -type=mx example.com
example.com MX preference = 10, mail exchanger = mail.example.com
C:\> nslookup -type=txt _dmarc.example.com 9.9.9.9Втори адрес след името (тук 9.9.9.9) е сървърът, който питате, точно както @ при dig. "Non-authoritative answer" означава само, че отговорът идва от резолвер, а не от авторитетния DNS сървър: това е нормално. Ако името не съществува, nslookup показва Non-existent domain, което е същото като NXDOMAIN.
Windows PowerShell: Resolve-DnsName
PS> Resolve-DnsName example.com -Type MX
PS> Resolve-DnsName _dmarc.example.com -Type TXT -Server 9.9.9.9
PS> Resolve-DnsName example.com -Type A -DnsOnlyИзчистване на собствения Ви кеш
Онлайн инструмент вижда ли вече новия отговор, но Вашият компютър все още не? Тогава старият отговор се намира в кеша на Вашия собствен компютър или браузър.
- Windows:
ipconfig /flushdnsв командния ред (Opdrachtprompt). - macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponderв Terminal. - Linux със systemd-resolved:
resolvectl flush-caches. - Браузър: частен прозорец (incognito), или Вашият телефон чрез 4G/5G с изключен wifi.
Кеша на Вашия доставчик или рутер не можете сами да изчистите; за него изчаквате изтичането на TTL.
На практика: ето как изглежда в панел
В повечето панели не можете да изпълните dig. Затова използвайте dig успоредно с Вашия панел: първо проверете в панела какво сте въвели, после с dig @<Вашият DNS сървър> проверете дали DNS сървърът наистина връща същото, и накрая с dig @9.9.9.9 проверете дали външният свят вече го вижда. Моят WebOké разполага с DNS диагностика, която сравнява DNS сървърите помежду им; други доставчици имат подобни бутони за „DNS проверка“.
Обобщение
dig <име> <тип>задава същия въпрос като браузър или имейл сървър; първо прочетете статуса.- NOERROR с отговор е добре, NOERROR без отговор означава „името съществува, типът не“, NXDOMAIN означава „името не съществува“, SERVFAIL означава „няма надежден отговор“.
- С
@serverпитате конкретен резолвер или директно авторитетния DNS сървър; така виждате разликата между грешка и кеш. +short,+trace,+dnssec,+cdи-xса вариантите, от които най-често ще имате нужда.- nslookup и Resolve-DnsName правят същото под Windows.
Тест
Задача
Задача Z8.2: dig и nslookup. С dig, nslookup или Resolve-DnsName (или онлайн dig инструмент) извлечете три неща:
- статуса на име, което не съществува:
bestaat-niet-dnscursus.sidn.nl; - MX записите на
wikipedia.org, директно от един от DNS сървърите на wikipedia.org (първо го потърсете); - TTL, който публичен резолвер връща в момента за A записа на
sidn.nl(попитайте два пъти, с минута разлика, и запишете и двете числа).
Въведете отговорите.
Допълнително четене
Тези статии описват стъпките в WebOké; командите работят навсякъде по един и същ начин.
