DNS - Domain Name System

Milan Zázrivec, xzazriv@informatics.muni.cz


Obsah


Čo je to DNS

Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Aplikácie zaisťujúce komunikáciu medzi počítačmi nad internetovými protokolmi TCP/IP používajú na identifikáciu komunikujúcich uzlov IP adresu. Táto je však pre človeka ťažko zapamätateľná, preto sa pre identifikáciu komunikujúcich strán používa doménové meno.

Väzba medzi menom počítača a jeho IP adresou je definovaná v databázi DNS (Domain Name Service). V širšom poňatí je možné DNS chápať ako distribuovanú databázu doménových mien, v užšom ponímaní je možné DNS chápať ako aplikačný protokol, prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.


Princíp DNS

Zjednodušený model fungovania DNS je možné formalizovať nasledovne:
1. chcem sa prihlásiť cez secure shell na stroj aisa.fi.muni.cz: ssh aisa.fi.muni.cz
2. ešte predtým než sa ssh klient pripojí na vzdialený systém, preloží sa doménové meno aisa.fi.muni.cz na IP adresu 147.251.48.1
3. ssh klient sa pripojí na spomínanú IP adresu.

Celý Internet resp. systém doménových mien je rozdelený do tzv. domén, ktoré patria logicky k sebe. Doména je tvorená skupinou počítačov (resp. ich mien), ktoré majú spoločnú pravú časť svojho doménoveho mena (napríklad doména cz). Každé z doménových mien týchto počítačov v rámci jednej domény môže byť však spravované na rôznych name serveroch. Dáta o doméne uložené na name serveri sú nazývané zóna. Zóna teda predstavuje len časť domény, je to teda časť priestoru mien, ktorú obhospodaruje jeden name server.

Rovnako tak je dôležité zdôrazniť, že rozdelenie siete na autonómne systémy nesúvisí s rozdelením na domény, resp. zóny. Autonómne systémy sú v Internete delené z hľadiska IP adries a smerovania medzi sieťami, naproti tomu sú domény v Internete delené z hľadiska mien počítačov. Situácia je iná len v prípade reverzných domén, ktoré kopírujú štruktúru siete Internetových poskytovateľov.

Najvyššou inštanciou v systéme DNS je tzv. root doména vyjadrená bodkou úplne napravo. V tejto sú definované generické domény com, org, edu, net, a ďalej aj dvojznakové domény jednotlivých štátov, ktoré definuje príslušná norma ISO.

Doménové meno je tvorené reťazcami oddelenými bodkou. Celé meno môže mať maximálne 255 znakov, jednotlivý reťazec 63 znakov. Reťazec smie pozostávať z písmen, číslic a pomlčky, ktorá však nemôže byť ani na začiatku ani na konci reťazca. Existujú rozšírenia špecifikujúce aj daľšie znaky, no vzhľadom na neúplnú aplikačnú podporu je doporučované tieto rozšírenia nepoužívať.

Služba doménových mien je založená na architektúre klient/server, t.j. celá komunikácia na úrovni aplikačného protokolu pozostáva z komuniácie medzi klientom (obvykle resolver, resp. aplikácia využívajúca služby resolveru) a serverom (označovaným ako name server), resp. medzi servermi.

Podľa uloženia dát rozlišujeme nasledovné typy name serverov:
1. Primárny name server - udržuje dáta o svojej zóne vo svojej databáze, pričom editovať túto databázu (t.j. pridávať, rušiť tieto záznamy) má zmysel len na primárnom name serveri.
2. Sekundárny name server - v pravidelných časových intervaloch kopíruje obsah databáz z primárneho name servera.
Primárny a sekundárny server sa nazývajú autoritou pre svoje domény, čo znamená, že ich dáta pre príslušnú zónu sú nezvratné (autoritatívne).
3. Caching only server - nie je pre žiadnu doménu ani primárnym ani sekundárnym serverom (nie je autoritou). Jeho úlohou je ukladať vo svojej pamäti dáta, ktoré ním prechádzajú. Pokiaľ teda obdržíme odpoveď na náš dotaz od caching only servera, hovoríme o neautoritatívnych dátach.
4. Root name server - name server obsluhujúci root doménu.

