Systém DNS (Domain Name System)

Vladimír Dvořák, xdvdorak3@fi.muni.cz


Obsah


Resolver

Resolver = knihovna resolveru ve standardní knihovně C. Centrální funkce jsou gethostbyname(2), gethostbyaddr(2) . Konfiguruje se v /etc/host.conf ve kterém lze nastavit které služby a v jakém pořadí má resolver používat ( order bind, hosts). Jinými slovy resolvery jsou klienti DNS. V /etc/host.conf lze zapnout i obranu proti útoku typu spoofing (DNS se snaží podstrkovat falešné IP - obrana: ověření IP reverzním hledáním) - spoofing on ( alert on loguje pokusy do syslogu ) atd. viz man host.conf . Resolver lze ovlivňovat i nastavením určitých proměnných prostředí. Resolver lze konfigurovat i pomocí novějšího a obecnějšího /etc/nsswitch.conf , kde každý řádek popisuje jednu službu. např:

 
hosts:         dns [!UNAVAIL=return] files 
networks:      files
První položka řekne prohledávanou databázi, další parametry odkud a jak se data berou. (files= /etc/hosts, /etc/networks). V hranatých závorkách mezi je [ [!] status = akce ] , pomocí nichž zle reagovat na různé stavy. podrobně viz man nsswitch.conf . Řekneme-li resolveru ať používá dns musíme také říct kde jej najde to uděláme v /etc/resolve.conf (volba nameserver ). Pokud tento soubor neexistuje předpokládá se že jmenný server je přímo na stroji.


DNS

Celosvětově distribuovaná databáze se záznamy: "IP:doménové jméno". Organizuje počítače do hierarchie domén. Na vrcholu stromu je kořenová doména (označujeme tečkou) -- FQDN píšeme s tečkou na konci. DNS funguje tak, že vždy zná odpověď nebo ví koho se zeptat. (rekurzivní/iterativní chování -ptá se dál sám nebo vrátí koho se zeptat.) Některé servery jsou autoritativní - uchovávají všechny info o hostitelích dané zóny. Obvykle je jich k jedné zóně více . Jeden je primární (načítá info z dat. souborů) ostatní jsou sekundární synchronizují se podle primárního. Smysl má i caching-only servery. Aplikační protokol DNS užívá k transportu dat UDP a TCP

DNS je specifikováno v RCF 1033-1035. V Linuxu máme několik implementací DNS nejznámější jsou Bind, DJBDNS. Bind je referenční implementace. Konfiguruje se v /etc/named.conf V souboru se pak odkazujeme na databázové soubory systému DNS ve kterých se nachází samotné DNS záznamy. Příklad named.conf (převzato z předchozí. referátu):

options {
	directory "/var/named";
\\query-source se může hodin kvůli firewallu. Dřív se DNS ptalo na portu 53 
\\od verze bind 8.1 ne. 
	query-source address * port 53;    
  forwarders { 
	62.77.124.149; 
  };
};
controls {
	inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN {                        # 13 kořenových serverů
	type hint;
	file "named.ca";
};
zone "localhost" IN {                #dopredna zóna pro localhost
	type master;
	file "localhost.zone";
	allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {     #reverzní zóna pro localhost
	type master;
	file "named.local";
	allow-update { none; };
};
zone "huwlan.cz" IN {                #dopředná zóna pro huwlan.cz
        type master;
        file "huwlan.cz.zone";
        allow-update { none; };
};
zone "236.209.62.in-addr.arpa" IN {  #reverzní zóna pro huwlan.cz
        type master;
        file "named.cz.huwlan";
        allow-update { none; };
};
Možnosti nastavení jako obvykle viz manové stránky. Nicméně vidíme, že soubor je dělen do bloků. Kromě bloků acl (pro řízení přístupu) čí loging (definuje události které se mají zaznamenat jsou nejpodstatnější options a zone. V options nastavujeme globální chování. Možností je hodně. Používané jsou např.: Typy zón:

Databázové soubory systému DNS

Hlavní soubory. Jsou vždy vždy spojeny s nějakou doménou. př. "huwlan.cz" -- počátek (absolutní cesty končí tečkou). Data jsou rozdělena do zdrojových záznamů. Záznamy mají společný formát:
 [doména][ttl][třída]typ rdata 
Příklad dopředného mapování:
$TTL 86400 
@		IN SOA huwlan.cz. root.huwlan.cz. (
			 2005030700 ; Serial
			 604800 ; Refresh
			  86400 ; Retry
			2419200 ; Expire
			 604800 ) ; Minimum
		IN NS houmr
routr IN A 62.209.236.33 
houmr IN A 62.209.236.34
www IN CNAME houmr
jou IN A 62.209.236.35 
jaguar IN A 62.209.236.36 
IN MX 10 houmr 

Reverzní mapování

Kromě IP musíme někdy vyhledat zpětně kanonický název hostitele. Proto byla vytvořena speciální doména in-addr.arpa (4 úrovňová). Ta obsahuje IP adresy v obrácené tečkové notaci. tj. 149.251.48.1 odpovídá 1.48.251.149.in-addr.arpa Mezi zónami a IP sítěmi může být vztah 1:n ke každé IP podsíti se musí vytvořit odpovídající zóny v in-addr.arpa a ty musí být zpřístupněny správcům podsítě. Příklad reverzního mapování:
$TTL 86400
@   IN SOA huwlan.cz. root.huwlan.cz. (
			 10 ; Serial
       604800 ; Refresh
       86400 ; Retry
       2419200 ; Expire
       604800 ) ; 
	 IN NS houmr.huwlan.cz.

33 IN PTR routr.huwlan.cz.
34 IN PTR houmr.huwlan.cz.
35 IN PTR jou.huwlan.cz.
36 IN PTR jaguar.huwlan.cz. 

Miscellaneous

Oproti verzi 8 bind ve verzi 9.x navíc podporuje, IPv6, pohledy (umožní nastavit server tak, že na stejný dotaz odpovídá různě podle toho kdo se dotazuje), multithreading, je striktnější v syntaxi /etc/named.conf - v 8.x občas něco přejde a pak to nefunguje) , light resolver (nová knihovna pro resolver), a další např. bezpečnostní opatření.

Bezpečnost: Server by neměl běžet se super uživatelskými právy. Měl by běžet v chrootovaném prostředí. To se v kostce dělá tak, že vytvoříme uživatele v /etc/passwd např. named, vytvoříme nový kořenový adresář třeba: /chroot do něj nakopírujeme soubory potřebné k běhu bindu s respektováním struktury. Tj. soubory z
etc - named.conf, ld.so.conf, localtime,
lib - viz ldd /usr/sbin/named se spuštěním: ldconfig -r /chroot/named ),
dev - vytvoříme /chroot/dev/null (mknod /chroot/named/dev/null c 1 3)
var - /chroot/var/run/named se zápisem pro named.
Pak spustíme named s parametry u a t: /usr/sbin/named -u named -t /chroot/named. (Info o běhu: /var/log/messages). odkazy: ftp.linux.cz./pub/users/kas/bind-chroot/,

Další užitečné nástroje: hostcvt konvertuje /etc/hosts do hlavních souboru vygeneruje záznamy pro přímé i nepřímé mapování. Dále pak lze pracovat s programy host, dig, nslookup . named-checkconf ověřuje syntaxi souboru /etc/named.conf atd.
Web: