DNS

Jiří Kolář, xkolar2@fi.muni.cz


Obsah


Úvod

DNS (Domain Name Service) je služba sloužící pro překlad doménových jmen na IP adresy a naopak (IP adres na doménová jména). Vznik doménových jmen přirozeně vyplynul z těžké zapamatovatelnosti IP adres. Doménová hierarchie v Internetu má stromovou strukturu. Kořenem je '.' a prvními podstromy jsou domény prvního řádu (com,org,net, lokální domény: cz, sk atd.). Zpočátku byla doménová jména zpravována centralizovaně a byla uložena v souboru HOSTS, který si servery rozkopírovaly mezi sebou. Pokud chtěl někdo změnu musem požádat NIC (Network Information Center). To se zdá dnes nemožné, ale v době kdy Internet fungoval na menším písečku je to pochopitelné. Tento těžkopádný způsob fungoval do roku 1984, kdy Paul Mockapetris navrhl systém DNS. A od těch dob se o šíření informací o doménovýh jménech stará hierarchie serverů zajišťující službu DNS.


Jak funguje DNS

Služba DNS má stranu serveru a stranu klienta. Server spravuje záznamy o doménových jménech v rámci své domény a o serverech spravující nadřazené domény. Klient klade dotazy na IP adresy na základě doménového jména a naopak, server zná buď odpověď nebo ví kde se zeptat. Takto se při vyhodnocování dotazu putuje stromem domén směrem vzhůru, případně až ke kořenovým serverům. Záznamy o těchto serverech lze získat na ftp NIC ftp.internic.net


DNS server

Existují primární, sekundární a cahe-only DNS servery. Každý server může být primární pro jednu zónu a zároveň sekundární pro jinou. Primární uchovává informace pro překlad adres, pro každou zónu zvlášť. Sekundární si pouze stahuje informace o požadované zóně od primárního nebo od jiného sekundárního (zone transfer) a nemá právo zónu změnit. Cache-only server si pouze pamatuje odpovědi na dotazy dříve kladené, které přepošle.

Server se může chovat buď rekurzivně tj. sám se ptá serverů v hierarchii nad ním a klientovi dá odpověď až ji zjistí, nebo klienta pouze odkáže na server v hierarchii nad ním.

Existuje spousta implementací DNS serverů. V první řadě je asi vhodné zmínit BIND (Berkeley Internet Name Domain), který je referenční implementaci DNS pro UNiX, další rozšířené jsou DJBDNS, Dents


DNS klient (resolver)

Klientská část DNS se nazývá resolver a má za úkol mimo jiné zadávat DNS dotazy. Reslover je součástí knihovny 'libc' tudíž asi každé distribuce. Koho se má ptát je definváno v konfiguračním souboru '/etc/resolv.conf' a obvykle vypadá takto:

search lab.fi.muni.cz //v kterých doménách se má hledat
domain neco //jméno naší domény
nameserver 10.0.0.1 // Nameserver kterého se má reslover ptát


Jak na BIND

BIND je DNS server vhodný pro malé a středně velké domény. BIND je monolitický program named. Poslouchá na UDP i TCP portu 53. Používá pro dotazy a odpovědi UDP, jen u vyjímečně složité komunikace používá TCP.

Stažení

Zdrojové soubory bindu lze získat na stránkách společnosti Internet Systems Consortium - http://www.isc.org/. Aktuální verze je BIND 9.

Instalace

Protože služba DNS bude dostupná zvenku, pravděpodobně komukoliv z internetu je vhodné udělat několik bezpečnostních opatření: Instalace probíhá klasickým:
./configure && make && make install DESTDIR=/chroot/named

Konfigurace