Špecifickým prípad name serverov sú tzv. forwarding a slave servery.
Forwarding server je server prijímajúci požiadavky na preklad od klienta na linke s nízkou priepustnosťou, pričom tieto požiadavky pošle ďalej tzv. forwarderovi, čo je vlastne name server s dobrou konektivitou na Internet. Forwarder sa snaží vyriešiť dané požiadavky a odpoveď s resolvovaným dotazom pošle nazad forwarding serveru. Forwarding server zatiaľ čaká na odpoveď od forwardera. Pokiaľ odpoveď nepríde, pokúsi sa sám navzdory horšej konektivite vyriešiť dotaz sám. Pokiaľ nie je žiadúce, aby forwarding server v takomto prípade resolvoval dotaz, je nutné tento forwarding server naviac konfigurovať ako slave server.

Fundamentálnou úlohou služby doménových mien je prevod doménoveho mena na IP adresu. V prvej fáze tohto procesu kontaktuje DNS klient (resolver) určený name server. Ďalej môže proces pokračovať buď iteratívne, resp. rekurzívne.
Pri rekurzívnom vyhľadávaní kontaktovaný name server v prípade že pozná opoveď na dotaz, tak ju pošle späť klientovi, ak nie, tak tento name server sa dotazuje v hierarchii DNS ďalších serverov. To znamená, že klient komunikuje len s jedným serverom, ktorý mu nakoniec pošle aj odpoveď.
Pri iteratívnom vyhľadávaní klient kontaktuje name server, ktorý ak vie, tak odpovie, ak nie, tak vráti klientovi kontakt na name server, ktorý je v hierarchii domén bližšie k hľadanému dotazu. To znamená, že pri iteratívnom vyhľadávaní klient komunikuje s viacerými servermi, ktorý ho len odkazujú na ďalšie name servery.

Ďalšou úlohou služby doménových mien je tzv. reverzný preklad. Ide pri ňom o preklad IP adresy na doménové meno. Pre účely reverzného prekladu bola vytvorená pseudo-doména in-addr.arpa, čo je zkratka pre Inverse addresses in the Arpanet. Subdoménami tejto domény sú jednotlivé bajty hľadanej IP adresy, t.j. jednotlivé siete sú poddoménami tejto domény. Pritom sa ale čísla IP adresy píšu v opačnom poradí bajtov. Dotaz na prevod IP adresy 195.146.128.60 je riešený ako dotaz na doménu 60.128.146.195.in-addr.arpa.


Popis aplikačného protokolu a rozšírenia DNS

Protokol DNS pracuje jednoduchým spôsobom: dotaz - odpoveď. To znamená, že klient pošle serveru dotaz a server na dotaz odpovie. Služba doménových mien sa pri svojom fungovaní opiera o služby transportných protokolov. DNS používa ako TCP, tak protokol UDP, pričom dotaz aj odpoveď sú prenášané vždy rovnakým transportným protokolom. Pri dotaze na preklad mena na adresu sa používa protokol UDP. Ak je odpoveď väčšia ako 512B, tak sa do odpovede vloží len časť odpovede, pričom v záhlaví sa nastaví príznak TC (truncate). Akonáhle klient obdrží túto odpoveď, môže svoj dotaz zopakovať prostredníctvom protokolu TCP. Pri zónových transferoch (napr. medzi primárnym a sekundárnym name serverom) sa používa protokol TCP.

