Cvičení v 10. týdnu

Správa domény, DNS



Jména a adresy

Zařízení (počítače) v internetu jsou identifikována jedinečnými 32-bitovými IP adresami (platí pro sítě TCP/IP dle IPv4). Každému zařízení, které má IP adresu, je možné přiřadit jméno (tzv. host name). Jména se přiřazují zařízením pro snazší zapamatování. Síťový software jména nepotřebuje, zavádí je pouze pro usnadnění použití sítě lidmi.

Ve většině případů je možno jméno a IP adresu vzájemně zaměnit. Pokud se chcete dostat např. na stránky věnované předmětu VPS, je jedno, zda prohlížeči zadáte http://os.felk.cvut.cz/vps nebo http://147.32.80.89/vps. Síťové spojení se uskuteční vždy na základě IP adresy, systém tedy vždy před navázáním spojení provede případnou konverzi jména počítače na IP adresu. V praxi zcela intuitivně platí, že jedna IP adresa odpovídá právě jednomu jménu a naopak. Vzájemný překlad jmen a IP adres může být někdy záměrně nejednoznačný, čímž lze řešit některé situace:

Pokud má jeden počítač více síťových rozhraní (karet) - např. router, má obvykle i více IP adres, ale každá jeho IP adresa je překládána na jiné jméno. Jedno jméno je pak zvoleno jako hlavní.

Přiřazování jmen IP adresám řídí internetová autorita NIC (Network Information Center). (Pozor: nepleťte si NIC a NIX-peeringové centrm českých ISP). Tak, jak jsou jména hiearchicky dělena do domén a poddomén, je i jejich správa svěřována podřízeným NIC autoritám. WWW stránky hlavní NIC autority naleznete na http://www.internic.net, NIC-CZ pro naši národní doménu spravuje společnost KPNQwest Czechia na adrese http://www.nic.cz. Každá doména druhé úrovně má vlastníka, technického administrátora a plátce. Za provoz domény druhého řádu se platí malý roční paušální poplatek.

Úloha: Navštivte stránky NIC-CZ a zjistěte informace o doméně cvut.cz.

Aktuální přiřazení jmen adresám bývalo kdysi uložené v souboru na disku. NIC autorita tyto informace shromažďovala a distribuovala v podobě souboru hosts.txt. Postupem času se Internet rozrostl natolik, že překladová tabulka nabyla gigantických rozměrů a stala se nepoužitelnou. V současné době je překlad implementován hlavně službou DNS (Domain Name Service). DNS je distribuovaná databáze, obsahující nejen informace o vzájemném překladu IP adres a jmen, ale i další doplňkové informace. Distribuovaná databáze především snižuje paměťovou náročnost překladu na jednotlivých počítačích, snižuje nároky na přenos dat (soubor hosts.txt) a zrychluje celkovou odezvu sítě na změny jmen. Každá distribuovaná databáze je však do jisté míry závislá na dostupnosti spojení, proto se používá i dnes statická tabulka pro některé nejdůležitější, nebo nejčastěji používané IP adresy či jména.

Resolver

DNS funguje na principu client/server. Resolver je klientskou částí DNS a zjišťuje pro jednotlivé procesy požadované překlady. V systému UNIX je implementován jako sada funkcí v konihovně libc, které může kterýkoliv program použít pro překlad mezi jménem a IP adresou, čili resolver se stává částí většiny programů. Kdykoliv chceme používat doménová jména, musí být nakonfigurován resolver.

Resolver má na výběr, zda použije statickou překladovou tabulku uloženou v souboru /etc/hosts, nebo distribuovanou databázi DNS, případně jinou službu. V praxi většinou používá soubor hosts a teprve když tam informaci nenalezne, použije DNS. Toto chování lze ovlivnit řádkem hosts: files dns v souboru /etc/nsswitch.conf Hodnota files znamená prohledat soubor /etc/hosts, hodnota dns znamená použít službu DNS, a např. hodnota nis znamená použít služby NIS (yellow pages).

Tabulka adres /etc/hosts je jednoduchý textový soubor, který obsahuje dvojice IP adresa a jméno počítače. Každý řádek obsahuje IP adresu oddělenou mezerou od seznamu jmen, která této adrese odpovídají. Příkladem záznamů tabulky mohou být následující řádky:

# /etc/host serveru os.felk.cvut.cz
147.32.80.89 os.felk.cvut.cz os
127.0.0.1 localhost

IP adrese 147.32.80.89 tedy odpovídá jméno os.felk.cvut.cz a alias os. Aliasy jsou užitečné pro zavádění obecných jmen (loghost, mailhost, lphost, dumphost).

Není-li adresa v souboru nalezena, je vyslán dotaz na DNS server, který je specifikován v souboru /etc/resolv.conf. Kromě seznamu DNS serverů je tam uložen název implicitní domény počítače a seznam domén, které se prohledají, pokud není zadáno celé jméno počítače včetně domény.

Úkol 1: Přidejte záznam 147.32.80.37 cs.felk.cvut.cz cs do svého /etc/hosts. Pozorujte změny při navazování spojení ssh cs.felk.cvut.cz. Jak se změna projeví u již navázaných spojení?

DNS server

Když DNS server obdrží žádost o informace o počítači, o němž žádné údaje nemá, dotáže se autoritativního serveru (authoritative server). Autoritativní server je každý server zodpovědný za udržování správných informací o doméně, jíž se dotaz týká. Jakmile autoritativní server odpoví, lokální server získané informace uloží pro budoucí použití. Když lokální DNS server obdrží žádost o dané informace příště, odpoví už sám (cache).

S DNS serverem můžete přímo komunikovat pomocí programů dig, host nebo nslookup. Např.: dig cs.felk.cvut.cz

Úkol 2: Prozkoumejte obsah a funkci DNS serveru ns.felk.cvut.cz. Tedy zobrazte všechny záznamy o serveru ns.felk.cvut.cz a obsah některé z domén, které obsluhuje.

dig @147.32.80.9 proxy.felk.cvut.cz		// normalni dotaz
dig @147.32.80.9 seznam.cz			// dotaz na cizi domenu
dig @147.32.80.9 sunray2.felk.cvut.cz MX	// dotaz na MX zaznam
dig @147.32.80.9 felk.cvut.cz ANY		// jakykoli zaznam o domene
dig @147.32.80.9 felk.cvut.cz AXFR		// kompletni vypis cele domeny

Služba DNS zjišťuje především IP-adresu přidělenou dotazovanému jménu, ale může poskytnout i další informace (mail server pro doménu, DNS server pro doménu, ...). Ke každému jménu jsou přiděleny tzv. záznamy různých typů. Každý typ záznamu nese pro dotazovanou doménu nebo počítač jinou informaci:
TypInformace
Apřidělená IP-adresa
MXodkaz na počítač zajišťující přenos el. pošty E-mail
NSodkaz na počítač zajišťující DNS
CNAMEskutečné (kanonické) jméno počítače
PTRjméno počítače při zpětném překladu
Všiměte si, že dotazy jsou vázány na jméno. Při zpětném dotazu (reverse lookup), kdy client zná IP-adresu a na jméno se dotazuje, se používá drobná finta, která formálně převede zpětný dotaz na obyčejný: Ptá-li se klient na IP-adresu AAA.BBB.CCC.DDD, pošle ve skutečnosti dotaz na jméno DDD.CCC.BBB.AAA.in-addr.arpa. Správný název počítače mu DNS server vrátí v záznamu PTR. Doména in-addr.arpa je fiktivní a používá se výhradně k tomuto účelu. Tím, že jsou zpětný a dopředný překlad navzájem odděleny, nemusí být datově konzistentní. To v praxi nemá význam, ale nekonzistence překladů využívají některé typy hackerských útoků. Někdy zajišťuje zpětný překlad jiný DNS server než překlad dopředný - např. dopředný překlad si dělá sám správce domény (v soukromé firmě) zatímco zpětný překlad zajišťuje příslušný ISP (provider), což je obvyklé u domén s méně než 256 adresami.

Konfigurace jmenné služby DNS

Na UNIXu je DNS server implementován programem Berkeley Internet Name Daemon (BIND) a spouští se programem /usr/sbin/named.

Hlavní konfigurační soubor je /etc/named.conf. Popisuje globální chování DNS serveru, implicitní hodnoty a deklaruje jednotlivé zóny. Zónou je libovolná skupina domén, která se zpracovává podobným způsobem. Existují tyto typy zón:
masterDNS server vlastní originál všech záznamů o všech počítačích dané zóny (domény). Bývá označován jako primární DNS
slaveDNS server vlastní kopii všech záznamů o všech počítačích v zóně. Záznamy získává v pravidelných intervalech z předepsaného master serveru. Říká se mu sekundární DNS
stubJako slave, ale kopíruje jen NS záznamy. Čili jen zrychluje přístup na NS dané domény.
forwardServer neudržuje žádné informace, dotazy předává jinému serveru
hintSpecifikuje počáteční množinu kořenových DNS serverů.
Pro dotazy nespadající do žádné definované zóny funguje DNS server jako cache a dotáže se nadřízeného serveru.

Pozor: Ve všech konfiguračních souborech jsou domény zakončené tečkou považovány za absolutní, zatímco nezakončené za relativní, tedy za názvy poddomén, ke kterým se automaticky připojuje název aktuální domény. Konfigurační soubor /etc/named.conf může vypadat například takto:

