Modul 8 · 8.2
Slå upp DNS med dig och nslookup
Modul 8: Säkerhet och felsökning · Lästid: 10 minuter
Lärandemål: Efter den här lektionen kan du slå upp poster med dig och nslookup, fråga en specifik namnserver direkt och läsa svaret.
Nyckelbegrepp: dig, nslookup, Resolve-DnsName, +short, @server, +trace, ANSWER- och AUTHORITY-sektion, status NOERROR, NXDOMAIN, SERVFAIL, dig -x
Varför slå upp själv?
En panel visar vad du själv har fyllt i. Vad resten av världen ser kan vara annorlunda: kanske hanterar en annan part DNS, kanske finns det fortfarande ett gammalt svar i en cache. Med ett uppslagsprogram ställer du samma fråga som en webbläsare eller mailserver, och ser det verkliga svaret.
Det finns tre vanliga program:
| Program | Var | Kommentar |
|---|---|---|
dig | macOS, Linux (Windows via WSL eller installeras separat) | Mest omfattande, standard bland administratörer |
nslookup | Windows, macOS, Linux | Finns överallt, mer kortfattad utdata |
Resolve-DnsName | Windows PowerShell | Praktiskt på Windows utan extra programvara |
Har du inget kommandofönster till hands? Då kan du göra exakt samma sak med ett online dig-verktyg (lektion 8.3).
Din första fråga med dig
Öppna Terminal (macOS/Linux) och skriv:
$ dig example.com AUtdatan ser förkortad ut så här:
;; ->>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)Det du behöver läsa:
- status: det viktigaste ordet. Se tabellen nedan.
- flags:
adbetyder att resolvern har kontrollerat svaret med DNSSEC (lektion 8.1). - ANSWER SECTION: posterna själva. Kolumnerna är samma som i en zon: namn, TTL, klass, typ, värde.
- TTL (här 2847): hur många sekunder det här svaret stannar kvar i resolverns cache. Stod det 3600 i zonen, så är svaret alltså redan 753 sekunder gammalt. Frågar du igen ser du siffran räkna ner.
- SERVER: vilken resolver du har frågat. Hemma är det ofta din router.
De tre statusarna du behöver känna till
| Status | Betydelse | Vad du ska göra |
|---|---|---|
NOERROR med svar | Allt i sin ordning, det här är svaret | Stämmer inte värdet? Då finns det en felaktig post, eller så ser du en gammal cache |
NOERROR utan svar (ANSWER: 0) | Namnet finns, men saknar en post av den här typen | Ofta: du frågar efter fel typ (till exempel A på ett namn som bara har ett CNAME eller bara MX) |
NXDOMAIN | Det här namnet finns inte alls | Skrivfel, glömd post, eller ett dubbelt domännamn som mail.example.com.example.com |
SERVFAIL | Resolvern kunde inte få ett tillförlitligt svar | Namnservrar onåbara, eller en trasig DNSSEC-kedja (prova +cd) |
Praktiska varianter
Bara svaret med +short:
$ dig +short MX example.com
10 mail.example.com.
20 mail2.example.com.Fråga en annan resolver eller en namnserver direkt med @. Det här är det viktigaste tricket vid problem. Frågar du den auktoritativa namnservern själv får du alltid det färska svaret, utan cache:
$ 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.10Här ser du på en gång vad som pågår: namnservern ger redan ut den nya adressen (.20), den publika resolvern har fortfarande den gamla i cachen (.10). Du behöver alltså inte göra något, bara vänta tills TTL har löpt ut (modul 6).
Andra typer: sätt typen efter namnet.
$ 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.Följ hela resan med +trace. dig gör då själv vad en resolver gör: först roten, sedan TLD:n, sedan den auktoritativa servern (lektion 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)Med +trace ser du vilka namnservrar registryt verkligen lämnar ut. Det är praktiskt om du är osäker på om en namnserverändring redan har slagit igenom.
Se DNSSEC med +dnssec: du får RRSIG-signaturerna med. Med +cd stänger du av kontrollen för att se om en SERVFAIL beror på DNSSEC.
Reverse DNS med -x (lektion 4.6):
$ dig +short -x 192.0.2.25
mail.example.com.Samma sak med nslookup
nslookup fungerar på vilken dator som helst. De viktigaste formerna:
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.9En andra adress efter namnet (här 9.9.9.9) är servern du frågar, precis som @ vid dig. "Non-authoritative answer" betyder bara att svaret kommer från en resolver och inte från den auktoritativa namnservern: det är normalt. Finns inte namnet säger nslookup Non-existent domain, vilket är samma sak som 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 -DnsOnlyTöm din egen cache
Visar ett onlineverktyg redan det nya svaret, men inte din egen dator? Då ligger det gamla svaret i cachen på din egen dator eller webbläsare.
- Windows:
ipconfig /flushdnsi Kommandotolken. - macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponderi Terminal. - Linux med systemd-resolved:
resolvectl flush-caches. - Webbläsare: ett privat fönster, eller din telefon via 4G/5G med wifi avstängt.
Cachen hos din operatör eller router kan du inte tömma själv; där väntar du ut TTL:n.
I praktiken: så ser det ut i en panel
I de flesta paneler kan du inte köra dig. Använd därför dig vid sidan av din panel: titta först i panelen vad du har fyllt i, kontrollera sedan med dig @<din namnserver> om namnservern verkligen ger ut det, och kontrollera därefter med dig @9.9.9.9 om omvärlden redan ser det. Mitt WebOké har en DNS-diagnos som jämför namnservrarna sinsemellan; andra leverantörer har liknande knappar för "DNS-kontroll".
Sammanfattning
dig <namn> <typ>ställer samma fråga som en webbläsare eller mailserver; läs statusen först.- NOERROR med svar är bra, NOERROR utan svar betyder "namnet finns, typen inte", NXDOMAIN betyder "namnet finns inte", SERVFAIL betyder "inget tillförlitligt svar".
- Med
@serverfrågar du en viss resolver eller den auktoritativa namnservern direkt; så ser du skillnaden mellan ett fel och en cache. +short,+trace,+dnssec,+cdoch-xär de varianter du behöver mest.- nslookup och Resolve-DnsName gör samma sak på Windows.
Quiz
Uppgift
Uppgift Z8.2: dig och nslookup. Slå upp tre saker med dig, nslookup eller Resolve-DnsName (eller ett online dig-verktyg):
- statusen för ett namn som inte finns:
bestaat-niet-dnscursus.sidn.nl; - MX-posterna för
wikipedia.org, direkt hos en av namnservrarna för wikipedia.org (slå upp dem först); - den TTL som en publik resolver just nu ger tillbaka för A-posten för
sidn.nl(fråga två gånger, med en minut emellan, och anteckna båda talen).
Fyll i svaren.
Läs mer
Dessa artiklar beskriver stegen hos WebOké; kommandona fungerar likadant överallt.