Protokol DNS používa niekoľko operácií. Štandardnou operáciou je DNS QUERY, čo je vlastne získanie tzv. Resource Recordu. Resource Record je zdrojová veta, v ktorej sú uložené informácie o doménových menách a zodpovedajúcich IP adresách. Tieto zdrojové vety sú uložené v pamäti name serveru. To znamená, že príkazom DNS Query klient žiada od serveru zdrojovú vetu podľa zadaných požiadaviek. Zdrojové vety majú pritom uniformnú štruktúru. Najdôležitejšími položkami sú:
NAME - doménové meno.
TYPE - typ vety.
RDATA - smotné dáta. Obsah poľa RDATA pritom závisí na položke TYPE.

Položka TYPE môže byť jedno z nasledujúcich:

TypeAnglický význam Význam poľa RDATA
AIPv4 address 32 bitová IP adresa
NSAuthotitavive name server Doménové meno name serveru, kt. je pre danú doménu autoritou
CNAMECanonical name for an alias Doménové meno, kt. je synonymom k NAME
SOAStart of authority Práve jedna veta typu SOA uvádza jednu zónu
PTRDomain name pointer Doménové meno. Tento typ vety sa používa pri reverznom resolvovaní
HINFOHost information Popis HW a SW, ktorý sa používa na počítači NAME
MXMail exchange Doménové meno a preferencia poštového serveru
TXTText string Popis
AAAAIPv6 address 128 bitová IP adresa
SIGSecurity signature Podpis používaný v Secure DNS
KEYSecurity key Verejný kľúč zóny používaný pre podpisovanie pri autentizácii
NXTNext domain Ďalšie doménové meno


DNS používa rovnaký formát paketu pre dotaz aj pre odpoveď. DNS paket pozostáva z dvoch, resp. piatich sekcií:
HEADER Záhlavie paketu. Obsahuje identifikátor správy, ktorý generuje klient a server ju skopíruje do odpovede.
QUESTION Sekcia dotaz je obsiahnutá ako v pakete dotazu, tak aj v pakete odpovede na dotaz. Obsahuje pole doménové meno, typ dotazu (viď vyššie) a triedu dotazu
ANSWER Sekcia odpoveď - obsahuje odpoveď na dotaz. Túto sekciu obsahuje len paket s odpoveďou.
AUTHORITY Sekcia autoritatívne name servery obsahuje mená name serverov uvedených v zdrojových vetách typu NS. Túto sekciu obsahuje len paket s odpoveďou.
ADDITIONAL Sekcia doplnkové informácie obsahuje obvykle IP adresy autoritatívnych name serverov. Túto sekciu obsahuje len paket s odpoveďou.

Protokol DNS nám okrem štanderdných funkcií poskytuje aj rozšírenia, medzi inými DNS Update, DNS Notify, Inkrementálny zónový transfer, Negative caching (DNS NCACHE) a Veta typu SRV.

Rozšírenie DNS Update špecifikuje RFC 2136. Toto rozšírenie umožňuje dynamicky opravovať záznamy v DNS databázi. Umožňuje pridať jednu alebo niekoľko viet do zónového súboru, prípadne jednu alebo viac viet z tohto súboru odstrániť bez toho, aby ich musel staticky meniť správca name serveru. Úprava databáze v zmysle tohto rozšírenia je vykonávaná na diaľku príslušným klientom. Toto rozšírenie je podporované napríklad v DNS serveri BIND od verzie 8.

Rozšírenie DNS Notify špecifikuje RFC 1996. Tento mechanizmus umožňuje informovať slave servery o zmene v zóne. Komunikáciu iniciuje master server správou smerom k slave serverom, v ktorých ich vyzýva k zónovému transferu.

Inkrementálny zónový transfer špecifikuje RFC 1995. Toto rozšírenie umožňuje prenášať pri zmene dát v zóne z master servera na slave server výlučne zmenené dáta, t.j. len časť zóny. Štandardne sa pri zmenách prenáša obsah celej zóny.

Negatívny caching (DNS NCACHE) je špecifikovaný normou RFC 1034 a RFC 2308. Pod pojmom negatívny caching sa skrýva mechanizmus udržiavania informácií v pamäti serveru o tom, že neexistuje v DNS požadovaný Resource Record. Štandardne sa totiž ako neautoritatívne data udržiavajú len kladne vybavené žiadosti. Problémom tohto rozšírenia je však fakt, že nie všetky dnes používané resolvery generujú rovnaké negatívne odpovede na rovnaký dotaz.