zone "." {
        type hint;        
        file "named.ca";      // definice korenovych DNS serveru
};
zone "firma.cz." {
        type master;
        file "named.firma";   // preklad jmen v nasi domene
};
zone "jinadomena.cz." {
      type slave;
      masters primarni-ns.jinadomena.cz;
      file "named.jinadomena"; // zalozni server pro jinoudomenu
};
zone "333.222.111.in-addr.arpa." {
        type master;           // zpetny preklad IP adres 111.222.333.*
        file "named.reverse";  // na jmena v nasi domene
};
zone "0.0.127.in-addr.arpa." { // zpetny preklad adresy 127.0.0.1
        type master;
        file "named.local";
};

Soubor named.ca obsahuje definice kořenových DNS. Obdržíte ho v rámci instalačního balíku BIND, nebo ho lze získat např. na www.nic.cz. Soubor named.jinadomena si server vytvoří sám po prvním stažení informací z primárního DNS.

Soubory named.firma, named.reverse a named.local mají velice podobnou strukturu - na jednotlivých řádkách obsahují jednotlivé záznamy ve formátu
jméno třída typ data
jménoje náze počítače nebo domény, které se záznam týká.
třídapoužívá se jen třída IN
typtyp záznamu - jakou informaci obsahuje
datadotyčná informace
Uveďme konkrétní příklad, jak by mohl vypadat soubor named.felk:

@         IN   SOA    ns.felk.cvut.cz. bily.felk.cvut.cz (
                        2000121802   ; serial number
                        3600         ; refresh doporucen kazdou hodinu
                        900          ; retry - pri neuspechu opakuj za 15 minut
                        1209600      ; platnost dat pro slave DNS 14 dni
                        43200        ; platnost dat pro cache 12h
                        )
@         IN   MX    5  ns.felk.cvut.cz.  ; mail server pro domenu felk s prioritou 5
@         IN   NS    ns.felk.cvut.cz.     ; DNS server pro domenu
@         IN   A     147.32.80.1          ; default pocitac v domene
ns        IN   A     147.32.80.9          ; preklady jednotlivych adres
cs        IN   A     147.32.80.1
os        IN   A     147.32.80.89
vps       IN   CNAME os                   ; alias
; atd, atd, atd

Záznam SOA definuje určité společné vlastnosti záznamů následujících. Je to jednak název hlavního DNS serveru pro doménu a kontaktní e-mail (všiměte si, že @ je nahrazen tečkou). Podle serial number poznají sekundární (slave) servery aktuálnost dat - po každé změně by se mělo zvýšit. Časové hodnoty jsou v sekundách.

Úkol 3: Nakonfigurujte si DNS server, staňte se sekundárním DNS serverem pro doménu felk.cvut.cz

Nápověda: Na konec souboru /etc/named.conf přidejte konfiguraci nové zóny:

zone "felk.cvut.cz" IN {
     type slave;
     file "slaves/felk.zone";
     masters { 147.32.80.9; };
};
Zde je ke stažení celý soubor /etc/named.conf.

Ačkoli můžete odstartovat DNS server příkazem service named start, tentokrát spouštějte server příkazem /usr/sbin/named -u named -f -g server poběží ve vašem terminálu a vy můžete ihned vidět protokol o činnosti a případné chyby. Server ukončíte stiskem CTRL-C.

Jakmile server běží, můžete zkusit překlad příkazem:
dig @127.0.0.1 cs.felk.cvut.cz
kde za znakem @ následuje IP adresa serveru, kterého se dotazujete.

Úkol 4: Nyní si zahrajeme na skutečný Internet. Váš cvičící bude Internetová autorita NIC a bude registrovat domeny druhého řádu, tak jak o ně budete postupně žádat. Vaše počítače musí mít možnost spolu komunikovat, proto si stáhněte skript net-setup a spusťte ho postupně nejprve na hostitelském počítači a později ve virtuálním stroji FC4. Na vašich FC4 strojích budete používat IP adresy přidělené síťové kartě eth1, tj. adresy ve tvaru 10.6.XXX.1.

Cvičící povede kořenový DNS server s touto konfigurací: /etc/named.conf a definicí kořenové zóny /var/named/root.zone. Cvičící se zároveň stane registrátorem domén druhého řádu, poddomény .vps. Na tabuli bude evidovat požadavky na zřízení domény. Každý student si nejprve zaregistruje svou doménu u registrátora na tabuli, pak si nakonfiguruje svůj DNS server pro svou doménu, zaplatí registrátorovi fiktivní poplatek za delegaci domény druhého řádu a požádá ho o delegaci domény. Registrátor ověří funkčnost delegovaného DNS serveru a poté vloží příslušný NS záznam (případně i glue záznam) do zónového souboru kořenového DNS. Tím je fyzicky provedena delegace domény.

Příklad nastavení studentského DNS serveru pro doménu druhého řádu mydomain.vps je zde: