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ř.:
- directory - Pracovní adresář serveru. Názvy souborů lze zadávat relativně
vůči tomuto adresáři.
- notify - pokud nastavíme na yes , pak server při změně zóny, pro níž je
autoritativní, vysílá tzv. zprávu notify o změně. Sekundární server si pak
požádá o aktualizaci -- zónový přenos.
- also-notify - počítače které obdrží DNS notify message.
- recursion - zakazuje/povoluje rekurzivní dotazy.
- forwarders - následuje seznam IP adres kterých se named dotazuje když se mu
nepodaří v cachi najít odpověď na dotaz.
- forward - uvádí se společně s předchozím parametrem. Nabývá hodnot first
(první se kontaktuje forward server když se dotaz nezdaří zkusí odpověď získat
přes root servery sám) a only (kontaktuje jenom forward server).
- allow-update - Udává které počítače můžou předkládat updaty. obvykle none.
Typy zón:
- master - znamená: tento server vlastní tzv. master kopii dat pro zónu
a je pro ní primárním jmenným serverem.
- slave - Zóna je kopií master zóny. Parametr masters
řekne IP stroje kterého má named kontaktovat pro kopii a updaty zóny.
- forward - Přesměrovávání dotazů podle forward a forwarders.
- hint - Seznam kořenových jmenných serverů
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
- Domená - název dom. ke které se záznam vztahuje. není li uvedena platí
předchozí. @ je alias na počátek.
- ttl - time to live - životnost v sekundách.
- třída - IN - pro IP, HS - adresy třídy Hesoid.
- typ - nejběžnější jsou typy:
- SOA - definuje zónu. Administrativní info. obsahuje pole: origin
- kanonický název primár. NS; serial verze souboru zóny obvykle
odráží datum vytvoření. contact -email správce (místo @ je . );
refresh doba po které provádí sekund. serv. kontrolu záznam SOA.;
retry doba po které se sec. server zkusí znova spojit s primár. při
neúspěchu; expire -doba které sec. serv. skartuje data o zónách.
minimum - default ttl;
- A - přiřazuje IP k názvu hosta. host v tomto záznamu je kanonicky pro
danou IP.
- CNAME - aliasy na kanonické jméno.
- NS - definuje primár a sekundární jmen. servery zóny. Záznamy musí být jak
v hlavní databázi podřízené zóny tak v i v nadřazené zóně (spolu se záznamy typu
A) - glue records.
zónu.
- PTR - k reverz mapování viz. dál.
- MX - definuje poštovní server. syntax [doména] [ttl] [třída]
MX preference hostitel
- HINFO - informace o platformě a OS stroje
- TXT - textový popis
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: