Hlavní navigace

Principy fungování DNS: role různých typů serverů při řešení dotazů

26. 10. 2023
Doba čtení: 8 minut

Sdílet

 Autor: Depositphotos
Není server jako server a v DNS to platí dvojnásob. V hierarchii domén existuje několik různých typů serverů, jejichž role se významně liší. Vysvětlíme si, za co který zodpovídá a jak pracuje.

Role serverů

Klíčovou úlohu v celém systému hrají servery. Obsahují jednotlivé části oné obrovské distribuované databáze, zasílají si dotazy a odpovědi a spolupracují při distribuci informací. Díky jejich vzájemné provázanosti a spolupráci celý systém vůbec může fungovat. DNS servery mají ke konkrétním doménám různý vztah, ze kterého pak vyplývá jejich úloha při řešení dotazů. Pro určitou konkrétní doménu může mít server jednu z následujících rolí:

Autoritativní server obsahuje data dané domény a zodpovídá dotazy na ně. Obsah autoritativních serverů tvoří onu distribuovanou databázi, kterou DNS představuje. O odpovědích autoritativního serveru ohledně dané domény se nepochybuje, jsou považovány za správné, protože pocházejí přímo od zdroje. Na základě vzájemných vztahů lze rozlišit dvě varianty autoritativních serverů: primární a sekundární.

Primární server (master) je místo, kde vznikají informace o doméně. Pokud je třeba udělat v jejích datech změny, musí být provedeny na primárním serveru. Z podstaty věci je jasné, že každá doména má obvykle právě jeden primární server.

Sekundární server (slave) je automatickou kopií primárního. V pravidelných intervalech se na něj obrací s dotazem, zda v doméně nedošlo ke změně, a pokud ano, stáhne si aktuální verzi dat. Současné implementace zpravidla umožňují, aby primární server aktivně upozornil sekundární, že se cosi změnilo a je čas přihlásit se o aktuální data. Díky tomu je synchronizace údajů podstatně rychlejší.

Úloha sekundárního serveru je jasná – dokáže zastoupit primární v případě výpadku a slouží i pro rozkládání zátěže. Je také autoritativní, jeho odpovědi mají v DNS stejnou váhu jako odpovědi primárního serveru. Každá doména musí mít dva autoritativní servery, typicky jeden primární a jeden sekundární, který by měl být z hlediska síťové topologie co nejnezávislejší na primárním.

Rekurzivní server má dvojí tvář. Vůči svým klientům, což bývají typicky stroje z místní sítě, vystupuje jako server. Přijímá jejich dotazy, řeší je a posílá odpovědi. Během řešení se dotazuje autoritativních serverů, vůči kterým vystupuje jako klient. Informace, které při řešení získá, si ukládá do vyrovnávací paměti a dokud nevyprší jejich životnost, využívá je pro své další odpovědi.

Hlavním smyslem rekurzivních serverů je poskytnout společnou vyrovnávací paměť pro místní klienty. Aby se například adresy často používaných webů nehledaly znovu a znovu. Zopakuje-li se dotaz na jméno, které má rekurzivní server v paměti, rovnou pošle odpověď. Zvyšuje tak efektivitu celého systému, zmenšuje počet dotazů a odpovědí přenášených po síti a zrychluje odezvy. Jeho odpovědi samozřejmě nejsou autoritativní. Proto se pro něj používá také pojem pomocný server (caching only).

Ještě jednou zdůrazněme, že výše zmiňované role serverů se vždy vztahují ke konkrétní doméně. Jeden a tentýž server může být primární pro tři domény, sekundární pro dalších pět a pomocný pro všechny ostatní. Rozhoduje o tom pouze a jedině jeho konfigurace.

Primární a sekundární

Z pohledu DNS komunikace není žádný rozdíl mezi primárním a sekundárním serverem. Dokonce ani není viditelný. Pro doménu se ukládají (v záznamech typu NS) všechny autoritativní servery, primární a sekundární se nijak nerozlišují. Odpověď v sobě nese příznak (označovaný AA – Authoritative Answer), zda je autoritativní nebo nikoli. Jeho hodnota závisí na tom, zda odpověď odeslal přímo některý z autoritativních serverů, nebo zda ji odeslal server pomocný ze své vyrovnávací paměti.

