DNS

Vladimír Schreiner, xschrein@fi.muni.cz


Obsah


DNS

Motivace

V IP sítích se používá adresování uzlů pomocí číselných identifikátorů - adres. Tato koncepce přirozeně nevyhovuje člověku, který rád využívá jistou mnemotechniku. Proto je myšlenka překladu názvů na jména téměř stejně stará jako IP sítě sami.

Prvotní koncepce vycházela ze souborů se záznamy adresa-název, který dodnes přežívá ve formě /etc/hosts. Systém je vhodný pro malé a téměř neměnné sítě. Částečné řešení přináší NIS (Sun Yellow pages) - systém vzájemné distribuce souborů /etc/hosts po síti. Tím se sice odstraní možné nekonzistence, není ovšem řešen problém možné velikosti těchto souborů - hledání mezi mnoha milióny záznamů není příliš rychlé.

Princip DNS

Systém DNS vychází z konceptu namapování počítačů do hierarchické (stromové) struktury. Ta je zavedena především proto, aby nemusel každý DNS server evidovat záznamy všech ostatních. DNS zavádí systém domén a jejich vzájemné delegace - kořenem DNS stromu je doména ., ta deleguje tzv Top Level Domains (např. .cz, .com, .net), ty tedy tvoří další patro stromu. Delegovat tedy znamená učinit nameserver autoritativním, dát mu právo spravovat příslušnou doménu. V praxi tedy všechny dotazy v doméně ., které se týkají její poddomény .cz budu nameserverm domény . přeposlány na autoritativní nameserver domény .cz. . Mezi autoritativními nameservery dané domény (např. .cz) je vždy server primární (ten přímo definuje danou doménu) a několik serverů sekundárních (drží kopie informací primárního a periodicky si je obnovují).

Poznámka: seznam nameserverů pro doménu . je k dispozici (ve formě zónového souboru pro BIND) na ftp://internic.net/domain/named.root

Vyhledáváni

Resolvery bývají často poměrně přímočaré - dovedou se pouze zeptat tam, kde mají a v případě neúspěchu oznámit chybu. Intelignece tedy zůstává na straně DNS serverů, od nich můžeme očekávat v zásadě dvojí chvání:

Typu DNS serverů

Krátké shrnutí typů nameserverů:

Reverzní mapování

Poměrně přirozeným požadavkem je potřeba překládat IP adresy zpět na příslušná doménová jména. Tento problém se v DNS systému řeší zavedením pseudo-domény IN-ADDR.ARPA. Do této domény se umísťují IP adresy v reverzním tvaru - to proto, že DNS je little-endian systém, zatímco IP adresy big-endian. Sluší se tedy vždy při konfigfuraci nějaké zóny (domény) přidat i nastavení pro reverzní záznam.


Resolver

Reslover je společný název pro sadu machanismů, kterými klientí přistupují k systému DNS. Jeho chování se typicky konfiguruje soubory /etc/resolv.conf a /etc/host.conf. Nejedná se o službu ve smyslu běžícího deamona, či nějakého serveru, ale o sadu knihovních funkcí, kterou příslušné aplikace využívají.

/etc/resolv.conf slouží k nastavnení IP adres DNS serverů, kterých se má resovler ptát. Dále definuje místní doménu, příp. seznam dalších domén, ve kterých vyhledávat. Soubor může být prázdný - v takovém případě se předpokládá běžící DNS server na localhostu. Více informací man resolver.

/etc/host.conf specifikuje především v jakém pořadí oslovovat jednotlivé zdroje (tedy místní soubor /etc/hosts, DNS server nebo NIS). Více man host.conf.


BIND

Berkley Internet Name Deamon je referenční implementací DNS. Je možné si jej stáhnout z linků odkazovaných z domovské stránky http://www.isc.org/products/BIND, je ovšem obsažen ve většině obvyklých Linuxových distribucí. Aktuální verze je 9.2.6, stále se používá i předchozí verze 8 (aktuálně 8.4.7).

Instalace a konfigurace

Po stažení zdrojové distribuce se aplikace připraví obligátní trojicí příkazů ./configure, make a make install.

Konfiguračním souborem BINDu je /etc/named.conf. Nastavuje obecné chování serveru a definuje zóny o kterých má server co říct.

options {
	directory "/var/named";

	forwarders {
		195.128.203.2;195.128.203.3;
	};
	forward only;
};

// korenove nameservery
zone "." IN {
	type hint;
	file "named.root";
};

// zona localhost
zone "localhost" IN {
	type master;
	file "master/localhost.zone";
	allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
	type master;
	file "master/127.0.0.zone";
	allow-update { none; };
};

// zona bytnet
zone "bytnet.ty.acvyskov.cz" IN {
	type master;
	file "master/bytnet.ty.acvyskov.cz.zone";
	allow-update { none; };
	allow-transfer { any; };
};

zone "2.168.192.in-addr.arpa" IN {
	type master;
	file "master/2.168.192.zone";
	allow-update { none; };
	allow-transfer { any; };
}

// sekundarni pro ty.acvyskov.cz
zone "ty.acvyskov.cz" IN {
	type slave;
	file "slave/ty.acvyskov.cz.zone";
	masters { 192.168.3.1; };
	allow-transfer { any; };
};

Konfigurační soubor zóny obsahje záznamy nazývané Resource Records, obecný formát:
name ttl class rr parameter opět příklad:

$TTL 1D

@       IN  SOA ns.bytnet.ty.acvyskov.cz. root.ns.bytnet.ty.acvyskov.cz. (
            20060304 ; Serial
            3H       ; Refresh
            15M      ; Retry
            2W       ; Expire
            1D   )   ; MINIMUM TTL

        IN  NS  ns
        IN  MX  10 ns

; mia je alias pro ns
mia     IN  CNAME   ns

ns      IN  A   192.168.2.111
hydra   IN  A   192.168.2.110

Chrootovaný BIND

Spouštění BINDu v chrootovaném prostředí se jeví jako žádoucí bezpečnostní zásah - pokud se nějakému útočníkovi podaří napadnout DNS, chrootované prostředí mu výrazně sváže ruce.
Následujcící mini-HOWTO je stručným výtahem výborného
Chroot BIND HOWTO

  1. vytvoření nového uživatele pro proces nameserveru, např named a skupiny named
  2. vytvoření kořenového adresáře klece /chroot/named a jeho podadresářů etc/, dev/ a var/run/, případně dalších (záleží na parametrech ./configure)
  3. instalace BINDu do klece
  4. vytvoření speciálních souborů /dev/null, /dev/random:
    mknod /chroot/named/dev/null c 1 3
    mknod /chroot/named/dev/random c 1 8
    chmod 666 /chroot/named/dev/{null,random}
  5. nastavení logování - ideálně spustit syslog s parametrem -a /chroot/named/dev/log, zajistí vytvoření nového socketu pro syslog
  6. spuštění: daemon /usr/local/sbin/named -u named -t /chroot/named -c /etc/named.conf (-u uživatel, -t klec, -c konfiguračníSoubor

Další DNS servery

Alternativou k BINDu může být djbdns od D. J. Bernsteina (mimo jiné autora qmailu). Tento svérázný produkt nepracuje jako monolitický server, namísto toho je rozdělen do více modulů (tinydns, dnscache, axfrdns).


Tipy


Zdroje informací