DNS

Nový Lukáš, krtek.net@mail.muni.cz


Obsah


Úvod a principy

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.


Prostor doménových jmen


Klient

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 dns
V 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ř:


Nameserver

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ů:

Co se týče konkrétních serverů, mezi nejrozšířenější patří BIND a djbdns.


DJBDNS

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.

Instalace

Server djbdns se skládá z několika základních programů:

Zdrojové kódy můžeme stáhnout http://cr.yp.to/djbdns.html nebo můžeme využít prostředků své distribuce... Pro příjemný běh serveru budeme potřebovat ještě deamontools, které seženeme na stejném serveru. Po instalaci je potřeba vytvořit uživatele pro servery:
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 dnslog
A dále vytvořit jednotlivá prostředí (místo ip doplníme adresu, na které ma server poslouchat):
dnscache-conf dnscache dnslog /etc/dnscache ip
Povolíme přístup z adres 10.0.0.0/16:
touch /etc/dnscache/root/ip/10.0
A po provedení následujícího příkazu se deamontools postarají o spoustění serveru:
ln -s /etc/dncache /service
Pokračujeme s tinydns:
tinydns-conf tinydns dnslog /etc/tinydns ip
ln -s /etc/tinydns /service
Poznámka: nelze spustit tinydns a dnscache na stejné ip adrese.

Konfigurace

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:86400
Popis jednotlivých záznamů:
Pro další informace viz. [2].

Po každé úpravě je potřeba zavolát make, aby se změny projevily, restartovat server není potřeba.


Dodatky

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.


Odkazy