Rozdělení na primární a sekundární servery je čistě organizační záležitost, která se promítá do jejich konfigurace. Týká se toho, jak data vznikají, nikoli jejich věrohodnosti. Z pohledu DNS jsou odpovědi všech autoritativních serverů pro doménu stejně důvěryhodné. Některé domény koncept primárních a sekundárních serverů vůbec nepoužívají. Data mají například uložena v databázi, ze které si je berou jejich autoritativní servery. Synchronizaci jejich obsahu zajišťují databázové prostředky.

Mimochodem, jedny z nejošklivějších chyb vznikají, pokud se rozejde obsah primárního serveru se sekundárními. K této situaci může dojít, pokud správce domény upravuje její obsah ručně a zapomene zvětšit sériové číslo, které slouží jako indikátor změny. Sekundární servery si pak nechají původní obsah domény a jejich odpovědi se budou lišit od primárního. Jednotliví klienti se budou obracet na různé autoritativní servery (v závislosti na softwarové implementaci klienta a dobách odezvy jednotlivých serverů) a budou dostávat nekonzistentní odpovědi. Rozložení příjemců špatných odpovědí bude v podstatě náhodné, což řešení problému rozhodně neulehčí.

Případné problematické stavy ještě zhoršují pomocné servery. Na jedné straně výrazně zkracují doby odezvy DNS a snižují zátěž autoritativních serverů, na straně druhé však do něj zavádějí určitou setrvačnost. Dojde-li ke změně, vyrovnávací paměti pomocných serverů nadále obsahují původní údaje a dokud nevyprší jejich platnost, budou je poskytovat svým tazatelům. Tyto servery jsou rozesety po celém světě, jsou zcela mimo působnost správce domény a dotyčné záznamy si uložily v různém čase. Postupně budou nahrazovány aktuální verzí, ale tento proces může trvat několik dnů. Správce domény jej může ovlivňovat jen nepřímo – vhodným nastavením životnosti záznamů.

Autoritativní servery

DNS neposkytuje za každých okolností stoprocentně konzistentní a aktuální informace. Je to cena, kterou platíme za jeho škálovatelnost a efektivitu. Obecně platí, že čím významnější je doména, tím větší péče bývá věnována jejím autoritativním serverům. Má jich zpravidla větší počet a jsou vhodně rozmístěny v různých částech Internetu.

Počet autoritativních serverů poslouží jako orientační měřítko významu domény. Posuďte sami: doména tul.cz má dva, nic.cz tři, doména cz čtyři, com hned třináct a stejný počet má i kořenová doména. Ve skutečnosti je jich podstatně více, protože za jedním jménem v záznamu typu NS se může skrývat mnoho fyzických serverů.

Vyšší počet autoritativních serverů má dva významy: větší robustnost, protože lépe dokáže překonat i větší výpadky sítě, a také rozkládání zátěže. Na autoritativní servery velkých domén se valí obrovské množství dotazů, jejich obsluhování více stroji rozloženými v různých částech sítě je holou nezbytností.

Zcela zásadní roli mají autoritativní servery kořenové domény, tak zvané kořenové servery (root servers). U nich začíná řešení všech dotazů, které pak postupuje doménovým stromem po jednotlivých patrech od kořene až k cíli. Případná nedostupnost všech kořenových serverů by učinila DNS nefunkčním. Proto se za jejich třinácti adresami ve skutečnosti skrývají stovky serverů – konkrétně v polovině roku 2023 jich bylo zhruba 1500. Používají se tak zvané výběrové adresy (anycast), kdy se stejná adresa přidělí několika strojům a směrování se postará o doručení paketu nejbližšímu z jejích majitelů.

Podrobnosti o kořenových serverech včetně mapky jejich rozložení najdete na adrese www.root-servers.org. Budiž autorům a správcům DNS připsáno ke cti, že za celou jeho historii nedošlo k vyřazení všech kořenových serverů, přestože se vyskytlo několik cílených útoků na ně. Zmíněných třináct adres kořenových serverů je velmi konzervativních, protože je musí znát miliony dalších serverů v celém Internetu. Mění se proto zhruba rychlostí pohybu kontinentů. Jejich nejvýznamnější změnou v posledních letech byla postupná implementace IPv6 a s ní přidávané IPv6 adresy.

Resolver čili řešič

Máme tedy data, máme i servery a zbývá nám už jen klient, který se bude systému ptát. V oficiální terminologii se pro něj používá termín resolver (čili řešič). Jeho hlavní úlohou je zprostředkovávat místním aplikacím styk s DNS – na základě jejich požadavků sestavuje DNS dotazy, zasílá je serverům a zpracovává příchozí odpovědi. Obvykle také mívá vlastní vyrovnávací paměť, aby zbytečně neobtěžoval stále stejnými dotazy.

