Vše co jste nechtěli vědět o DNS a BINDu a už vůbec jste se nechtěli ptát.

Aleš Ledvinka, xledvink@informatics.muni.cz.


Obsah


BIND make it quick.
přeskoč a hezky pomalu


Historie překladů jmen a adres (HOSTS.TXT).

přeskoč historii
Již Staří Římané potřebovali DNS. EHM. Pardon, no určitě by potřebovali,¨kdyby znali Internet a nevymysleli něco mnohem lepšího.
Před DNS byla tma. No to možná taky ne.
Na třetí pokus to snad vyjde. Já už pamatuji jen DNS, ale jedna legenda(rfc1034 kapitola 2.1;) říká, že dřív se k překladu adres a jmen na celém Internetu používal soubor HOSTS.TXT. Administrátor si dal kafe nebo čaj, stáhnul z nejmenovaného stroje z ftp HOSTS.TXT a uložil na místo, kde systém předpokládal jeho existenci. (? snad to bylo na unixech odjakživa /etc/hosts ?)
Když už těch kafí bylo víc a víc a za několik měsíců od upgradu na linku s vyšší kapacitou, při stahování HOSTS.TXT zase tak stejně, bylo dost času přemýšlet o tom, jak změnit a taky snížit výdaje NICu (správce HOSTS.TXT) i provozovatele toho kterého systému. Příčina rychlého nárůstu záznamů v HOSTS byla změna struktury připojených sítí do internetu, kde se místo terminálů a sdílených strojů stále častěji objevovali jednouživatelské pracovní stanice.
Dalším nedostatkem, kromě rostoucí velikosti, byla přílišná centralizovanost této služby. Změnu v HOSTS musel provést NIC, požadovat změnu u NIC pro existující doménu taky nemohl každý, a kdo ví jaká další organizační (interní) omezení měly jednotlivé připojené sítě. A když už se záznam dostal do HOSTS.TXT, zbývalo jen čekat, než se rozkopíruje na potřebná místa.
Dál se ještě legenda zmiňuje o stále chytřejších programech, které vytvořily poptávku po dostatečně obecné službe dotazovatelné jménem. Zde zbývá prostor pro další spekulace, zda jde o USENET a MTA. (historikové prosím upřesněte)


Požadavky na DNS.

přeskoč požadavky
A protože kafí bylo víc než dost a s rostoucím množstvím připojených uživatelů čím dál častěji, napadalo lidi, co vše je třeba vyřešit: (rfc1034 kapitola 2.2)


Tři části DNS.

přeskoč jmenný prostor, RR, RR-Set, resolver a server až k druhům serverů
Výsledný systém má dodnes 3 základní části: (rfc1034 2.4., rfcFIXME(rrset))


Jaké jsou různé servery?

přeskoč všechny servery k zóně
přeskoč neautoritativní servery
Jaké servery existují? To je závislé od různých funkcí nad různými daty. Tak snad nejdřív jaká data můžeme mít. (rfc1035 kapitola 2.1 odstavec 4)

z BIND v9 A.R.M. kapitoly 1.4.5.
Tedy servery podle dat, nad kterými pracují, se dají rozdělit na cache, kombinované s cache a ty ostatní. Cache zachytává průchozí data a odpovídá na otázky, ke kterým má platná data. V protokolu takovou odpověď z cache můžete odhalit v hlavičce pomocí NEnastaveného (nastaveného na 0) bitu,
AA - authoritative answer, (ne)autoritativní odpověď.

Zde je snad vhodné místo pro forward nastavení, při kterém požadavky můžeme "nakopnout" směrem do velké cache nebo DNS-gateway. Cache "na pomezí", pokud nemáme cestu do Internetu, ale jen DNS-gateway a http/ftp/... gateway.

z BIND v9 A.R.M. kapitola 1.4.5.1.
Podle další funkce, již popsané jako podmínka fungování stub resolverů, se dají dělit na:

Rekursivní se snaží sezbírat co nejůplnější odpověď za klienta a tu mu následně předat.

A na autoritativní servery,
přeskoč je na roztřízení
z rfc1996 kapitoly 2.1. a taky BIND v9 A.R.M. kapitoly 1.4.4.
Podle vlastnictví/získávání, předávání dat a viditelnosti jejich autority pro zóny:

Ptáte se: "Kam zařadit autoritativní server?"
mám v tom jasno skáču na zónu
a nebo rovnou na protokol


