DNS (Domain Name System) je
- 🏷️ služba překládající doménové jméno na IP adresu
- 📋 sada pomocných záznamů o dalších síťových službách
- 🌵 celosvětový strom jmenných zón
Jak funguje DNS?
Jsem DNS nameserver:
- ❓ ptají se mě klienti přes UDP/53 a TCP/53
- 👑 mám autoritu ve své zóně domén
- 🥈 pomáhá mi sekundární nameserver
- 📋 záznamy mám v zónovém souboru
- 🏰 deleguju části zóny jiným nameserverům
- ↔︎️ když nevím, dám referenci nebo rekurzivně najdu
Příklad DNS dotazu
Formát DNS zpráv
| Sekce | Popis | Obsah |
|---|---|---|
| Header | Záměr zprávy, schopnosti serveru, stavový kód | QR, AA, RD/A, RCODE, *COUNT … |
| Question | Dotaz na záznamy | záznam z typu QTYPE (max 1) |
| Answer | Záznamy odpovídající dotazu | záznam z typu TYPE |
| Authority | Odkaz na autoritativní NS | SOA |
| Additional | Pomocné záznamy, např. adresa NS podzóny | A, AAAA |
Delegace a kořenové servery
Strom subdomén zavádí hierarchii mezi doménami:
Nejvýš je ., pak cz., muni.cz., fi.muni.cz., pv090.fi.muni.cz. apod.
Subdomény patří do stejné zóny, pokud je obsluhuje stejná sada autoriativích nameserverů.
Zóny můžou a nemusí odpovídat subdoménám. Tam, kde delegujeme subdoménu, autoritu přebírá server uvedený v záznamu NS a vzniká nová zóna.
Nejvyšší zónu (.) v Internetu spravují servery a.root-servers.net až m.root-servers.net.
Typy DNS záznamů
Základní typy záznamů:
- SOA: začátek zóny, parametry zóny
- A / AAAA: IPv4 / IPv6 adresa domény
- CNAME: kanonické jméno pro doménu (alias)
- MX: e-mail server pro doménu
- NS: nameserver dané domény (delegace)
- PTR: odkaz, nejčastěji pro reverzní DNS pod in-addr.arpa
- TXT: text; key-value záznam pro službu
Klienstký resolver (Stub resolver)
Klientský resolver je služba*, který zpřístupňuje DNS uživatelským aplikacím.
Úkolem klientského resolveru je získat DNS záznamy od cizích nameserverů. Buď spoléhá na rekurzivní resolver, nebo se po řadě táže iterativních resolverů.
Resolver může mít podobu jednoduché proxy na cizí resolver, ale taky může používat LLMDR, mDNS, DNSSEC.
Reminder: Name Service Switch
Soubor /etc/nsswitch.conf řádkem
hosts určuje pořadí služeb pro překlad jmen (viz
man 5 nsswitch.conf). Např.:
hosts: files dns
Zde
- zdroj files čte soubor /etc/hosts a
- zdroj dns se ptá nameserverů v /etc/resolv.conf (typicky klientský resolver).
Tímto pořadím se řídí funkce gethostbyname*(3),
getaddrinfo*(3) ze standardní knihovny jazyka C.
Statická konfigurace jmen
Soubor /etc/hosts obsahuje tabulku statických jmen v
následujícím formátu (viz man 5 hosts):
<IP adresa> <hostname> [<alias>...]
Např.:
127.0.0.1 localhost localhost4
192.168.0.1 router.localHistoricky tento soubor sdílel celý Internet.
Konfigurace klientského resolveru
Možnosti v souboru /etc/resolv.conf (viz
man 5 resolv.conf):
- nameserver: nameserver, kterého se resolver má dotazovat
- search: jméno lokální sítě; pro hledání lokálních jmen
- options: seznam možností
- timeout:n, attempts:n, edns0 (RFC 2671)
Soubor /etc/resolv.conf používají funkce
gethostbyname*(3), getaddrinfo*(3)
prostřednictvím zdroje dns v nastavení
/etc/nsswitch.conf.
Konfigurace systemd-resolved
V systému se systemd-resolved zpravidla needitujeme
/etc/resolv.conf (generovaný automaticky), ale soubor
resolved.conf (viz
man 5 resolved.conf).
Základní možnosti v resolved.conf (sekce [Resolve]):
- DNS=, FallbackDNS=: seznam nameserverů,
- Domains=: domény pro hledání lokálních jmen
- DNSSEC=, DNSOverTLS=: podpora DNSSEC, DoT
- ReadEtcHosts=: čti /etc/hosts (vrací AA!)
Reverzní DNS
Reverzní DNS (rDNS) provádí překlad IP adres zpět na doménová jména.
Pro použití reverzní DNS mapujeme IPv4, resp. IPv6 adresy pod .in-addr.arpa, resp. pod .ip6.arpa.
K takové adrese pak přiřadíme PTR záznam na doménové jméno.
Kořen rDNS obsluhují nameservery z in-addr-servers.arpa / ip6-servers.arpa a delegují rDNS nameserverům podle přiřazení IP adres.
Reverzní DNS — Odvození doménového jména
Pro odvození rDNS adresy skládáme IPv4 oktety v opačném pořadí. IPv6 napřed expandujeme, pak pozpátku skládáme hexadecimální číslice.
Např.: 1.48.251.147.in-addr.arpa PTR fi.muni.cz.
BIND (named)
BIND (Berkeley Internet Name Domain) je balíček s nameserver démonem named. Nameserver konfigurujeme přes named.conf (závisí na distribuci).
V systemd jej spouští služba named.service s dodatečnými možnostmi v /etc/sysconfig/named.
Autorem BIND je ISC (Internet Systems Consortium). Dokumentace BIND9 je dostupná na:
named.conf
Konfigurace BIND se dělí do bloků (vše končí středníkem
;, viz dokumentace):
- blok options:
- directory, listen-on-[v6]-port 53 {…}
- allow-query (AA), allow-query-cache (~AA)
- recursion (ne na veřejném internetu!)
- bloky zone “<zone>” <class=IN> { type …; file “…”; }
- bloky view “…”
- match_clients {…}, recursion, zone bloky
Formát DNS záznamů
Zónové záznamy (RR) píšeme ve formě:
<domain> [<class>] <record type> <data>
Třída záznamu (pole <class>) je zpravidla třída
internet (IN).
Závorky ( a ) je třeba použít tehdy, když
záznam přesahuje na více řádků.
Komentáře začínají středníkem ;, hvězdička
* zastupuje cokoli a zavináč @ značí poslední
doménu (na začátku je to název zóny).
Záznam SOA
Záznam SOA určuje zónu (oblast autority) pro všechny následující záznamy.
Např.:
fi.muni.cz. IN SOA anxur.fi.muni.cz. root.fi.muni.cz. (
2025101131 ; serial
3600 ; refresh
90 ; retry
1209600 ; expire
300 ) ; minimumZáznam SOA — Položky
- name: jméno zóny. Např.
fi.muni.cz. - origin: kde se nachází zónový soubor. Např.
anxur.fi.muni.cz. - person: e-mail v DNS podobě*. Např.
root.fi.muni.cz. - serial: verze zónového souboru. Např.
2025101131
Pozn.: tečka na konci vychází z definice doménových jmen; kořenová zóna má prázdné jméno a je oddělena tečkou od TLD. Tzn. specifikuje FQDN na rozdíl od relativního jména.
Záznam SOA — Položky II
- refresh, retry: intervaly
aktualizace sekundárního nameserveru. Např.
3600,900 - expire: prodleva v synchronizaci, po které
sekundární nameserver zónu zapomíná. Např.
1209600 - minimum: hodnota TTL (time-to-live) negativních
odpovědí, dříve minimální TTL záznamů (výchozí dnes
$TTL <TTL>)
Všechny časové položky se zadávají v sekundách, nebo zkratkovitě
(1W). Délka časových intervalů se zpravidla odvíjí od
úrovně DNS serveru (čím vyšší doména, tím pomalejší).
Rozšíření — DNSSEC, DoT, DoH
- DNSSEC: RRSET, DNSKEY (ZSK, KSK), RRSIG, DS, NSEC
- DNS over TLS/HTTPS/QUIC, DNSCrypt + *ESNI/ECH vs. Do53