Poté je nutno BIND nakonfigurovat. Nejprve konfigurační soubor obvykle "/etc/named.conf",při changerootu samozřejmně "/chroot/etc/named.conf"
options {
// Pracovní adresář
directory "/var/named";

// Pro komunikaci s jinou DNS použij port 53
query-source port 53;

// Pokud něco neví, ptá se nejprve serverů
// uvedených ve forwarders
forward first;

forwarders {
212.65.193.6;
212.65.242.210;
};

//Kdo smí klást dotazy
allow-query {
              any;
        };

//Konfigurace kořenové zóny, informace o root nameserverech jsou uloženy v //souboru 'named.ca'
zone "." IN {
        type hint;
        file "named.ca";
};
//Konfigurace překladu jména localhost, 
zone "localhost" IN {
        type master;	//značí že server je pro tuto zónu primární
        file "pri/localhost.zone";
        allow-update { none; }; // udává kdo může updatovat zónu
        notify no;
};
//Konfigurace překladu reverzního dotazu na localhost
zone "127.in-addr.arpa" IN {
        type master;
        file "pri/127.zone";
        allow-update { none; }; 
        notify no;
};

// konfigurační soubor named.neco.net
// (pojmenovat si ho můžete jakkoliv)
// je uložen v cestě uvedené v directory
zone "neco.net" {
type master;
file "named.neco.net";
};


// Slouží ke zpětnému překladu. (IP -> jméno)
zone "4.168.192.in-addr.arpa" {
	//toto jméno je složeno z IP adresy třídy
	// C (192.168.4) a .in-addr.arpa
type master;
file "named.rev";
};


a nyní konfigurace jednotlivých zón:
Soubor named.neco.net
$TTL 86400
@ IN SOA neco.net. spider.neco.net. (// jméno domény, email správce: místo @ je tu "."
2002102100 ; // Identifikační číslo (rok, měsíc, den)
10800 ; // Obnovovací frekvence (v sekundách)
1800 ; // Opakované pokusy (v sekundách)
1209600 ; // Expirace datových tabulek na
// sekundárním serveru, pokud nedojde k aktualizaci

604800 ) ;
// minimum - doba, po které prohlásí sekundarní
// server požadavek za nesplnitelný


// nezapomenout na koncích tečku!
IN NS ns.neco.net. // záznam typu NS (Name Server)
IN MX 10 mail.neco.net.// mail server MX (MailExchage),10 (váha) přednostně se použije ten s nejnižší
ns IN A 192.234.4.13 ;// Záznam typu A (Address)
mail IN A 192.234.4.13 ;// slouží k převodu jména na IP adresu.k mail se automaticky připojí neco.net,
chief IN A 192.234.4.13 ;

www IN CNAME chief // Záznam typu CNAME (Canonical Name)

smtp IN CNAME chief
pop3 IN CNAME chief

misa IN A 192.234.4.11 ;
peta IN A 192.234.4.12 ;
luda IN A 192.234.4.14 ;
aja IN A 192.234.4.15 ;
a tet reverzní named.rev
 $TTL 604800
@ IN SOA 4.168.192.in-addr.arpa. spider.neco.net. (
2002102101 ;
10800 ;
1800 ;
1209600 ;                         
604800 ) ;

IN NS ns.neco.net.

11 IN PTR spider.neco.net // Typ PTR (pointer); číslo na začátku je poslední v celé IP adrese (192.168.4.11)
13 IN PTR www.neco.net
13 IN PTR chief.neco.net
13 IN PTR mail.neco.net
13 IN PTR ns.neco.net
13 IN PTR smtp.neco.net
13 IN PTR pop3.neco.net
11 IN PTR misa.neco.net
12 IN PTR peta.neco.net
14 IN PTR luda.neco.net
15 IN PTR aja.neco.net

Kontrola

Pro kontrolu konfigurace BINDu a konfigurace zón slouží programy
named-checkconf
a
named-checkzone
případně programy:
 host [-aCdlriTwv] [-c class] [-N ndots] [-t type] [-W time]
nebo
dig [@dns] domain [[-c ]q-type] [[-t ]q-class] [+q-opt] [-d-opt] [%comment]

Spuštění

named -u named -t /chroot/named/ -c /etc/named.conf

Ovládání za běhu

Démona named můžeme za běhu ovládat, reloadovat konfigurace, zakazovat updaty zón, zapínat logování a ladění pomicí programu:
rndc [-c config] [-s server] [-p port][-k key-file ] [-y key] [-V] command

Informační zdroje o DNS

BIND 9 Administrator Reference Manual
Ftp se seznamem kořemnových nameservrů - internic.net
Internet Systems Consortium
BIND FAQ
BIND HOWTO