Co to asi tak je ta zóna?
to vím naprosto přesně, tak raději skáču na protokol
Kolikrát zde padlo slovo zóna? Čemu někdo říká zóna? Snad uvedu na správnou míru příkladem ZÓNY:
Pro příklad si vezmeme snad se dá říct "realitu". Celý jmenný prostor začínající "." (root servery), který se dál rozpadá na jednotlivé domény.

         .
       /c c\
      / z o \
     /    m  \
    /         \

Mějme podstrom "muni.cz.", který pro tento příklad patří do správy ÚVT MU.

	.
        m
        u
        n
        i
        .
       / \
     /f a i\
    / i s c \
   /    c s  \
  /     s     \

A domény "fi.muni.cz." patřící do správy CVT FIMU a "ascs.muni.cz." patřící do správy ASCS. Nakonec "ics.muni.cz." stále ještě ve správě ÚVT MU.
Pak zóna ve správě CVT je doména "fi.muni.cz." a její RR a obsahuje úplný podstrom. Podobně bude vypadat zóna Spolku Informatiků "ascs.muni.cz.".
Ale zóna ve správě ÚVT v tomto příkladě obsahuje RR domény "ics.muni.cz." a informace z muni.cz.
Tedy zóna je myšlena jako záznamy(RR) z podstromu od nějakého kořene bez vnořených zón, o které se stará někdo jiný.
Pseudo rovnice popisující zónu pod ÚVT by vypadala přibližně:

			zone("muni.cz.")= RRs(domain("muni.cz.")) -
					- RRs(domain("fi.muni.cz.")) -
					- RRs(domain("ascs.muni.cz."))

Zóny si správce může libovolně rozsekat na více zón pro zpřehlednění. V BIND v9 pro přehlednost používejte raději $INCLUDE. Ale spíš je rozumější rozdělit zóny, pokud chceme kontrolovat velikost AXFR nebo chceme různé časy v SOA.


Minimum z DNS protokolu a existujících mechanismů.

přeskoč k BINDu

Pro úplnost hlavičku dns zprávy: (rfc1035 kapitola 4.1.1.)
takže se nic moc nestane, když ji přeskočím na mechanismy nebo taky druhy zpráv v DNS

---dál neplatí pro všechny OpCode stejný význam, ale nejčastěji---

Druhy zpráv a s nimi související mechanismy,
přeskoč na třídy dat
které se mohou objevit, se poznají podle 4bitů OpCode v hlavičce.

Tak teď už ke konkrétním třídám.
přeskoč na typy dat
Jak bylo řečeno, návrh DNS předpokládal uchovávání dat pro více protokolů, proto vznikly třídy.

Pro účely nastavování serveru si stačí pamatovat IN jako Internet a zbytek zapomenout. A navíc dig od jisté verze odmítá používat při dotazech třídu ANY.
Ještě poznámka, BIND v9 má IN jako implicitní třídu, a nemusí se uvádět, takže třídy můžete s klidným svědomím zapomět.

No a konečně několik nejobvyklejších základních typů dat,,
přeskoč k nastavení serveru
bez kterých se nejspíš neobejdete, ale zároveň s nimi vystačíte nad IPv4:

Seznam všech přidělených/definovaných typů najdete na www.iana.org./assignments/dns-parameters a popis v odkazovaných rfc nebo taky v BIND v9 A.R.M.


KONEČNĚ BIND! a nastavení BINDu v9

BIND mě nezajímá skáču na kuchařku, tipy, trable a omezení DNS.
přeskoč na konfigurák zóny
jaký jsou ty typy dat pro zónu?
co že tu bylo a named.conf?
čím se dají kontrolovat konfigy?

Jde o produkt Internet Software Consorcia a stáhnout se dá z http://www.isc.org./products/BIND/bind9.html

Na stránce ISC se taky dozvíte o součsných známých ještě neodstraněných problémech na jednotlivých platformách a kombinacích nastavení. Dál taky o vlastnostech a minmálních verzích jiných knihoven (OpenSSL). Nepřehlédněte rovněž odkaz na PDF verzi dokumentu BIND v9 Administrator Reference Manual - velmi užitečné čtení, mimo jiné v html verzi je součástí tgz blíku se zdrojovým kódem. Najít se dá v ./doc/arm/

Minimální nastavení nezávislé na distribuci spočívá v:

