Diagnostika chyb DNS pomocí nástrojů

Domain Name System

DNS (Domain Name System) je základní služba internetu, která převádí názvy domén na IP adresy a naopak. Poruchy v DNS se projevují širokou škálou problémů: od pomalého načítání webových stránek přes úplnou nedostupnost služeb až po chyby při odesílání e-mailů nebo selhání ověřování. Tento článek představuje systematický postup diagnostiky a praktické využití nástrojů pro analýzu DNS chyb na úrovni resolveru, delegací i autoritativních serverů.

Metodika: od symptomu k vrstvě

  1. Upřesněte symptom: nefunguje pouze jedno jméno, jedna doména, nebo všechny názvy? Týká se problém forward i reverse dotazů?
  2. Izolujte vrstvu: klient → stub resolver → rekurzivní resolver → autoritativní servery → registr/registry.
  3. Ověřte síť: latence, blokace portu 53/udp, 53/tcp, případně 853/tcp (DoT) nebo DoH přes 443/tcp.
  4. Porovnejte odpovědi: dotaz na lokální resolver versus veřejné (například 1.1.1.1, 8.8.8.8) – zjistěte, zda je problém lokální nebo na autoritativním serveru.
  5. Proveďte trasování a kontrolu delegace: iterativní +trace, NS a SOA záznamy, glue záznam v nadřazené (parent) zóně, konzistence DS/DNSKEY.

Základní nástroje a kdy je použít

  • dig/kdig/drill/host: přesná syntaxe dotazů, parametry, validace DNSSEC, trasování delegací.
  • nslookup: historický nástroj; používejte jen pokud není dostupný dig (na Windows raději PowerShell Resolve-DnsName).
  • PowerShell (Windows): Resolve-DnsName, Test-DnsServer, Get-DnsClientServerAddress.
  • tcpdump/Wireshark: zachytávání paketů, analýza EDNS, fragmentace, RCODE, DO bit, NSID.
  • DNsviz/Zonemaster/IntoDNS: automatizované online kontroly delegací a DNSSEC (v produkčním prostředí používejte opatrně a mimo incidenty, pokud jsou domény neveřejné).
  • Autoritativní validační nástroje: named-checkzone, named-checkconf (BIND), kzonecheck (Knot DNS), nsd-checkzone (NSD), pdnsutil check-zone (PowerDNS).

Rychlá kontrola resolveru

  • dig example.com A – základní dotaz přes systémový resolver.
  • dig @1.1.1.1 example.com AAAA – obejde lokální resolver, odhalí lokální cache nebo chybu.
  • dig +short example.com MX – stručný výstup pro přehled.
  • dig -x 93.184.216.34 – reverse dotaz, častý zdroj rozdílných problémů (PTR záznamy, delegace in-addr.arpa/ip6.arpa).
  • Resolve-DnsName example.com -Type A – ekvivalent na Windows.

Rozumíme hlavičce a RCODE

  • RCODE: NOERROR (úspěch), NXDOMAIN (jméno neexistuje), SERVFAIL (selhání validace/odpovědi), REFUSED (politika), FORMERR (formát dotazu), NOTAUTH/NOTZONE (autorita/sekce).
  • AD bit: autentizovaná odpověď (DNSSEC úspěšně validováno v resolveru).
  • CD bit: potlačení validace (užitečné pro porovnání chování s a bez DNSSEC).
  • dig +cdflag, dig +adflag – test vlivu validace.

DNSSEC: časté zdroje SERVFAIL

  • dig example.com DNSKEY +dnssec a dig example.com DS +dnssec @a.gtld-servers.net – ověřte řetězec důvěry parent → child.
  • Typické chyby: expirované RRSIG, neodpovídající DS (algoritmus, klíč), špatně podepsané glue záznamy, neaktuální hodiny (NTP drift).
  • dig +trace example.com – sleduje iterativní cestu a identifikuje, kde validace selhává.
  • dig +dnssec @resolver example.com A vs +cdflag – pokud +cdflag projde, je problém v DNSSEC, nikoli v dostupnosti/autorize.

EDNS a velikost paketů

  • Ověřte EDNS buffer a DO bit: dig example.com A +dnssec +bufsize=1232. Hodnota 1232 B minimalizuje riziko fragmentace na moderním internetu.
  • Pokud odpovědi mizí (firewally zahazují fragmenty), vynucení TCP: dig +tcp example.com DNSKEY.
  • Symptom: některé typy (DNSKEY/DS/TXT) selhávají, jiné fungují → podezření na MTU/fragmentaci nebo blokování EDNS.

Trasování delegace a glue

  • dig +trace example.com – postup od kořenových serverů; sledujte NS a glue záznamy.
  • dig example.com NS a dig @tld-server example.com NS – porovnejte parent a child autority; nekonzistence způsobuje flapping.
  • dig ns1.example.com A – ověřte dostupnost glue; pokud chybí nebo je chybný, resolver nedohledá autoritu.
  • dig example.com SOA – kontrola serialu, refresh/retry/expire; důležité pro sekundární servery.

TTL, kešování a negativní keš

  • dig example.com A +ttlunits – sledujte zbývající TTL; staré odpovědi mohou maskovat opravy.
  • dig nonexistent.example.com A – v NOERROR/NODATA versus NXDOMAIN hraje roli negativní keš a SOA záznam (RFC 2308).
  • Serve-stale: některé resolvery vrací „stale“ odpovědi při výpadku autorit – důležité vědět při incidentu.