Resolver bývá součástí operačního systému. Z programátorského hlediska má zpravidla podobu knihovny funkcí, které tvoří jeho rozhraní (API) vůči aplikacím. Touto cestou mu jednotlivé programy zadávají úkoly a přebírají si výsledky. Uživatel se na něj přímo obrátit nemůže, proto bývají součástí systému jednoduché aplikace, jejichž prostřednictvím lze komunikovat s resolverem poměrně přímo a zjišťovat tak aktuální informace v DNS.

Podle schopností existují dva základní druhy resolverů:

Plnohodnotný (též rekurzivní) resolver je schopen samostatné existence. Zná adresy kořenových serverů a pokud nemá ve vyrovnávací paměti nic, co by pomohlo s vyřešením aktuálního dotazu, obrátí se na některý z nich. Podrobněji celý proces popíšeme vzápětí. Tento typ resolverů bývá základem výše zmíněných rekurzivních DNS serverů.

Jednoduchý resolver (v originále pahýlový, stub resolver) představuje minimalistický přístup. Potřebuje ke své činnosti adresu místního serveru (případně několika serverů), na který se má obracet se svými dotazy. Dostane-li od aplikace požadavek, převede jej do podoby DNS dotazu a pošle danému serveru. Ten dotaz vyřeší a pošle zpět výslednou odpověď. Jednoduchý resolver nezná adresy kořenových serverů a není schopen samostatné existence. Sám dotazy neřeší, jen je předává místnímu serveru. Součástí běžných operačních systémů bývají právě takové resolvery.

Jednoduchý resolver se snadněji implementuje. Sortiment jeho funkcí je omezený, a kód programu tudíž jednodušší. Vyžaduje však konfiguraci – potřebuje se dozvědět adresu lokálního serveru, který bude řešit jeho dotazy. Její nastavení musí zajistit místní správce, a to buď přímo odpovídajícím konfiguračním zásahem na koncovém stroji, nebo (častěji) prostřednictvím konfiguračního protokolu DHCP.

Nabízí se otázka, proč operační systémy neobsahují plnohodnotné resolvery. Jejich kód i nároky by sice byly o něco větší, rozdíl by však nebyl nijak zásadní a pro současný hardware v podstatě zanedbatelný. Zato bychom získali jednoduchost použití – plnohodnotný resolver je soběstačný a téměř bezúdržbový. Potřebuje jen adresy kořenových serverů, které se prakticky nemění, a případnou změnu by šlo řešit obvyklou cestou systémových aktualizací.

Cloud 24 - tip 1

Tím bychom se ale připravili o hlavní výhodu, společnou vyrovnávací paměť. Jednoduché resolvery strojů v lokální síti posílají své dotazy místnímu rekurzivnímu serveru, který je řeší a výsledky si ukládá do vyrovnávací paměti. Jelikož se všechny lokální stroje obracejí na stejný server, mohou využívat záznamy, které zjistil při řešení dřívějších dotazů jejich sousedů. To podstatným způsobem zvyšuje efektivitu vyrovnávací paměti a snižuje objem síťového provozu odcházejícího mimo lokální síť.

Kromě toho může rekurzivní server něco přidat k datům z veřejného DNS stromu. Jestliže se například v místní síti používají neveřejné adresy, neměly by se objevit ve veřejném DNS. Ovšem interně pro ně chcete používat jména. Často se tato situace řeší tak, že se rekurzivní server nastaví jako autoritativní pro speciální doménu, která obsahuje záznamy s neveřejnými adresami. Tato doména není v doménovém stromě, takže nedostává dotazy zvenčí. Ovšem místní stroje mu posílají všechny své dotazy, takže jim může zasílat odpovědi z této nestandardní domény.

 

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.

Byl pro vás článek přínosný?

Autor článku

Pavel Satrapa působí na Ústavu nových technologií a aplikované informatiky na Technické univerzitě v Liberci, píše knihy a motá se kolem tuzemské akademické sítě CESNET.

Ondřej Filip vystudoval Matematicko-fyzikální fakultu Univerzity Karlovy a působí jako ředitel organizace CZ.NIC. Ve volném čase hraje basketbal, cestuje nebo programuje open-source software.