Autoři: Michal Čundrle, František Novák
Datum: 14.1.2004
Určování počítače pouze pomocí IP adresy by
bylo značně uživatelsky nepříjemné, proto se zavedlo označení
počítače v textové formě. Uživatel si lépe zapamatuje jméno počítače,
než jeho IP adresu.
Pro převody IP adres na
jména a opačně slouží name services (jmenné služby).
Jejich nejprimitivnější variantou je tabulka jmen a IP adres v
souboru /etc/hosts. Tato varianta už se dá použít pouze
u malých sítí, které nejsou připojeny k Internetu. Dříve udržovalo
středisko InterNIC na svém FTP serveru soubor HOSTS.TXT, který
obsahoval seznam všech registrovaných počítačů. Každý administrátor
si pak musel na každém počítači tento soubor obnovovat. Firma Sun
Microsystems vyvinula síťový informační systém NIS,
kde bylo možné zařadit tabulku hosts do síťové sdílené
databáze. To umožnilo, že všechny změny v tabulce bylo nutné provádět pouze na NIS
serveru. Ovšem tuto variantu bychom si při dnešní podobě
Internetu dovedli dost těžko představit.
Pro
sítě zapojené do internetu se používá služba DNS (Domain
Name Service). Standardní implementací DNS v unixech je BIND
(Berkeley Internet Name Domain Server).
Tyto tři druhy jmenných služeb se dají kombinovat. To znamená, že při hledání jména je možné použít postupně všechny služby. Pořadí je definováno v souboru /etc/host.conf nebo v proměnné prostředí resolveru RESOLV_SERV_CONF. Službami mohou být hosts (tabulka /etc/hosts), bind (DNS) nsebo nis (NIS server).
Příklad souboru /etc/host.conf:
#/etc/host.conf
#Používame
named, ale ne NIS v pořadí hosts,bind
order hosts,bind
Bind je službou typu klient – server.
Klient se v tomto případě nazývá resolver. Od verze 8 jsou
podporovány nové služby (Dynamic update, notify,….) Změnil se
i název a syntaxe konfiguračního souboru z named.boot u
verze 4.9.X na named.conf ve verzi 8. Nejčastěji
používanou unixovou implementací jmenného serveru BIND je démon
named.
Jmenný server BIND je možno používat v
následujících režimech:
primární (master) - Je zdrojem originálních informací o určité zóně. Tyto údaje má uloženy v diskovém prostoru, který musí administrátor zóny sestavit. Každá zóna musí mít svůj primární jmenný server.
sekundární (slave) - Je rovněž pro danou zónu autoritativní, avšak veškeré informace musí napřed získat přenosem po síti z příslušného primárního serveru. Je zálohou pro případ výpadku primárního serveru.
caching only - Není autoritativní pro žádnou zónu, ale umí rekurzivní překlad. Výsledky dotazů si po určitou dobu uchovává ve své paměti (cache).
Root name server je name server zodpovědný za některou kořenovou doménu (cz,sk,uk,edu,net,...). Neprovádí rekurzivní překlad, aby nebyl přetěžován.
Tato konfigurace se používá v případech, kdy jsme k Internetu připojeni pomalou linkou. Pokud name server hledá záznam, který nemá ve své cache, musí poslat několik paketů, než zjistí odpověď na dotaz. To by nejen zatěžovalo již pomalou linku, ale i vyhledávání nějakého jména by bylo zdlouhavé. Nabízí se přeposlat dotaz jinému name serveru forwarderu, který je již na rychlejších linkách, a nechat si poslat už jen odpověď. Takovému name serveru se říká forwarding server. Forwarding server posílá dotazy forwarderu, což bývá většinou name server poskytovatele Internetu. Pokud se forwarding server do určité doby nedočká odpovědi, pokusí se vyřídit dotaz sám a dotazuje se root name serverů. Někdy nechceme, aby se forwarding server pokoušel sám vyřídit dotaz, pak ho označíme jako slave server..
Poskytuje dynamickou změnu záznamů v databázi primárního name serveru. Správce DNS pak nemusí staticky upravovat záznamy, ale může to provést na dálku pomocí DNS protokolu. viz RFC 2136
Sekundární name server si vždy po uplynutí určité doby obnoví svou databázi od primárního name serveru. Tato doba však může být až 1 den, a tak vzniká dočasná nekonzistence dat mezi primárním a sekundárním name serverem. Abychom odstranili tento problém slouží notify. Prim. name server pošle při změně záznamu v zońě zprávu notify příslušnému sekund. serveru. Ten si pak ověří sériové číslo databáze prim. serveru a pokud se změnilo, vyžádá obnovu dat (zone transfer).
Rozšířením DNS pro IPv6 se věnuje RFC-1886.
Záznam typu AAAA IPv4 používá pro překlad jména na IP-adresu záznam
typu A. Pro IPv6 je zaveden obdobný záznam typu AAAA. Rozdíl spočívá
v tom, že záznam typu AAAA má v poli IP-adresa nikoliv čtyřbajtovou
IPv4- adresu, ale 32bajtovou adresu IPv6.
Pro reverzní překlad je
zavedena nová doména IP6.ARPA (obdoba domény IN-ADDR.ARPA pro IPv4).
IPv6-adresa je prvkem domény IP6.ARPA. Zajímavý je zápis prvku domény
IP6.ARPA. Jednotlivé bajty se opět zapisují „pozpátku”,
ale nikoliv celé bajty, ale poloviny bajtů. Polovina bajtu je
reprezentovaná jednou šestnáctkovou číslicí. Jednotlivé šestnáctkové
číslice se oddělují tečkou (tj. oddělovačem v doménovém jméně).
Příklad: IP-adresa 4321::1:2:3:4:567:89AB bude jako prvek domény
IP6.ARPA zapsána:
B.A.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.IP6.ARPA.
(IP-adresa
4321::1:2:3:4:567:89AB je jen zkráceným zápisem adresy
4321:0000:0001:0002:0003:0004:0567:89AB).
Resolver je v Unixu implementován prostřednictvím funkcí gethostbyname() a gethostbyaddr() obsažených v systémové knihovně. Resolver potřebuje ke správné funkci znát pouze dva údaje: jméno vlastní domény a adresu jmenného serveru, na který se obrací s dotazy. Tyto údaje se zadávají do souboru /etc/resolv.conf .
Syntaxe:
domain doména –
definice domény
nameserver ip_adresa – ip adresa
jmenného serveru (max 3 - dotazuje se postupně)
search domena_1
doména_2 … - pokud se provádí dotaz na relativní doménové
jméno (bez tečky na konci) a to nebylo jmenným serverem nalezeno
pokouší se resolver na konec jména postupně připojovat řetězce
doména_1, doména_2…
Příklad souboru /etc/resolf.conf
#konfigurace resolveru
DNS - resolf.conf
domain hello.tps-root
nameserver
158.196.135.18
Named [nejmdý] je nejčastěji používanou implementací jmenného serveru BIND. Je obvykle spuštěn při zavádění systému a běží tak dlouho, dokud počítač nevypnete. Jeden běžící exemplář programu named může obstarávat i více zón zároveň a to i v různých režimech. Spuštění můžete provést také ručně z příkazové řádky zadáním:
# /usr/sbin/named
Po spuštění si named načte údaje z konfiguračního souboru named.conf. Poté si načte zónové soubory definované v konfiguračním souboru.
Soubor obsahuje odkazy na zónové soubory a na jiné jmenné servery. Jednotlivé záznamy jsou zapsány do bloků uzavřených hranatými závorkami, které začínají klíčovým slovem, uvnitř bloku je pak jeden nebo více parametrů.
options {
directory "/var/cache/bind";
recursion
no;
};
V bloku option nastavujeme různé vlastnosti NS. Za klíčovým slovem directory nastavíme adresář, kde se mají hledat následující zónové soubory. Dále můžeme vypnout rekurzivní vyhledávání NS (např. u root NS).
Syntaxe některých voleb:
options
{
[ directory path_name; ]
[ notify yes_or_no; ]
[ recursion yes_or_no; ]
[ forward ( only | first ); ]
[ forwarders { [ in_addr ; [ in_addr ; ... ] ] }; ]
};
key
"rndc-key" {
algorithm hmac-md5;
secret
"tcNk1hdZCzT0eRnrmSQ4Ng==";
};
Syntaxe:
key key_id { algorithm algorithm_id; secret secret_string; };
Blok key definuje algoritmus a klíč, který se bude používat při autentizaci name serverů.
algorithm - specifikuje autentizační
algoritmus.
secret - heslo použité algoritmem.
zone
"localhost" {
type master;
file
"/etc/bind/db.local";
};
V bloku zone se definuje zóna, v tomto případě localhost. Za klíčovým slovem type je hodnota master. Tím nastavíme, že pro zónu localhost je tento počítač primárním NS. Za file se uvádí zónový soubor pro danou zónu.
Syntaxe některých voleb:
zone domain_name [ ( in | hs | hesiod | chaos ) ] {
type ( master |
slave | stub | hint );
[ file path_name; ]
masters { ip_addr; [ ip_addr; ... ] };
- pouze sekundární name server
[ notify yes_or_no; ]
[ also-notify { ip_addr; [ ip_addr; ... ] };
};
Zónové soubory , na které se odkazuje konfigurační soubor named.conf mají pevný formát popsaný v RFC 1033. Zónové informace jsou zde ve tvaru tzv. zdrojových záznamů, které jsou zapsané v řádcích a obsahují následující položky oddělené mezerami nebo tabelátorem:
[doména] [ttl] [třída]
typ údaje
doména - doménové jméno
objektu, ke kterému se záznam vztahuje.
ttl - doba
platnosti udaná v sekundách. Po uplynutí této doby bude záznam
vymazán z databáze jmenného serveru.
třída - označuje třídu
adres pro protokol TCP/IP je zde vždy uvedeno "IN"
typ
- typ zdrojového záznamu (SOA, A, NS, CNAME, PTR, MX, WKS a
HINFO)
rdata - Informační obsah zdrojového záznamu, který
je specifický pro každý z typů.
Znak @ reprezentuje současnou implicitní doménu. Tu je možné změnit direktivou $ORIGIN doména
SOA - popisuje zónu, na níž se se vztahuje autorita
následujících zdrojových záznamů. Záznam má formát:
[domain]
[ttl] IN SOA origin contact (
serial
refresh
retry
expire
minimum_ttl
}
origin - jméno primárního jmenného serveru pro danou doménu.
contact - e-mailová adresa osoby zodpovědné za správu domény
serial - číslo verze zónového souboru (zvětšuje se při každé změně)
refresh - perioda v sekundách po které sekundární NS kontroluje záznam SOA primárního NS (implicitně 8640s = 1 den)
retry - doba v sekundách po které bude sekundární NS znovu zkoušet spojení s primárním NS, pokud je tento v určitém okamžiku nedostupný. (implicitně 360s =1 hodina)
expire - doba v sekundách, po které sekundární NS při neúspěšné komunikaci s primárním NS zahodí veškeré informace o dané zóně.(implicitně 2419200s = 1 měsíc)
minimum_ttl - implicitní hodnota ttl pro zdrojové záznamy, které mají vynechánu tuto položku.(implicitně 604800s = 1 týden )
A - tento typ záznamu přiřazuje IP adresu ke názvu
hostitele.
NS - definuje primární a všechny sekundární NS
zóny.
CNAME - přiřazuje kanonickému názvu hostitele
přezdívku (alias)
PTR - slouží k přiřazení doménového jména
k IP adrese v rámci reverzní domény in-addr.arpa
MX
- definuje poštovní server dané domény.
HINFO - informace o
hardwaru a softwaru daného systému.
Vytvoříme si vlastí doménový NS [Name Server], který bude zodpovědný za doménu hello, zaregistrovanou u našeho root NS tps-root, a k ní připojíme dva počítače pc1 a pc2. V praxi bychom samozřejmě asi nevytvářeli svůj root NS, ale svou doménu hello bychom zaregistrovali u nějakého nadřazeného NS. Mohl by to být například NS našeho poskytovatele připojení k internetu nebo přímo u existujícího root NS (cz, edu, net,…). Kvůli demonstraci však vytvoříme svůj vlastní root NS.
Primary DNS (master) – je zdrojem originálních
informací o naší zóně hello.
Secondary DNS (slave) –
je rovněž pro naši zónu hello autoritativní, avšak veškeré
informace musí získat od příslušného primárního serveru. Je zálohou
pro případ výpadku primárního serveru, proto by neměl být umístněn na
lokální síti s primárním serverem.
Root DNS - náš
vlastní root name server.
pc1 a pc2 - stanice
využívající jmenné služby
Konfigurační soubory:
RootDNS - demonstrační root name server
PrimaryDNS - aktivováno notify
SecondaryDNS - aktivováno forwarding
pc1 - stanice bez name serveru
pc2 - aktivováno caching-only
Testování nastavení jsme prováděli pomocí programu nslookup. Zkoušeli jsme například z pc1 zjistit ip adresu pc2. Dotazovali jsme se jak primárního tak sekundárního name serveru. Podařilo se nám získat i ipv6 adresu. Zkoušeli jsme i reverzní dotazy. Na ipv4 se nám jména na základě ip adresy zjistit podařilo, ovšem u ipv6 ne. Chybu jsme našli v souboru named.conf primárního i sekundárního name serveru, kde jsme měli špatně zadán název zóny.