Split-horizon a lokální resoluce

  • Odlišné odpovědi uvnitř a vně sítě? Testujte s explicitním resolverem: dig @10.0.0.53 intranet.corp A vs dig @1.1.1.1 intranet.corp A.
  • Kontrolujte /etc/resolv.conf, systemd-resolved (resolvectl status), NetworkManager a vyhledávací domény (search).
  • Na macOS (mDNSResponder): scutil --dns a sudo killall -HUP mDNSResponder pro flush cache.
  • Windows: ipconfig /all, ipconfig /flushdns, Get-DnsClientServerAddress.

Mailové problémy: MX, SPF, DKIM, DMARC

  • dig example.com MX a ověřte, že MX ukazují na jmenně řešitelné A/AAAA záznamy.
  • dig mail.example.com A a AAAA – často chybí AAAA nebo forward/reverse konzistence.
  • dig example.com TXT – SPF/DMARC; dig selector._domainkey.example.com TXT – DKIM.
  • Reverse záznamy (-x) a PTR ↔ A: některé služby odmítají spojení při nesouladu.

DoT/DoH testy (šifrované DNS)

  • DNS-over-TLS: kdig @1.1.1.1 +tls example.com nebo openssl s_client -connect 1.1.1.1:853 -servername cloudflare-dns.com (ověření handshake).
  • DNS-over-HTTPS: curl -s -H "accept: application/dns-json" "https://cloudflare-dns.com/dns-query?name=example.com&type=A".
  • Pokud DoT/DoH funguje, ale klasické UDP/TCP nikoliv, hledejte lokální filtraci/CGNAT/MTU problém.

Zachytávání a inspekce paketů

  • tcpdump -ni any port 53 -vvv – rychlá kontrola provozu; sledujte RCODE, velikosti paketů, TC (truncated) bit.
  • Wireshark filtry: dns, udp.port==53, tcp.port==53; pro TLS tcp.port==853.
  • Ověření NSID: některé autority vkládají NSID – užitečné při anycast triáži.

Autoritativní servery: kontrola zóny a konfigurace

  • BIND: named-checkconf, named-checkzone example.com /path/zonefile, rndc reload, rndc zonestatus example.com.
  • Knot DNS: kzonecheck example.com, knotc zone-status example.com.
  • NSD: nsd-checkzone example.com /path/zonefile.
  • PowerDNS: pdnsutil check-zone example.com, pdnsutil rectify-zone (DNSSEC NSEC3).
  • Ověřte serial (SOA) a replikaci na sekundárech; často selhává AXFR/IXFR kvůli ACL nebo chybějícím TSIG.

Nejčastější vzorce chyb a jejich rozpoznání

  • NXDOMAIN, ale existuje CNAME: dotazujete CNAME target bez odpovídajících A/AAAA záznamů – doplňte cílové záznamy.
  • SERVFAIL jen u DNSKEY/DS: rozpad DNSSEC řetězce; zkontrolujte expiraci RRSIG a shodu DS s DNSKEY.
  • REFUSED z autorit: server není open-resolver; dotazujete rekurzi na autoritativním serveru → použijte správný rekurzivní resolver.
  • Truncated (TC=1): nedostatečný UDP buffer nebo blokace fragmentace; přejděte na TCP (+tcp) nebo snižte +bufsize.
  • Intermitentní time-outy: anycast uzel nebo jeden sekundární server mimo provoz; porovnejte odpovědi od všech NS (@ns1, @ns2 …).
  • Reverse selhání e-mailů: chybějící PTR na IP odesílacího MTA, nebo PTR ukazuje na jméno bez A/AAAA (nekompletní forward-confirmed reverse DNS).

Kontrolní seznam při incidentu

  1. Reprodukujte chybu pomocí dig (A/AAAA/MX/NS/SOA) a uložte výstupy.
  2. Porovnejte lokální a veřejný resolver (@1.1.1.1, @8.8.8.8).
  3. Spusťte +trace a najděte nejvyšší úroveň, kde odpověď selhává.
  4. Ověřte DNSSEC (+dnssec, +cdflag), expiraci RRSIG a shodu DS/DNSKEY.
  5. Změřte velikosti odpovědí (+stats) a otestujte +tcp, +bufsize=1232.
  6. Zachycení paketů na klientu i serveru; hledejte zahozené fragmenty a RCODE.
  7. Na autoritativním serveru spusťte check-zone, proveďte AXFR test z rekurzivního resolveru (pokud je povolen) a ověřte ACL/TSIG.

Tabulka: přehled příkazů a interpretace

Účel Příklad Co sleduji
Základní dotaz dig example.com A RCODE, sekce ANSWER, TTL
Dotaz na konkrétní NS dig @ns1.example.com example.com SOA Autorita, serial, dostupnost
Trasování delegace dig +trace example.com Parent/child NS, glue, místo selhání
DNSSEC validace dig example.com A +dnssec / +cdflag AD bit, RRSIG, SERVFAIL vs NOERROR
EDNS a MTU dig DNSKEY +dnssec +bufsize=1232 Fragmentace, TC bit, TCP fallback
Reverse dig -x 203.0.113.10 PTR existuje a odpovídá A/AAAA
Windows Resolve-DnsName example.com -Type MX RCODE, servery v odpovědi
Kont