Domain Name System
DNS (Domain Name System) je základní služba internetu převádějící názvy na IP adresy a naopak. Poruchy v DNS se projevují širokou škálou problémů: od pomalého načítání webů po úplnou nedostupnost služeb, chyby odesílání e-mailů nebo selhání ověřování. Tento článek představuje systematický postup diagnostiky a praktické použití nástrojů pro analýzu DNS chyb na úrovni rezolveru, delegací i autoritativních serverů.
Metodika: od symptomu k vrstvě
- Upřesněte symptom: nefunguje jen jeden název, jedna doména, či veškeré názvy? Týká se problém forward i reverse dotazů?
- Izolujte vrstvu: klient → stub resolver → rekurzivní resolver → autoritativní servery → registr/registry.
- Ověřte síť: latence, blokace portu 53/udp, 53/tcp, případně 853/tcp (DoT) nebo DoH přes 443/tcp.
- Porovnejte odpovědi: dotaz na lokální resolver versus veřejné (např. 1.1.1.1, 8.8.8.8) – identifikujete, zda je problém lokální či na autoritě.
- Proveďte trasování a kontrolu delegace: iterativní +trace, NS a SOA záznamy, glue v parent zóně, konzistence DS/DNSKEY.
Základní nástroje a kdy po nich sáhnout
- dig/kdig/drill/host: přesná syntaxe dotazů, vlajky, validace DNSSEC, trasování delegací.
- nslookup: historický nástroj; použijte jen pokud chybí 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é on-line kontroly delegací a DNSSEC (v provozu použijte s opatrností a mimo incident, 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 rezolveru
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í keš/chybu.dig +short example.com MX– stručný výstup pro přehled.dig -x 93.184.216.34– reverse dotaz, častý zdroj odlišný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 (selhala validace/odpověď), REFUSED (politika), FORMERR (formát dotazu), NOTAUTH/NOTZONE (autorita/sekce).
- AD bit: autentizovaná odpověď (DNSSEC validováno v rezolveru).
- CD bit: potlačí validaci (užitečné pro porovnání chování s/bez DNSSEC).
dig +cdflag,dig +adflag– test vlivu validace.
DNSSEC: časté zdroje SERVFAIL
dig example.com DNSKEY +dnssecadig 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, neaktuální hodiny (NTP drift).
dig +trace example.com– sleduje iterativní cestu a identifikuje, kde validace selže.dig +dnssec @resolver example.com Avs+cdflag– pokud +cdflag projde, je problém v DNSSEC, nikoli v dosahu/autoritu.
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) padají, 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 NSadig @tld-server example.com NS– porovnejte parent a child autority; nekonzistence způsobí flapping.dig ns1.example.com A– ověřte dostupnost glue; pokud chybí nebo je špatný, 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é rezolvery vrací „stale“ odpovědi při výpadku autorit – dobré vědět při incidentu.
Split-horizon a lokální rezoluce
- Rozdílné odpovědi uvnitř a vně sítě? Testujte s explicitním rezolverem:
dig @10.0.0.53 intranet.corp Avsdig @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 --dnsasudo killall -HUP mDNSResponderpro flush. - Windows:
ipconfig /all,ipconfig /flushdns,Get-DnsClientServerAddress.
Mailové problémy: MX, SPF, DKIM, DMARC
dig example.com MXa ověřte, že MX ukazují na jmenně řešitelné A/AAAA.dig mail.example.com AaAAAA– č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.comneboopenssl s_client -connect 1.1.1.1:853 -servername cloudflare-dns.com(ověří 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 ne, hledejte lokální filtraci/CGNAT/MTU problém.
Capturing a inspekce paketů
tcpdump -ni any port 53 -vvv– rychlá kontrola provozu; sledujte RCODE, velikosti, TC (truncated) bit.- Wireshark filtry:
dns,udp.port==53,tcp.port==53; pro TLStcp.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 – doplňte cílové záznamy.
- SERVFAIL jen u DNSKEY/DS: rozpad DNSSEC řetězce; zkontrolujte RRSIG expiry a shodu DS s DNSKEY.
- REFUSED z autorit: server není open-resolver; dotazujete rekurzi na autoritě → 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ár 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
- Reprodukujte chybu s
dig(A/AAAA/MX/NS/SOA) a uložte výstupy. - Porovnejte lokální a veřejný resolver (
@1.1.1.1,@8.8.8.8). - Spusťte
+tracea najděte nejvyšší úroveň, kde odpověď selže. - Ověřte DNSSEC (
+dnssec,+cdflag), expiraci RRSIG a DS/DNSKEY shodu. - Změřte velikosti odpovědí (
+stats) a otestujte+tcp,+bufsize=1232. - Packet capture na klientu i serveru; hledejte zahozené fragmenty a RCODE.
- Na autoritě 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, kde to padá |
| 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 |
| Kontrola zóny (BIND) | named-checkzone example.com zonefile |
Syntaktické a logické chyby |
Výkonnost a latence rezoluce
- Opakujte dotazy s
+stats/+time=; první dotaz zahrnuje rekurzi, další se obslouží z keše. - Měřte latenci k NS serverům (
mtr/traceroute) – pokud je vzdálený sekundár pomalý, preferujte anycast a regionální NS. - Zvažte prefetching, serve-stale a vhodné TTL pro vyvážení čerstvosti a zátěže.
Bezpečnostní aspekty diagnostiky
- Pozor na informace unikající při
version.bind(CHAOS); omezte recursion a version disclosure pouze na management sítě. - Neprovádějte bezhlavé AXFR; povolte jej jen s TSIG a zdrojovými ACL.
- Při sdílení výstupů redigujte interní názvy a IP adresy.
Příklady „end-to-end“ triáží
- „Web nejde jen v kanceláři“:
dig @local-resolver web.example Aselže,@1.1.1.1OK → problém v lokálním rezolveru/keši. Řešení: flush keše, ověřit upstream, EDNS/MSS. - „E-maily se vrací“:
dig example.com MX→ MX na mail.example.com, aledig mail.example.com A/AAAANXDOMAIN → chybí A/AAAA pro host v MX; doplnit záznamy a snížit TTL během opravy. - „Náhodný SERVFAIL“:
+dnssecpadá,+cdflagOK → rozpad DNSSEC: expirované RRSIG v child; přepodepsat, zkontrolovat DS.
Shrnutí
Úspěšná diagnostika DNS stojí na disciplinovaném postupu: izolujte, porovnávejte odpovědi různých rezolverů, sledujte RCODE a DNSSEC signály, trasujte delegace a měřte velikosti odpovědí. Nástroje jako dig/kdig, tcpdump/Wireshark, validační utility autorit a on-line analyzátory vám umožní rychle lokalizovat chybu mezi klientem, rekurzí a autoritou. Důsledná kontrola EDNS/MTU, glue, DS/DNSKEY a TTL keše zkrátí dobu incidentu a zamezí opakovaným výpadkům.