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.
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.
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:
Type | Anglický význam | Význam poľa RDATA |
A | IPv4 address | 32 bitová IP adresa |
NS | Authotitavive name server | Doménové meno name serveru, kt. je pre danú doménu autoritou |
CNAME | Canonical name for an alias | Doménové meno, kt. je synonymom k NAME |
SOA | Start of authority | Práve jedna veta typu SOA uvádza jednu zónu |
PTR | Domain name pointer | Doménové meno. Tento typ vety sa používa pri reverznom resolvovaní |
HINFO | Host information | Popis HW a SW, ktorý sa používa na počítači NAME |
MX | Mail exchange | Doménové meno a preferencia poštového serveru |
TXT | Text string | Popis |
AAAA | IPv6 address | 128 bitová IP adresa |
SIG | Security signature | Podpis používaný v Secure DNS |
KEY | Security key | Verejný kľúč zóny používaný pre podpisovanie pri autentizácii |
NXT | Next domain | Ďalšie doménové meno |
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.
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:
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.
$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.1Sú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.