Jak vypadá konfigurace zóny.
přeskoč na named.conf
Možná jste si všimli, že už v předchozí části, se v textu povalovaly řádky z programu dig ve formátu použitelném pro nastavení BINDu. Vlastně všechny příklady u typů dat by snad měly jít bez úpravy použít v konfiguračním souboru zóny začínající kořenem "fi.muni.cz." (až na PTR).
Pamatujete si doufám, co všechno může být zóna?
Naváži tedy několika $-direktivami, které se vyskytují v nastavení zóny.

Pokud si chcete zkrátit psaní, tak až budete psát lab.fi.muni.cz., můžete využít možnosti neuvést vlastníka (asociované jméno) dat s tím, že BIND použije předchozí. A ještě dřív zmíněný ORIGIN a TTL, pak tedy místo:

fi.muni.cz.             86400   IN      SOA
	anxur.fi.muni.cz. root.fi.muni.cz. 2003030700 10800 900 1209600 86400
aisa.fi.muni.cz.        86400   IN      A       147.251.48.1
aisa.fi.muni.cz.        86400   IN      MX      50 relay.muni.cz.
aisa.fi.muni.cz.        86400   IN      MX      500 adis.cesnet.cz.

Můžete psát:

$TTL 86400
$ORIGIN fi.muni.cz. ;nebo využít implicitní hodnoty ORIGINu
@	SOA	anxur root 2003030700 10800 900 1209600 86400
aisa    A       147.251.48.1
	MX      50 relay.muni.cz.
	MX      500 adis.cesnet.cz.

@ je jméno které je v momentě použití v $ORIGIN
* - žolík(wildcard). Zástupný znak za všechny možné "labely". Čeho se pak vyvarovat nebo nebýt překvapení z, při vícenásobném užití * a jmen, která nejsou v FQDN najdete v rfcFIXME(???)
() můžete použít k seskupení dat roztahaných po více řádcích.

Jak vypadal konfigurák zóny se můžete kouknout v rfc1035 kapitola 5. s příkladem v 5.3. a přesvědčit se, že se dodnes příliš nezměnil.

named.conf
přeskoč na kontrolu konfigů
Tak to by byla zóna primárního serveru, která má svůj kořen. No, ale říkáte si: "Jak BIND ví, pro jaké zóny je autoritativní server? Jestli je primární nebo sekundární? Jestli jako sekundární má umožnit přenosy zóny dál a být pro někoho masterem?" To všechno a ještě mnohem víc rozhoduje obvykle soubor named.conf
Místo vysvětlování syntaxe named.conf vás odkážu na kapitolu 3.1. BIND v9 A.R.M., která uvádí ukázková nastavení. Spolu s tím co jsem psal o protokolu bude snad intuitivně jasné, co který pepínač znamená.

Nastavení forwardování najdete v 6.2.14.2 BIND v9 A.R.M. Nepřehlédněte zmínku o slově only, které mírně pozmění chování, tak aby odpovídalo poslední větě kontroly Úkolu. Obojí patří pod options {}; jak se můžete dozvědět v kapitole 6.2.13.
A pokud vážně chcete používat BIND a nastavit jej pořádně, tak přeji příjemné čtení kapitoly 6. a co nejméně rozbitých klávesnic s okomentovnou gramatikou.

kde je chyba v konfiguráku?
přeskoč na kuchařku, tipy, trable a omezení DNS.
Při odstraňování chyb v nastavení zóny na primárním serveru může pomoci program named-checkzone. Pro naši fiktivní zónu kořene muni.cz. která bude uložená v /var/lib/named/zone-muni se bude spouštět příkazem

named-checkzone muni.cz. /var/lib/named/zone-fi

Pro kontrolu souboru named.conf může posloužit program named-checkconf, který pro bind spouštěný příkazem named -c /named.conf -t /var/lib/named/ ..., tedy pro konfigurační soubor /var/lib/named/named.conf a chrootovný BIND se změněným kořenem uvnitř /var/lib/named/ se bude spouštět příkazem

named-checkconf -t /var/lib/named/ /named.conf

Poslední perličkou je program rndc-confgen. Podle parametrů sestaví konfigurák pro rndc a na konec napíše i zakomentované ukázky, kde co povolí funkci rndc v named.conf, aby jste mohli používat rndc k ovládání BINDu. Stačí zkopírovat poslední část do named.conf, změnit ACL u allow {} uvnitř controls {}, odkomentovat a být schopen udržet tajemství.


Trable a co se jinam nevešlo: