Module 8 · 8.2
DNS opvragen met dig en nslookup
Module 8: Veiligheid en problemen oplossen · Leestijd: 10 minuten
Leerdoel: Na deze les kun je met dig en nslookup records opvragen, een specifieke nameserver bevragen en de uitvoer lezen.
Kernbegrippen: dig, nslookup, Resolve-DnsName, +short, @server, +trace, ANSWER- en AUTHORITY-sectie, status NOERROR, NXDOMAIN, SERVFAIL, dig -x
Waarom zelf opvragen?
Een paneel laat zien wat jij hebt ingevuld. Wat de rest van de wereld ziet, kan anders zijn: misschien beheert een andere partij de DNS, misschien staat er nog een oud antwoord in een cache. Met een opvraagprogramma stel je dezelfde vraag als een browser of mailserver, en zie je het echte antwoord.
Er zijn drie gangbare programma's:
| Programma | Waar | Opmerking |
|---|---|---|
dig | macOS, Linux (Windows via WSL of los te installeren) | Meest uitgebreid, standaard bij beheerders |
nslookup | Windows, macOS, Linux | Overal aanwezig, beknoptere uitvoer |
Resolve-DnsName | Windows PowerShell | Handig op Windows zonder extra software |
Heb je geen opdrachtvenster bij de hand? Dan kun je precies hetzelfde doen met een online dig-tool (les 8.3).
Je eerste vraag met dig
Open Terminal (macOS/Linux) en typ:
$ dig example.com ADe uitvoer ziet er ingekort zo uit:
;; ->>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)Wat je moet lezen:
- status: het belangrijkste woord. Zie de tabel hieronder.
- flags:
adbetekent dat de resolver het antwoord met DNSSEC heeft gecontroleerd (les 8.1). - ANSWER SECTION: de records zelf. De kolommen zijn dezelfde als in een zone: naam, TTL, klasse, type, waarde.
- TTL (hier 2847): hoeveel seconden dit antwoord nog in de cache van de resolver blijft. Stond in de zone 3600, dan is het antwoord dus al 753 seconden oud. Vraag je het opnieuw, dan zie je het getal aftellen.
- SERVER: welke resolver je hebt gevraagd. Thuis is dat vaak je router.
De drie statussen die je moet kennen
| Status | Betekenis | Wat te doen |
|---|---|---|
NOERROR met antwoord | Alles in orde, dit is het antwoord | Klopt de waarde niet? Dan staat er een verkeerd record, of je ziet een oude cache |
NOERROR zonder antwoord (ANSWER: 0) | De naam bestaat, maar heeft geen record van dit type | Vaak: je vraagt het verkeerde type (bijvoorbeeld A op een naam met alleen een CNAME of alleen MX) |
NXDOMAIN | Deze naam bestaat helemaal niet | Tikfout, record vergeten, of een dubbele domeinnaam zoals mail.example.com.example.com |
SERVFAIL | De resolver kon geen betrouwbaar antwoord krijgen | Nameservers onbereikbaar, of een kapotte DNSSEC-keten (probeer +cd) |
Handige varianten
Alleen het antwoord met +short:
$ dig +short MX example.com
10 mail.example.com.
20 mail2.example.com.Een andere resolver of een nameserver direct vragen met @. Dit is het belangrijkste trucje bij problemen. Vraag je de gezaghebbende nameserver zelf, dan krijg je altijd het verse antwoord, zonder 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.10Hier zie je in één oogopslag wat er aan de hand is: de nameserver geeft al het nieuwe adres (.20), de publieke resolver heeft nog het oude in de cache (.10). Je hoeft dus niets te doen, alleen te wachten tot de TTL voorbij is (module 6).
Andere types: zet het type achter de naam.
$ 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.De hele reis volgen met +trace. dig doet dan zelf wat een resolver doet: eerst de root, dan de TLD, dan de gezaghebbende server (les 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)Met +trace zie je welke nameservers de registry echt doorgeeft. Dat is handig als je twijfelt of een nameserverwijziging al is doorgevoerd.
DNSSEC zien met +dnssec: je krijgt de RRSIG-handtekeningen erbij. Met +cd schakel je de controle uit om te zien of een SERVFAIL door DNSSEC komt.
Reverse DNS met -x (les 4.6):
$ dig +short -x 192.0.2.25
mail.example.com.Hetzelfde met nslookup
nslookup werkt op elke computer. De belangrijkste vormen:
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.9Een tweede adres achter de naam (hier 9.9.9.9) is de server die je vraagt, net als @ bij dig. "Non-authoritative answer" betekent alleen dat het antwoord van een resolver komt en niet van de gezaghebbende nameserver: dat is normaal. Bestaat de naam niet, dan zegt nslookup Non-existent domain, wat hetzelfde is als 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 -DnsOnlyJe eigen cache legen
Ziet een online tool het nieuwe antwoord al, maar jouw computer nog niet? Dan zit het oude antwoord in de cache van je eigen computer of browser.
- Windows:
ipconfig /flushdnsin de Opdrachtprompt. - macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponderin Terminal. - Linux met systemd-resolved:
resolvectl flush-caches. - Browser: een privévenster, of je telefoon via 4G/5G met wifi uit.
De cache van je provider of router kun je niet zelf legen; daar wacht je de TTL af.
In de praktijk: zo ziet het eruit in een paneel
In de meeste panelen kun je geen dig uitvoeren. Gebruik dig daarom naast je paneel: eerst in het paneel kijken wat je hebt ingevuld, dan met dig @<jouw nameserver> controleren of de nameserver dat ook echt uitgeeft, en daarna met dig @9.9.9.9 of de buitenwereld het al ziet. Mijn WebOké heeft een DNS-diagnose die de nameservers onderling vergelijkt; andere partijen hebben vergelijkbare "DNS-controle"-knoppen.
Samenvatting
dig <naam> <type>stelt dezelfde vraag als een browser of mailserver; lees eerst de status.- NOERROR met antwoord is goed, NOERROR zonder antwoord betekent "naam bestaat, type niet", NXDOMAIN betekent "naam bestaat niet", SERVFAIL betekent "geen betrouwbaar antwoord".
- Met
@servervraag je een bepaalde resolver of de gezaghebbende nameserver direct; zo zie je het verschil tussen een fout en een cache. +short,+trace,+dnssec,+cden-xzijn de varianten die je het meest nodig hebt.- nslookup en Resolve-DnsName doen hetzelfde op Windows.
Quiz
Opdracht
Opdracht Z8.2: dig en nslookup. Vraag met dig, nslookup of Resolve-DnsName (of een online dig-tool) drie dingen op:
- de status van een naam die niet bestaat:
bestaat-niet-dnscursus.sidn.nl; - de MX-records van
wikipedia.org, rechtstreeks bij een van de nameservers van wikipedia.org (zoek die eerst op); - de TTL die een publieke resolver op dit moment teruggeeft voor het A-record van
sidn.nl(vraag het twee keer, met een minuut ertussen, en noteer beide getallen).
Vul de antwoorden in.
Verder lezen
Deze artikelen beschrijven de stappen bij WebOké; de commando's werken overal hetzelfde.
