DNS - Domain Name System je celosvětově distribuovaný systém překladu doménových jmen na IP adresy a zpět. Základními komponentami jsou prostor doménových jmen, nameserver a klient. Z toho vyplývá, že DNS je tvořeno client-server architekturou. Komunikačním kanálem je UDP na portu 53, až pro velké požadavky/odpovědi se používá TCP.
V DNS se klient typicky sestáva z tzv. resolveru. V unixových systémech se tento nachází standardně v knihovně C. Pro jeho správnou funkci je potřeba nastavit minimálně soubor /etc/resolv.conf.
Typická minimální konfigurace:
/etc/resolv.conf: nameserver 85.93.101.5 #ip adresa serveru /etc/nsswitch.conf: hosts: files dnsV souboru nsswitch.conf říkáme knihovně libc, že doménová jména má nejdříve hledat v souboru /etc/hosts a poté systémem DNS. Řádek v souboru resolv.conf ukazuje resolveru, na který nameserver má vznášet dotazy. Dalšími důležitými položkami v resolv.conf jsou např:
Doménové servery mají také stromovou strukturu, jejich strom však nemusí kopírovat strukturu doménových jmen. Na vrcholu stromu sedí tzv. root-servery, jejich seznam můžeme získat na adrese ftp://internic.net/domain/named.root. Tyto servery pak delegují jednotlivé podstromy. Nameservery můžeme rozdělit do několika druhů:
Djbdns je produkt profesora Daniela J. Bernsteina. Mezi jeho hlavní přednosti patři přehlednost kódu, bezpečnost, rychlost a implicitní chrootované prostředí. Tento server narozdíl od refernčního BINDu řeší spousty věcí jinak nebo je z důvodu bezpečnosti neřeší vůbec.
Server djbdns se skládá z několika základních programů:
groupadd dnsuser useradd -g dnsuser -d /dev/null -s /bin/false dnscache useradd -g dnsuser -d /dev/null -s /bin/false tinydns useradd -g dnsuser -d /dev/null -s /bin/false dnslogA dále vytvořit jednotlivá prostředí (místo ip doplníme adresu, na které ma server poslouchat):
dnscache-conf dnscache dnslog /etc/dnscache ipPovolíme přístup z adres 10.0.0.0/16:
touch /etc/dnscache/root/ip/10.0A po provedení následujícího příkazu se deamontools postarají o spoustění serveru:
ln -s /etc/dncache /servicePokračujeme s tinydns:
tinydns-conf tinydns dnslog /etc/tinydns ip ln -s /etc/tinydns /servicePoznámka: nelze spustit tinydns a dnscache na stejné ip adrese.
Veškerá konfigurace tinydns se nachází v adresáři /etc/tinydns/root a to v souboru data. Kromě přímé editace toho souboru máme možnost využít připravených skriptů add-*.
Konfigurační soubor má velice jednoduchou strukturu, co řádek to jeden záznam. Každý řádek začíná znakem označující typ záznamu, dále nasladuje pole oddělené dvojtečkami. Nekteré pole lze nechat prázdné.
Příklad konfigurace domény:
#wasza.com +www.wasza.com:85.93.103.38:3600 Cblog.wasza.com:www.wasza.com:3600 @wasza.com::mail2.activehosting.cz:20:3600 @wasza.com::scythay.activehosting.cz:10:3600 &wasza.com::ns.activehosting.cz:3600 &wasza.com::ns2.activehosting.cz:3600 Zwasza.com:ns.activehosting.cz:hostmaster.wasza.com:1110398400:16384:2048:1048576:2560:86400Popis jednotlivých záznamů:
Jak již jsem zmínil na začátku, djbdns spousty věcí řeší jinak. Jednou z nich je i přenost záznamů. Ve světě BINDu, se k tomutu účelu používá dotaz AXFR, ve světě djbdns se toto většinou řeší pomocí automatizovaného kopírování souboru data přes ssh.
Rád bych vás ještě upozornil na projekt vegadns [7], což je frontend k djbdns ukladající svá data v databázi.