Souvislá část doménového stromu, jejíž správa byla delegována jednomu subjektu, je označována jako zóna (zone). Jednou zónou je například kořenová doména, jejíž správu vykoná vá ICANN. Pod ní se nachází například zóna odpovídající doméně cz spravovaná sdružením CZ.NIC.
Hranice zón
Hranice mezi zónami prochází vždy hranou doménového stromu, jež spojuje nadřazenou doménu spadající do jedné zóny s podřazenou, která je již v jiné zóně. Pro tyto hranice se používá pojem zónový řez (zone cut) a označují vlastně hranice zodpovědnosti jednotlivých subjektů. Zónový řez znamená „od tohoto místa spravuje připojený podstrom někdo jiný“. Dotyčný správce může skutečně spravovat celý podstrom, nebo jeho části odřízne a svěří do správy dalším subjektům. To už je čistě otázkou jeho rozhodnutí.
Podívejme se na příklad části doménového stromu na obrázku, který popsaný princip ilustruje. Správce kořenové zóny odřízl její poddoménu cz a svěřil ji CZ.NIC. Ten pochopitelně neobhospodařuje celý příslušný podstrom, ale opět svěřuje jednotlivé domény druhé úrovně subjektům, které o ně projeví zájem.
Takže například doménu tul.cz získala do správy Technická univerzita v Liberci a vznikla tak další zóna. Celou doménu zde obhospodařuje centrální správa sítě, proto pod tul.cz nenajdete žádné další řezy a zóna zahrnuje celý podstrom. Jiný přístup zvolila podstatně větší Univerzita Karlova, která delegovala fakultní domény do správy příslušných fakult. Pod zónou cuni.cz spravovanou centrálním Ústavem výpočetní techniky UK tak vznikly zóny mff.cuni.cz, lf1.cuni.cz, ff.cuni.cz a další, jejichž správu si zajišťují přímo odpovídající fakulty.
Zónový soubor
Existence zón se promítá i do obsahu DNS. V doméně bezprostředně nad zónovým řezem musí být informace o tom, že podřízená doména existuje, avšak má už jiné autoritativní servery. To zajišťují záznamy typu NS. Například doména cz proto obsahuje dvojici záznamů NS pro doménu tul.cz se jmény jejích autoritativních serverů bubo.tul.cz a tul.cesnet.cz. Jména obou serverů leží v zónách podřízených zóně cz, proto musí obsahovat také slepující (glue) záznamy s jejich adresami. Právě tyto záznamy pošle autoritativní server domény cz tazateli, který se bude zajímat o nějaké informace z domény tul.cz.
Každá zóna ve svém kořeni obsahuje záznam typu SOA (Start of Authority), ze kterého zjistíte jméno jejího primárního serveru, e-mail správce a časové konstanty, které ovlivňují zacházení s jejími daty.
Data zóny bývají na serveru uložena v podobě tak zvaného zónového souboru, jehož podobu definuje RFC 1035 pod názvem master file. Je to poněkud nezvyklé, protože formát lokálních dat by měl být spíše věcí implementace a některé se skutečně od standardní podoby odchylují. Nicméně většina serverů tuto syntaxi dodržuje a používá se také ve všech dokumentech o DNS.
Jedná se o textový soubor, v němž je každý záznam zapsán na jeden řádek. Pokud jsou data dlouhá (například v záznamu typu SOA), lze je pro lepší čitelnost uzavřít do závorek a rozdělit do několika řádků. Uvnitř závorek má konec řádku stejný význam jako mezera. Záznam má pět položek vzájemně oddělených libovolnou kombinací mezer a/nebo tabulátorů:
doménovéJméno životnost třída typ data
Doménové jméno určuje jméno, k němuž se záznam vztahuje. Bývá také označováno jako vlastník záznamu. Pokud je zakončeno tečkou, chápe se jako absolutní a úplné. V opačném případě se za ně doplní aktuální doména. Takže například jméno www v zónovém souboru pro nic.cz znamená www.nic.cz.
Jméno může na začátku záznamu zcela chybět, v takovém případě se zdědí z předchozího. Jestliže jako jméno použijete samotný znak „@“, označuje aktuální doménu. Tedy doménu, v jejímž zónovém souboru se vyskytuje nebo která byla určena direktivou $ORIGIN
, jíž se zanedlouho budeme věnovat.
Životnost určuje počet sekund životnosti záznamu ve vyrovnávací paměti a třída jeho třídu. Jejich pořadí může být prohozeno. Údaje také mohou chybět a server za ně dosadí implicitní hodnoty. Poslední dvě položky jsou jako jediné povinné. Určují typ záznamu a v závislosti na něm pak data, která obsahuje.
Existují i servery, jež si lokálně data ukládají do databází, tedy principiálně odlišně od oficiální podoby. Hodnoty jednotlivých položek tvoří celá čísla, doménová jména, IP adresy a řetězce znaků. Jejich zápisy odpovídají běžným konvencím. V případě celých čísel zdůrazněme, že jsou zapisována v desítkové soustavě jako souvislé sekvence číslic. Nelze do nich vkládat oddělovače řádů (mezery, čárky a podobně).
Příklad dat
Výše jsme uvedli, že zóna cz musí obsahovat záznamy NS pro autoritativní servery tul.cz a také odpovídající slepující záznamy. Příslušný úsek zónového souboru by vypadal takto:
tul NS bubo.tul NS tul.cesnet bubo.tul A 147.230.16.1 AAAA 2001:718:1c01:16::aa tul.cesnet A 195.113.233.250
Všimněte si, že všechna jména jsou relativní (nekončí tečkou), takže se za ně doplní doména, v jejímž souboru se vyskytují. Například tul proto znamená tul.cz.
Řetězce znaků, jsou-li souvislé, lze psát přímo tak jak jsou. Pokud však má řetězec obsahovat mezery, je třeba obklopit jej uvozovkami ( " ), aby nebyly pochopeny jako oddělovače položek. Řetězec v uvozovkách může obsahovat i konce řádků a být tedy rozdělen do několika řádků za sebou. Pokud má obsahovat uvozovky, vložte před ně zpětné lomítko ( \" ).
Tento přístup je obecný – chcete-li potlačit speciální význam libovolného znaku, zapište před něj zpětné lomítko. O vložení zpětného lomítka do řetězce se tudíž postará \ . Zcela libovolný znak lze vložit konstrukcí \ DDD, kde DDD jsou číslice udávající kód znaku v osmičkové soustavě. Také tyto znaky jsou interpretovány jako pasivní část textu a je potlačen jejich případný speciální význam.
Alternativním zápisem pro vložení uvozovek by tedy bylo \042 , protože znak " má ASCII kód 34, v osmičkové soustavě 42.
Ke zvýšení čitelnosti lze do zónového souboru vkládat prázdné řádky a komentáře. Ty začínají středníkem, všechny následující znaky až po konec řádku jsou interpretovány jako komentář a serverem ignorovány.
Kromě běžných záznamů se v zónovém souboru mohou objevit také tak zvané direktivy, které představují příkazy ovlivňující způsob interpretace souboru. Různé servery si přidávají vlastní, ale standardně jsou definovány jen tři, jež shrnuje tabulka.
$ORIGIN jméno | změní aktuální doménu – počínaje následujícím řádkem bude za relativní doménová jména doplňováno uvedené jméno |
$INCLUDE soubor | vloží obsah daného souboru jako by jeho text byl zapsán v místě výskytu direktivy |
$TTL čas | nastavuje implicitní dobu životnosti záznamů v zóně (definována v RFC 2308) |
Jednoduchý zónový soubor
Zónový soubor pro velmi zjednodušenou zónu tul.cz, která obsahuje jen web, server pro příjem pošty a jednu poddoménu s vlastním webem, by mohl vypadat například takto:
$TTL 48h SORIGIN tul.cz. @ SOA bubo.tul.cz. pavel\.satrapa.tul.cz. ( 2023071001 ;sériové číslo 86400 ;aktualizovat po 1 dni 7200 ;opakovat po 2 hod 3600000 ;zrušit po 1000 hod 172800 ) ;minimum 2 dny NS bubo NS tul.cesnet.cz. MX 0 bubo MX 50 tul.cesnet.cz. bubo A 147.230.16.1 AAAA 2001:718:1c01:16::aa MX 0 bubo web A 147.230.16.27 AAAA 2001:718:1c01:16:216:3eff:fela:d23f www CNAME web $ORIGIN fm.tul.cz. ; poddoména fm.tul.cz ; zavádíme sirius.fm.tul.cz a www.fm.tul.cz sirius A 147.230.72.241 www CNAME sirius
V souboru používáme relativní jména, abychom jej zkrátili a učinili o něco přehlednějším. U jmen ležících mimo tul.cz (zde například tul.cesnet.cz) je třeba nezapomenout na konci tečku, aby byla správně interpretována jako absolutní. Bez závěrečné tečky by tul.cesnet.cz bylo interpretováno jako tul.cesnet.cz.tul.cz.
Zde zónový soubor obsahuje kompletní data pro celou zónu. To odpovídá logice věci, nicméně není to nezbytné a pro velké zóny to nebude ani příliš praktické – se soubory obludné velikosti se po všech stránkách špatně pracuje. Bylo by klidně možné pro fm.tul.cz vytvořit samostatnou zónu s vlastním souborem:
$TTL 48h SORIGIN fm.tul.cz. @ SOA bubo.tul.cz. pavel\.satrapa.tul.cz. ( 2023071001 ;sériové číslo 86400 ;aktualizovat po 1 dni 7200 ;opakovat po 2 hod 3600000 ;zrušit po 1000 hod 172800 ) ;minimum 2 dny NS bubo NS tul.cesnet.cz. sirius A 147.230.72.241 www CNAME sirius
Pokud jsou obsluhovány stejnými servery, není třeba ani do tul.cz zavádět delegaci záznamem NS. Tazatel hledající www.fm.tul.cz se propracuje k autoritativním serverům pro tul.cz, jež mají oba zónové soubory a rovnou mu odpovědí. Z původního zónového souboru by tedy stačilo vymazat závěrečné řádky (počínaje druhým $ORIGIN
). Koncepčnější ale je přidat do rodičovské domény záznamy s delegací, stejně jako by podřízenou doménu spravoval jiný subjekt. Závěrečné řádky původního zónového souboru je tedy lépe nahradit dvojicí:
fm NS bubo NS tul.cesnet.cz.
Pokud spravujete zónu s poddoménami, je jen na vašem rozhodnutí, zda ji celou uložíte do jednoho souboru, nebo zda ji rozdělíte po jednotlivých doménách – obě varianty mají své přednosti.
Kniha Domain Name System
Text, který jste právě dočetli, je součástí knihy „Domain Name System: Principy fungování DNS a praktické otázky spojené s jeho používáním“ autorů Pavla Satrapy a Ondřeje Filipa, která vyšla v Edici CZ.NIC.