Díky prudkému rozvoji počítačových sítí a vzniku Internetu se do popředí dostal síťový protokol TCP/IP. Pomocí tohoto protokolu se adresují jednotlivé počítače 4-bytovou (32-bitovou) adresou obvykle zapisovanou ve tvaru x.x.x.x (x je číslo 0-255). Takovéto adresy se však špatně pamatují, proto byly zavedeny adresy v tzv. doménovém tvaru. Adresa v doménovém tvaru se zapisuje jako několik slov, oddělených tečkami. Zápis je case-insensitive, kromě znaká může jméno obsahovat i znak '-'. Tomuto zápisu se také občas říká FQDN (= Fully Qualified Domain Name).
V době, kdy počet stanic zapojených do Internetu nebyl příliš velký a mapování jmen na adresy se dalo zaručit jednoduchým nástrojem, používal se soubor hosts.txt, který se distribuoval k jednolivým počítačům přes InterNIC (tzv. centrální registrace jmen počítačů). Pak nastal zlom, kdy už byl soubor velký a nebylo v lidských silách tento systém distribuce dále udržovat. Proto byl vymyšlen DNS.
Domain Name Service je služba pro převod doménových názvů na IP adresy a opačně. Můžeme ji rozdělit na tři logické části:
Jmenné prostory tvoří hiearchickou stromovou strukturu. V kořeni jsou tzv. root-servers, jejichž seznam je zveřejňován na ftp.internic.net. Na nich jsou uloženy informace o nameserverech (registrovaných), na které jsou delegována práva spravovat subdomény .cz .edu .com atd. Stejným postupem se dostáváme až k listům.
Nameservery můžeme rozlišit z hlediska postavení v doméně na primární (informace má uloženy v master souboru), sekundární (informace si periodicky stahuje z primárního nameserveru) a cache-only (přeposílá dotazy a slouží jako cache) pro zónu. Další možné členění je na rekurzivní a iterativní (viz dále).
Resolvery - programy, které získávají informace z nameserverů.
DNS má architekturu klient/server - server odpovídá za svou část adresního prostoru (tzv. zónu), popřípadě může fungovat jako cache. Každá doména vždy musí mít alespoň jeden primární DNS server, a dále může mít několik sekundárních serverů, jež mají za úkol tyhle informace číst z primárního DNS.
Když server obdrží od klienta dotaz, podívá se, co ví o dané doméně, a v případě, že doména nespadá do jeho kompetence, vrátí odkaz na server, který je blíže hledanému dotazu, a klient musí svůj dotaz zopakovat (dokud se nedostane k DNS serveru dané domény). Toto chování se nazývá iterativní. Jinou možností je chování rekurzivní, kdy se DNS server sám ujme zjišťování odpovědi a výsledek si zapamatuje, kdyby se dotaz opakoval (tj. poté funguje jako cache). Tyhle odpovědi jsou, na rozdíl od odpovědí od primárních nebo sekundárních DNS, považovány za neautoritativní.
Další úlohou je převod IP adresy na doménový název, pro kterou slouží doména in-addr.arpa. Jednotlivé sítě jsou poddoménami této domény, IP adresa se v opačném pořadí bajtů napíše před doménu in-addr.arpa a dotaz na tuto adresu vrátí její doménový název. Například zjištění doménového názvu pro adresu 147.251.48.1 je řešeno jako dotaz na adresu 1.48.251.147.in-addr.arpa.
Berkley Internet Name Domain je v současné době nejrozšířenější implementací DNS serveru i DNS resolveru (knihovny na klientské straně poskytující funkce pro řešení dotazů). Ve světě DNS má silné monopolní postavení. Má mnoho funkcí, například podporuje šifrovaný přenos zón i podepisované DNS dotazy, umí posílat notifikaci sekundárním serverům v případě změny primárního, zvládá i IPv6 a převody jmen v tomto adresním prostoru, atd. BIND verze 9 přinesl schopnost takzvaných náhledů (views), kdy server může různým klientům poskytovat jiný náhled na doménu (kupříkladu jinak se chová pro lokální síť a jinak řeší dotazy zvenku).
Daní za všemožné funkce je velikost a přehlednost kódu, a také rychlost odpovídání na dotazy, která jde verzi od verze dolů. Další jeho slabinou je bezpečnost - naštěstí jsou patche k dispozici dosti rychle.
Aktuální release verze je 9.2.2P3.
Stále se hojně využívá BIND verze 8, jeho poslední verze je 8.4.1.
Domovská stránka BIND je na http://www.isc.org/products/BIND.
djbdns je produkt profesora D. J. Bernsteina. djbdns má po svém autorovi zvláštní filozofii - jeho programy (mezi jinými qmail, ezmlm nebo ucspi-tcp, superserver démon) mají přehledné zdrojové kódy a čistou architekturu, úloha je vždy důsledně rozdělena na procesy řešící každý svou část. Programy jsou psány se silným ohledem na bezpečnost.
djbdns sestává z několika programů:
Balík djbdns čelí problémům s kompatibilitou, mnoho věcí neimplementuje nebo z bezpečnostních důvodů řeší jinak. Ovšem dá se říci, že co umí, umí dobře.
Aktuální verze je 1.05.
Projekt má svou homepage na adrese http://cr.yp.to/djbdns.html.
Projekt NSD vznikl v Nizozemí na popud RIPE, evropského registrátora IP adres. Důvodem byl strach z monopolního postavení BINDu. Je určen pro nasazení hlavně jako primární DNS server - z tohoto důvodu NSD vůbec neobsahuje cache a neumí rekurentní zjišťování odpovědí. Výhodou tohoto modelu je především jeho rychlost.
To ho předurčuje k nasazení v extrémně tuhých podmínkách, ovšem v poslední době autoři pracují i na zónových transferech, což umožní jeho nasazení i v roli sekundárního DNS.
Architektura NSD je jednoduchá. Program pozůstává ze dvou částí - démona poslouchajícího na portu a programu, který načte databázi s doménami a realizuje vlastní mapování dotazů.
NSD zvládá zodpovídat dotazy až do zátěže kolem 30 tisíc dotazů za sekundu, BIND 8 pouze 7 tisíc a BIND 9 končí dokonce při 3 tisicech.
Aktuální verze NSD je 1.3.0.
Další informace o projektu NSD můžeme nalézt na stránkách NLnet Labs - http://www.nlnetlabs.nl.
Druhou částí DNS systému jsou klientské aplikace. Hlavním požadavkem je nástroj pro zjišťování IP adresy k danému názvu a opačně. Tohle má na starosti tzv. resolver - knihovna, která dle pořadí uvedeného v /etc/host.conf (pro Linux, pro Solaris je to například soubor nisswitch.conf) se buďto podívá do statického souboru /etc/hosts, anebo se zeptá nameserveru uvedeného v /etc/resolv.conf. V /etc/resolv.conf může být dále uvedeno, jaké domény se mají prohlédnout, chybí-li v dotazu doménová část jména počítače. Knihovna resolveru obsahuje především funkce gethostbyname(3) a gethostbyaddr(3).
Dalšími klienskými programy jsou nástroje pro testování a zjišťování stavu DNS serverů. Součástí BIND balíku je dig(1), dále starší nslookup(3), který je však vytlačen mnohem schopnějším programem host(3). djbdns má vlastní sadu nástrojů, například dnsip pro převod jména na adresu.
Program se šíří jak ve tvaru balíčků pro nejrozšířenější distribuce, tak ve formě zdrojových kódů. K překompilování a nainstalování slouží standardní trojice příkazů - ./configure; make; make install
Chroot - znamená, že určitý běžící program má za svůj kořenový adresář / například adresář /named. BIND se instaluje do chrootovaného prostředí, podobně jako ftp-server, z bezpečnostních důvodů. Pokud nám nějaký dobrák prolomí nějakou bezpečnostní díru v BINDu, dostane se jen do určeného podstromu adresářů. Dále budu předpokládat instalaci do adresáře /named.
Protože provozovat named pod rootem není moc chytré z bezpečnostních důvodů, přidáme uživatele named se speciální skupinou named. Taky mu nedáme shell, protože se nikdy nebude logovat (resp. mu dáme shell např. /bin/false). V souboru se startovacím skriptem (v RedHatu /etc/rc.d/init.d/syslog) zaměníme řádku za Syslog restartujeme. Tímto máme připraveno chrootované prostředí pro BIND, do kterého jej můžeme nainstalovat. Více o tomto způsobu instalace se můžeme dovědět na http://www.tldp.org/HOWTO/Chroot-BIND-HOWTO-2.html. Hlavní konfigurační soubor BINDu (named démona) se nachází v souboru /etc/named.conf (v chrootovaném prostředí to může být jinde - dále budeme předpokládat, že BIND máme nainstalován bez chrootu). Tento soubor říká, jakého typu server bude a které domény bude obhospodařovat. V sekci options jsou uvedeny globální volby - ve kterém adresáři jsou informace o zóně (každá zóna má jeden soubor), kterým serverům má na dotazy odpovídat a kterým nikoliv, zda se chovat rekurzivně nebo ne, atd. Konfigurace může vypadat například takhle: Dále pro každou zónu, o kterou se bude named starat, je nutno vytvořit příslušnou zone sekci, ve které řekněme vztah našeho servere k této zóně (tzn. jestli ji děláme primární nebo sekundární server) a ze kterého souboru se má načíst soubor se zónou. Například: Reverzní záznamy pro podsíť IP adres vypadají následovně: Pozn.: Podrobný přehled příkazů najdeme na příslušné manové stránce (man named.conf). A jak vlastně vypadají ony soubory se zónama, které můžeme nalézt v adresáři /named/var/named? Tyto soubory definují jednotlivé DNS záznamy vždy řádek po řádku v následujícím tvaru: <doména> musí začínat v prvním sloupci souboru a označuje jméno doménového záznamu. Pokud je prázdná, vezme se z předchozího řádku. <platnost> udává, jak dlouho si server tuhle informací smí držet v cache. <třída> je IN, říkající že záznam se týká Internetu. Touto volbou umožnili autoři použít DNS i mimo oblast převodu jmen na IP adresy. Povinné položky <typ> a <data> popisují vlastní záznam; jako typ lze uvést:
Pozn.: Je dobré si uvědomit, že síť IP adres nemá vůbec nic společného s hierarchií doménových jmen. Můžeme mít počítač, který má cizí IP adresu a spadá do naší domény (geograficky odlehlé pracoviště, jiný ISP provider, ..), ale i opačně... Příklad, jak může vypadat takový soubor se zónou: Reverzní záznam pro podsíť 12.34.56.0 by vypadal následovně: Pozn.: Jak vidíme, komentáře se v souborech se zónami píšou za znak ';'. Dále je důležité, zda za doménovým jménem napíšeme znak '.' či nikoliv. Pokud ji vynecháme, přidá se za námi napsaný řetězec ještě doména (viz příklad výše). V reverzních záznamech však toto uplatnit nelze - přidávala by se nám doména 56.34.12.in-addr.arpa, což nechceme. dig (Domain Information Groper) - provádí dns dotazy buď na servery z /etc/resolv.conf nebo na konkrétní dig @server jmeno. host - jednoduchá utilitka pro DNS dotazy nslookup BIND - http://isc.org/products/BINDPříprava adresáře
Dále je potřeba dodělat chrootovane prostředí:
named
+-- dev
+-- etc
| +-- namedb
| +-- slave
+-- var
+-- run
Konfigurace BIND
options {
directory "/var/named"; // adresar se zonama
// POZOR, diky chrootu se jedna o /named/var/named !
forwarders { 10.0.0.1; } // pokud nevis, ptej se stroje s IP 10.0.0.1
check-names master fail; // urcuje, jak se ma chovat v pripade chyby
check-names slave warn;
forward-only;
allow-query { any; } // povolit dotazy odkudkoliv
allow-transfer { none; } // zakazat zonove prenosy
};
zone "lab.fi.muni.cz" {
type master; // primarni server
file "lab.fi.muni.cz" // konfigurace v /var/named/lab.fi.muni.cz
}
zone "0.0.10.in-addr.arpa" { // vlastne delame primarni server
type master; // pro 'fiktivni' domenu 0.0.10.in-addr
file "10.0.0"
}
<domena> <platnost> <trida> <typ> <data>
$ORIGIN domena.cz.
@ IN SOA @ root.domena.cz. (2002101000 3H 15M 2W 1D)
IN NS ns ; autoritativni name servery
IN NS ns.provider.cz.
IN MX 0 mailserver.domena.cz.
www IN A 12.34.56.78 ; info. o pocitacich
ftp IN A 12.34.56.79 ; v teto domene
news IN CNAME odyseus.domena.cz.
...
$ORIGIN 56.34.12.in-addr.arpa.
@ IN SOA @ root.domena.cz. (2002101000 3H 15M 2W 1D)
IN NS ns.domena.cz.
IN NS ns.provider.cz.
78 IN PTR www.domena.cz.
79 IN PTR ftp.domena.cz.
...
Ladící nástroje
Reverzní dotaz: dig @server -x 147.251.48.1
host jmeno [server]
reverzní dotaz: host ip [server]
Odkazy, užitečná literatura
djbdns - http://cr.yp.to/djbdns.html
nsd - http://www.nlnetlabs.nl
Life With DJB DNS - http://www.lifewithdjbdns.com
http://www.tldp.org/HOWTO/Chroot-BIND-HOWTO-2.html
About the DNS - http://www.dns.net/dnsrd
DNS HOWTO - http://www.tldp.org/HOWTO/DNS-HOWTO.html
DNS - http://linux.mikroservis.cz/dns.html
DNSSEC (Bezpečné DNS) - http://www.lupa.cz/clanek.php3?show=2845
Počítačová encyklopedie (DNS) - http://www.earchiv.cz/a98/a816k180.php3
DNS - smysl doménového systému a základní principy fungování - http://home.eunet.cz/rysanek/dns/dns.html
Computer Press - http://www.cpress.cz/knihy/tcp-ip-bezp/CD-1x/11.html
Internic - http://www.internic.net
http://www.iana.org/assignments/dns-parameters
RFC1033, RFC1034, RFC1035 na ftp.fi.muni.cz