Rozšírenie DNS o vety typu SRV zavádza RFC 2782. Úlohou vety typu SRV v zdrojových vetách je v databázi DNS udržiavať okrem mien počítačov aj mená služieb, ktoré sa k danému doménovému menu viažu.


Implementácia

O funknčnosť služby doménových mien na strane klienta sa stará resolver. Resolver je sada funkcií (gethostbyname(3), gethostbyaddr(3), atd.), ktoré využívajú pri resolvovaní samotné užívateľské aplikácie. Fungovanie resolvera je možné nastaviť v súboroch /etc/host.conf, /etc/resolv.conf, /etc/hosts.

Najrozšírenejšou implementáciou DNS serveru je BIND - skratka pre Berkeley Internet Name Daemon. DNS server BIND vo svojej súčasnej verzii podporuje okrem štandardných funkcií aj rozšírenia protokolu vrátane:

Okrem týchto rozšírení dokáže BIND protokolovať správy, zavádza kontrolu prístupu práv (Access Control List) a samozrejme podporuje aj IPv6.

Programový balík BIND je možné nainštalovať trojicou príkazov ./configure && make && make install, resp. nainštalovať BIND priamo ako predkompilovaný balíček pre našu distribúciu.
BIND je možné prevádzkovať buďto štandardne, alebo ho s ohľadom na celkovú bezpečnosť systému spúšťať v chrootnutom prostredí (napríklad v adresári /var/named).

Ako základný konfiguračný súbor používa BIND súbor /etc/named.conf. Základné príkazy tohto konfiguračného súboru sú:
acl Definuje zoznam IP adries, ktorý sa používa k riadeniu prístupu
include vkladá súbor
key Definuje informácie používané pri autentizácii a autorizácii
logging Definuje udalosti, ktoré sa budú protokolovať a kam sa budú ukladať
options Definuje celkovú konfiguráciu serveru
server Nastavuje niektoré vlastnoti pre vzdialené servery
zone Definuje zónu

Základnou sekciou v súbore /etc/named.conf je sekcia options:

options {
	directory	"/var/named";	// pracovný adresár serveru
	forwarders	195.146.128.60;	// IP adresa nášho forwardera
	auth-nxdomain	yes;		// v odpovedi NXDOMAIN bude vždy
					// nastavebý bit AA i keď server
					// nie je autoritou
	allow-query	{any;}		// špecifikuje kto môže nášmu
					// serveru položiť dotaz
	allow-transfer	{none;}		// zakazuje (povoľuje)
					// zónový transfer
	
}

Ďalšou sekciou v konfiguračnom súbore je sekcia zone. Príklad sekcie:

zone "localhost" {
        type master;			// typ zóny
        file "db.local";		// súbor s konfiguráciou zóny
};

zone "127.in-addr.arpa" {
        type master;			// typ zóny
        file "db.127";			// súbor s konfiguráciou zóny
};

zone "0.in-addr.arpa" {
        type master;			// typ zóny
        file "db.0";			// súbor s konfiguráciou zóny
};
Za kľúčovým slovom zone nasleduje názov domény, prípadne sa za ňu môže doplniť ešte trieda - povolené hodnoty sú: in, hs,hesiod,chaos. Implicitne sa použije trieda in. Pre parameter type sú povolené hodnoty: master, slave, stub, hint.

Všeobecná syntax zdrojových viet - jednotlivých riadkov v súboroch s definíciami zón je: [name] [TTL] [trieda] typ data . Povinné sú pritom len položky typ a data.

Súbor db.local:
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
Súbor db.127
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
1.0.0   IN      PTR     localhost.
Súbor db.0:
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
1.0.0   IN      PTR     localhost.

Odkazy