8. DNS (Domain Name System)

Posledná zmena: 7/9/2021

8.1 Ako funguje DNS

DNS je systém na správu doménových mien počítačov a ich IP adries. Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad). Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.

Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky "A-Z", "a-z", "0-9", "-" a "_".

DNS si môžete predstaviť ako strom domén:

       com        edu    ... sk
       / \         |          \
      /   \        |           \
  google  sun  washington     stuba
    /      |       |          /   \
  www     www     www      chtf   elf
                            /     |   \
                         chelin  decef fornax
  

Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server. Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla.

Najvyššiu úroveň stromu domén - domény najvyššej úrovne (top-level domains, TLD) spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre domény najvyššej úrovne (".com", ".net", ".sk" atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch. Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii každého DNS servera.

Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne (subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na podriadené DNS servery, ktoré ich spravujú. Napr. DNS server pre "stuba.sk" obsahuje odkazy na DNS servery domén "chtf.stuba.sk" a "elf.stuba.sk" (a mnoho ďalších). Na DNS serveri pre doménu "elf.stuba.sk" nájdete napr. údaje o serveroch "decef.elf.stuba.sk" a "fornax.elf.stuba.sk".

Časť stromu domén, ktorú spravuje DNS server, sa nazýva zóna.

TTL (Time To Live) je čas, počas ktorého klient považuje informáciu o doménach/adresách za platnú. Po uplynutí tohto času si opäť obnovuje informácie z DNS.

DNS servery rozdeľujeme na dva základné druhy:

Jeden DNS server môže byť autoritatívny aj pre viacero domén (typicky napr. provider Internetu), ale pre jednu doménu môže byť autoritatívny iba jeden DNS server.

Primárny DNS server sa v terminológii DNS servera BIND označuje aj ako "master", sekundárny server ako "slave".

Pri zisťovaní záznamu pre fiktívnu adresu "server.mojadomena.sk" sa postupuje takto:

  1. počítač, z ktorého vysielate požiadavku, kontaktuje váš DNS server a odovzdá mu požiadavku.
  2. ak je váš DNS server primárnym DNS serverom pre doménu "mojadomena.sk", obslúži požiadavku a vráti IP adresu počítača "server.mojadomena.sk".
  3. ak je váš DNS server sekundárnym DNS serverom pre doménu "mojadomena.sk", poskytne údaje o adrese "server.mojadomena.sk" zo svojej kópie zónového súboru.
  4. ak váš DNS server používa nadradené DNS servery, napr. u poskytovateľa Internetu, kontaktuje ich a odovzdá im požiadavku. Toto sa opakuje pre všetky DNS servery, ktorými požiadavka prechádza.
  5. ak DNS nemá definované nadradené servery, kontaktuje náhodne vybraný koreňový DNS server a získa adresu DNS servera pre doménu "sk"
  6. DNS server kontaktuje DNS server pre doménu "sk" a získa adresu DNS servera pre doménu "mojadomena.sk"
  7. DNS server kontaktuje DNS server domény "mojadomena.sk" a získa adresu pre záznam "server.mojadomena.sk"
  8. odpoveď sa vracia postupne cez všetky DNS servery až na počitač, z ktorého bola vyslaná

8.2 Zónové súbory

Informácie o doménach a adresách sú uložené v tzv. zónových súboroch. Jeden zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto domény a umožňuje preklad doménového mena servera na jeho IP adresu. Na opačný preklad slúžia reverzné zónové súbory, ktoré definujú záznamy v špeciálnej doméne "in.addr-arpa". Reverzné DNS záznamy nie sú vo všeobecnosti povinné, mnoho služieb ich však vyžaduje (napr. niektoré konfigurácie mailových serverov neprijímajú maily od serverov bez reverzného záznamu) a preto by ste ich mali používať minimálne pre vaše servery, ktoré komunikujú s Internetom.

V niektorých prípadoch si môžete reverzné záznámy robiť sami Ak máte pridelený celý rozsah adries v A, B alebo C triede (maska 255.0.0.0, 255.255.0.0, 255.255.255.0), robíte si svoj reverzný záznam sami. Ak má vaša sieť inú masku, napr. 255.255.255.X, kde X nie je 0, robí poskytovateľ, ktorý vám pridelil adresu, aj reverzný záznam pre vašu podsieť.

8.2.1 Typy záznamov v zónových súboroch

Informácie v zónových súboroch sa nazývajú záznamy (Resource Records, RR). Existuje ich viacero, ale ukážeme si len tie, s ktorými sa stretnete naozaj v každom zónovom súbore DNS servera.

8.2.1.1 SOA (Start Of Authority): definícia domény

Syntax:

    <doména>  [<ttl>]  [<trieda>]  SOA  <nameserver>  <admin>  (
                    <serial>
                    <refresh>
                    <retry>
                    <expire>
                    <minimum> )
  
Príklad:
mojadomena.sk           IN SOA  mojserver.mojadomena.sk. adresa_spravcu.mojadomena.sk. (
                                2003013101 ; serial
                                86400      ; refresh (1 day)
                                21600      ; retry (6 hours)
                                3600000    ; expire (5 weeks 6 days 16 hours)
                                3600       ; minimum (1 hour)
                                )

Záznam "IN SOA" (Start of Authority) definuje doménu, jej meno a vlastnosti. "mojadomena.sk" je plné meno definovanej domény. "mojserver.mojadomena.sk" určuje meno servera, ktorý spravuje túto doménu, teda primárny DNS server. Nasleduje adresa administrátora domény, v ktorej sa namiesto znaku "@" použije ".".

8.2.1.2 NS (Name Server): definícia DNS servera pre definovanú doménu

Syntax:

  <doména>   [<ttl>] [<trieda>]   NS   <server>
  

Príklad:

mojadomena.sk           IN SOA  mojserver.mojadomena.sk. adresa_spravcu.mojadomena.sk. (
                                2003013101 ; serial
                                86400      ; refresh (1 day)
                                21600      ; retry (6 hours)
                                3600000    ; expire (5 weeks 6 days 16 hours)
                                3600       ; minimum (1 hour)
                                )
                        NS      mojserver.mojadomena.sk.
                        NS      inyserver.inadomena.sk.
  

Záznam "NS" (Name Server) určuje DNS servery pre definovanú doménu. Záznamy musia obsahovať doménové mená, nie IP adresy! Záznam "NS" nesmie byť alias na iný záznam. Každá doména musí mať najmenej jeden NS záznam, odporúča sa však, aby mala najmenej dva, ktoré sa nazývajú primárny a sekundárny DNS server (na poradí týchto záznamov nezáleží).

Toto označenie je však trochu mätúce, pretože doména môže mať aj viac sekundárnych DNS serverov. V novšej terminológii, ktorú používa aj BIND, sa preto DNS servery označujú ako master (primárny) a slave (sekundárny). Sekundárny DNS server by mal byť umiestnený fyzicky na inej sieti, ako je primárny DNS server, aby fungoval v prípade, že v dôsledku výpadku elektriny, pádu OS alebo nejakej živelnej pohromy nefunguje primárny DNS server. Obyčajne sa ako sekundárny DNS server používa DNS server poskytovateľa Internetu, prípadne sa môžete dohodnúť s nejakou organizáciou, že si budete navzájom robiť sekundárne DNS servery.

Pri aktualizácii zónového súboru nezabudnite na zvýšenie sériového čísla - DNS server upozorňuje všetky svoje sekundárne DNS servery, že nastala zmena zónového súboru a sekundárne servery si skopírujú zónu iba v prípade, že ste zvýšili sériové číslo!

V príklade definujeme dva DNS servery pre doménu "mojadomena.sk" s menami "mojserver.mojadomena.sk" a "inyserver.inadomena.sk" (keďže je súčasťou domény, ktorú nespravuje náš DNS server, je to náš sekundárny DNS server). Údaje sa nachádzajú priamo v zónovom súbore s definíciou domény "mojadomena.sk", preto netreba opakovať meno domény pred obomi záznamami.

8.2.1.3 MX (Mail Exchanger): definícia mailového servera domény

Syntax:

    <doména>   [<ttl>] [<trieda>]   MX   <priorita>   <server>
  

Príklad:

mojadomena.sk           IN SOA  mojserver.mojadomena.sk. adresa_spravcu.mojadomena.sk. (
                                2003013101 ; serial
                                86400      ; refresh (1 day)
                                21600      ; retry (6 hours)
                                3600000    ; expire (5 weeks 6 days 16 hours)
                                3600       ; minimum (1 hour)
                                )
                        NS      mojserver.mojadomena.sk.
                        NS      inyserver.inadomena.sk.
                        MX      10 mojserver.mojadomena.sk.
  

Záznam "MX" (Mail Exchanger) určuje server. ktorý prijíma poštu adresovanú na adresy "pouzivatel@mojadomena.sk". Týchto serverov môže byť viac. Pri doručovaní mailu pre vašu doménu sa používa tento záznam na zistenie, kam sa vlastne má pošta doručiť. Pomocou čísla pred menom servera sa nastavuje jeho priorita - nižšie číslo znamená vyššiu prioritu. Najvyššiu prioritu má server s hodnotou "0". To môžete využiť v prípade, že máte okrem primárneho mail servera aj nejaké záložné, ktoré dočasne prevezmú funkciu prijímania pošty v prípade výpadku a keď primárny mailový server funguje, vám ju doručia.

Hodnota "MX" záznamu musí byť doménová adresa a nesmie ísť o alias na iný záznam.

Poznámka: záložné mailové servery musia byť nakonfigurované pre prijímanie vašej pošty, inak ju budú odmietať, pretože nie je určená pre ich doménu! (chyby typu "Relaying denied") V prípade Postfixu je ukážka správneho nastavenia priamo na jeho stránke v sekcii "Documentation, FAQ".

8.2.1.4 A (Address): definícia adresy pre meno

Syntax:

  <server>   [<ttl>] [<trieda>]   A   <adresa>
  

Príklad:

mojserver       IN   A       192.168.0.1
diane           IN   A       192.168.0.2
  

Záznam "A" (Address) určuje IP adresu pre server definovaný jeho menom. Servery uvedené ako "NS" a "MX", ktoré sú súčasťou vašej domény, musia mať záznam typu "A" (nie CNAME)!

8.2.1.5 CNAME (Canonical Name): definícia aliasu

Syntax:

  <alias>   [<ttl>] [<trieda>]   CNAME   <server>
  

Príklad:

mail            IN   CNAME   mojserver
www             IN   CNAME   mojserver
ftp             IN   CNAME   mojserver
  

Záznam "CNAME" (Canonical Name) umožňuje vytvoriť alias pre server, ktorý už má "A" záznam, čiže niekoľko záznamov môže byť asociovaných s tou istou IP adresou. Toto sa používa pre definíciu serverov s menami "www", "mail" a podobne.

Aliasov môžete definovať ľubovoľné množstvo, nezabúdajte však, že servery uvedené ako "NS" (DNS servery) a "MX" (mailové servery pre doménu) musia mať "A" záznam (nie "CNAME"!)

8.2.1.6 PTR (Pointer): definícia reverzného záznamu

Syntax:

  <špeciálnemeno>   [<ttl>] [<trieda>]   PTR   <meno>

Príklad:

1                IN   PTR     mojserver.mojadomena.sk.
2                IN   PTR     diane.mojadomena.sk.

Záznamy "PTR" umožňujú reverzný preklad (z IP adresy na doménové meno počítača). Tieto záznamy môžete použiť iba v špeciálnej doméne "in.addr-arpa".

Je nesmierne dôležité, aby v prípade, že používate aj reverzné DNS, reverzný preklad IP adresy "sedel" s priamym prekladom daného doménového mena na IP adresu, inak sa dočkáte poriadnych problémov. To znamená, že ak preklad doménového mena "mojserver.mojadomena.sk" vracia IP adresu 192.168.0.1, nesmie preklad IP adresy 192.168.0.1 vracať iné meno ako "mojserver.mojadomena.sk". Je to síce perfektné platný záznam, ale nie je to ani trochu v poriadku. vystavujete sa tým napr. riziku, že z tohto servera bude odmietnutý prístup pri komunikácii s inými servermi, ktoré si budú overovať reverzný záznam kvôli bezpečnosti.

8.3 Inštalácia

Inštalácia DNS servera BIND je jednoduchá. Môžete si stiahnuť zdrojový kód priamo z domácej stránky projektu, alebo použiť balíčky, ktoré dodávajú jednotlivé distribúcie (pre jednoduchosť odporúčam pracovať s balíčkami).

Na začiatku si treba ujasniť, či chcete inštalovať verziu BIND-u radu 8.X.X alebo 9.X.X. Verzia 9 bola napísaná takmer odznovu, takže by mala byť lepšia, krajšia atď. a považuje sa vo všeobecnosti za bezpečnejšiu. Obsahuje tiež viacero nových funkcií. Nevýhodou je, že ak prechádzate zo staršej verzie (8.X) na novšiu (9.X), môžu sa vyskytnúť drobné problémy s niektorými parametrami, prípadne zistíte, že váš zónový súbor s údajmi o adresách počítačov obsahuje chyby, o ktorých ste dovtedy nevedeli (BIND 9 je citlivejší na chyby).

Ak inštalujete DNS na čistý server, tak nie je čo riešiť - inštalujte priamo verziu radu 9.

V nasledujúcom texte budem predpokladať inštaláciu BIND 9.2.x, ale väčšina, (ak nie všetky) vecí by mala fungovať aj pre verzie 8.X.

Všetky údaje, ktoré bude DNS server pri svojej činnosti potrebovať, budeme uchovávať v adresári "/var/named". Je to najmä preto, že adresár "/var" zvykne byť pripájací bod pre súborový systém a ten môžeme zabezpečiť tak, ako sme si to ukázali v kapitole "Rozdelenie disku".

8.3.1 Inštalácia zo zdrojových textov

Po stiahnutí balíka ho rozbalíme a skonfigurujeme:


  cd /var/tmp
  tar xzf bind-9.x.x.tar.gz
  cd bind-9.x.x
  ./configure --enable-threads
  

Ak vás zaujímajú ďalšie parametre príkazu "./configure", môžete ho spustiť s parametrom "--help".


  ./configure --help
  

Jeden z najpoužívanejších parametrov je "--prefix=cesta", ktorý určuje základnú cestu, kam sa BIND nainštaluje. Štandardne je táto cesta "/usr/local/" (BIND vytvorí pri inštalácii potrebné podadresáre).

Po skonfigurovaní (nemali by ste vidieť nijaké chyby) program skompilujte príkazom


  make
  

Po úspešnom skompilovaní (nemali by ste vidieť nijaké chyby) nainštalujte BIND príkazom:


  make install
  

Súbory sa prekopírujú do cieľových adresárov (štandardne "/usr/local/"), takže samotný démon "named" bude uložený v adresári "/usr/local/sbin". Konfiguračný súbor "named.conf" sa očakáva v adresári "/etc".

Poznámka: ak inštalujete BIND zo zdrojákov (napr. preto, že balíčkové verzie neobsahujú najnovšie vlastnosti, ktoré potrebujete), nevytvorí sa štartovací skript. Preto je výhodné si tento skript skopírovať od niekoho, kto ho už má, prípadne použiť tento "postup":

  1. nainštalujte si balíčkovú verziu BIND (môže byť aj staršia, ale z toho istého radu!)
  2. skopírujte si súbor "/etc/init.d/named" (Debian: "/etc/init.d/bind9", resp. "/etc/init.d/bind")
  3. odinštalujte balíčkovú verziu BIND
  4. skompilujte a nainštalujte BIND zo zdrojákov a prekopírujte uloženú verziu štartovacieho skriptu naspäť do "/etc/init.d"
  5. upravte cesty v štartovacom skripte podľa potreby (kompilovaný BIND je štandardne uložený v "/usr/local")
  6. vytvorte symbolické linky pre jeho spúšťanie a zastavovanie (spúšťa sa vo všetkých runleveloch okrem 0, 1 a 6, zastavuje sa v runleveloch 0, 1 a 6).

8.3.2 Inštalácia z balíčkov

Stiahnite si balíčky pre váš operačný systém a nainštalujte ich. Budú to pravdepodobne balíčky nazvané "bind-XXX" a "bind-utils-XXX" (XXX predstavuje číslo verzie).

8.3.3 Štartovací skript "/etc/init.d/named", "/etc/init.d/bind9"

Ovládanie BINDu pomocou štartovacieho skriptu je jednoduché:

8.4 Príprava vyhradeného používateľa

Démon "named" sa štandardne spúšťa s právami roota a je otvorený útokom zo siete (ak má poskytovať údaje o doméne, nemôže byť chránený firewallom), čo je príliš nebezpečné, aby ste to dovolili. Našťastie, démon je napísaný tak, že sa vie po spustení prepnúť na iného používateľa, ktorý už nemá rootovské privilégiá. Tohto používateľa treba vytvoriť (nepoužívajte používateľa "nobody"!).

Poznámka: poinštalačné skripty balíčkov v niektorých distribúciách Linuxu vytvára používateľa "named" za vás! Tento fakt treba overiť kontrolou súboru "/etc/passwd". (napr. príkazom "grep named /etc/passwd")

vytvorenie skupiny a používateľa: Debian


  groupadd named
  adduser --system --disabled-login --shell /bin/false --ingroup named named
  

vytvorenie skupiny a používateľa: Mandrake


  groupadd named
  useradd -d /var/named -g named -M -s /bin/false named
  

Teraz vytvorte adresáre pre zónové súbory: "/var/named/primary" pre záznamy vášho DNS (primárneho) a v prípade, že bude váš DNS server fungovať ako sekundárny server pre inú doménu, vytvorte aj adresár "/var/named/secondary". Ďalej vytvorte adresár "/var/run/named" a zmeňte vlastníka a skupinu na "named" a "named".


  mkdir -p /var/named/primary
  mkdir /var/named/secondary
  mkdir /var/run/named
  chown named:named /var/named/secondary /var/run/named
  

8.5 Konfigurácia

BIND je nainštalovaný, nasleduje náročnejšia fáza a tou je konfigurácia. Ale táto príručka má za cieľ práve zjednodušenie tejto fázy ;-)

8.5.1 Súbor "named.conf"

Tento súbor je najdôležitejší, určuje umiestnenie zónových súborov (s údajmi o vašej doméne a adresách na tejto doméne) a mnoho parametrov pre beh démona. Umiestňuje sa väčšinou v adresári "/etc" alebo "/etc/bind", odporúčam však, aby ste ho umiestnili do adresára "/var/named/etc" (vytvorte ho, ak neexistuje) a vytvorili symbolickú linku z "/etc/named.conf":


  ln -s /var/named/etc/named.conf /etc/named.conf
  

Dôvod tejto na prvý pohľad čudnej operácie je jednoduchý - pomôže nám to pri neskoršom zabezpečovaní démona a uzatváraní v adresári "/var/named" pomocou volania "chroot()". Navyše, pri editovaní súboru môžete vďaka symbolickej linke bez problémov používať cestu "/etc/named.conf".

V konfiguračných ukážkach budeme vytvárať záznamy pre doménu "mojadomena.sk" s adresami z rozsahu 192.168.0.0/255.255.255.0. V skutočnosti ich pochopiteľne musíte nahradiť vašimi skutočnými adresami.

Nasleduje ukážka súboru "named.conf" s komentármi (v "named.conf" sa ako začiatok komentára používa dvojité lomítko (//), ako to poznáte z C++, komentár platí do konca riadku; v zónových súboroch sa ako začiatok komentára používa bodkočiarka (;), tiež platí do konca riadku).

Súbor obsahuje niekoľko direktív, ktoré sú vždy ukončené bodkočiarkou. Skupiny direktív sú ohraničené znakmi { a } (ako v programovacom jazyku C).

 // uvedeny kluc sluzi na ovladanie demona, este o nom bude rec! vytvara sa
 // pomocou programu "rndc-confgen", ale da sa pouzit aj automaticke nastavenie

key "rndc-key" {
 	algorithm hmac-md5;
 	secret "tuC4TiKfe9evXag2tLyfJQ==";
 };

 // nasledujuce nastavenie umoznuje ovladat demona iba z toho stroja, na
 // ktorom je spusteny. Pre vas staci vediet, ze na zaklade tohto nastavenia
 // funguje "/etc/init.d/named stop" a "/etc/init.d/named reload"

controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { rndc-key; };
 };

options {
// adresar, v ktorom sa nachadzaju konfiguracne subory
// vsetky relativne cesty maju zaklad v tomto adresari

        directory "/var/named/";

// subor s cislom procesu (pre ovladanie demona)
// adresar musi byt zapisovatelny pre pouzivatela, s ktoreho pravami sa spusta
// demon "named"!

        pid-file "/var/run/named/named.pid";
        auth-nxdomain yes;    

// ak vas poskytovatel umoznuje pouzit jeho DNS servery na obsluhu
// poziadaviek, ktore neviete obsluzit vy, usetrite si cas a procesor, pretoze
// svoje poziadavky 'forwardujete' na jeho DNS servery

        forwarders {
          IP_ADRESA_DNS1_SERVERA_PROVIDERA;
          IP_ADRESA_DNS2_SERVERA_PROVIDERA;
        };

// direktiva 'forward only' sposobi, ze budete forwardovat poziadavky, ktore
// neviete obsluzit, t.j. tie, ktore nemate v zonovych suboroch

        forward only;
};

// obmedzi logovanie chyb, ktore nie su dolezite
logging {
        category lame-servers { null; };
};

// adresy korenovych suborov
// TENTO SUBOR NEMENTE!

zone "." {
        type hint;
        file "named.ca";
};

// reverzny zaznam pre localhost
// TENTO SUBOR NEMENTE

zone "0.0.127.in-addr.arpa" {
        type master;
        file "named.local";
};

// zaznam pre domenu "mojadomena.sk"
// TENTO SUBOR UPRAVTE PODLA POTREBY

zone "mojadomena.sk" {
        type master;
        file "primary/mojadomena.sk.zone";
};

// reverzne zaznamy pre domenu "mojadomena.sk"
// TENTO SUBOR UPRAVTE PODLA POTREBY VZDY PRI ZMENE PREDCH. SUBORU!

zone "0.168.192.in-addr.arpa" {
        type master;
        file "primary/mojadomena.sk.reverse";

};
// takto vyzera definicia, ak je vas DNS sekundarny server pre domenu
// "inadomena.sk", ktorej primarny DNS server ma adresu 10.0.0.1
// TENTO SUBOR NEMENTE, KOPIRUJE SA Z PRIMARNEHO NAMESERVERA DANEJ DOMENY!

zone "inadomena.sk" {
          type slave;
          file "secondary/inadomena.sk.zone";
          masters { 10.0.0.1 ; };
};

8.5.2 Súbory "/etc/rndc.conf", "/etc/rndc.key"

Zmena, ktorá ma prekvapila oproti BIND 8.X.X, je nutnosť konfiguračného súboru "/etc/rndc.conf" (autori neodporúčajú aktualizovať konfiguráciu zaslaním signálu "HUP" bežiacemu procesu "named", ale funguje to). Tento umožňuje ovládanie procesu "named" z určených počítačov s nainštalovaným programom "rndc". Na ovládanie je potrebný autentifikačný kľúč (vo formáte BASE64), ktorý sa predefinuje práve v tomto konfiguračnom súbore, z ktorého ho bude čítať program "rndc".

Ja osobne používam nastavenie, ktoré mi umožní ovládať "named" iba z localhostu, pomocou skriptu "/etc/init.d/named" ("/etc/init.d/bind9"). Ak si štartovací skript pozriete, zistíte, že operácie "stop" a "reload" používajú práve "rndc".

Konfigurácia je veľmi jednoduchá. Máte dve možnosti:

  1. automatická konfigurácia: spustite program "rndc-confgen -a". vytvorí sa súbor "/etc/rndc.key", ktorý obsahuje kľúč. Nie je potrebná nijaká zmena v súboroch "/etc/rndc.conf" (netreba ho ani vytvoriť, ak neexistuje) a "/etc/named.conf".
  2. manuálna konfigurácia: ak spustíte program "rndc-confgen" bez parametrov, vypíše sa na štandardný výstup text, ktorý musíte skopírovať do súboru "/etc/rndc.conf" a komentovaná časť, ktorú musíte doplniť do súboru "/etc/named.conf" (samozrejme, musíte odstrániť komentáre). Všimnite si, že obe časti obsahujú ten istý kľúč (generuje sa náhodne). Ak chcete použiť iný ako náhodný kľúč, pozrite si manuál k príkazu "rndc.conf" a "mmencode".

Poznámka: Krátko pred napísaním časti o "chroot()" som otestoval aj automatické nastavenie a všetko vyzerá byť OK (na mojom počítači bez siete). Preto odporúčam, aby ste podľa možnosti použili automatické nastavenie.

Príklad pre manuálnu konfiguráciu:

rndc-confgen

# Start of rndc.conf
key "rndc-key" {
	algorithm hmac-md5;
	secret "tuC4TiKfe9evXag2tLyfJQ==";
};

options {
	default-key "rndc-key";
	default-server 127.0.0.1;
	default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# 	algorithm hmac-md5;
# 	secret "tuC4TiKfe9evXag2tLyfJQ==";
# };
# 
# controls {
# 	inet 127.0.0.1 port 953
# 		allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

Prekopírujte teda príslušné časti do súborov (odkomentujte ich!) a ďalší krok máte za sebou. Ako bodku za ním si zabezpečte konfiguračné súbory, ktoré obsahujú kľúč tak, aby sa k nim dostal iba používateľ v skupine "named" (nedáme mu právo vlastníka ani zápisu, iba právo čítania). Tieto operácie odporúčam uskutočniť aj vtedy, ak použijete automatickú konfiguráciu:


  chown root:named /etc/rndc* /etc/named.conf
  chmod 640 /etc/rndc* /etc/named.conf

8.5.3 Vzorový zónový súbor

$ORIGIN .
$TTL 86400      ; zivotnost zaznamu 1 den
mojadomena.sk           IN SOA  mojserver.mojadomena.sk. adresa_spravcu.mojadomena.sk. (
                                2003013101 ; serial
                                86400      ; refresh (1 day)
                                21600      ; retry (6 hours)
                                3600000    ; expire (5 weeks 6 days 16 hours)
                                3600       ; minimum (1 hour)
                                )
                        NS      mojserver.mojadomena.sk.
                        NS      inyserver.inadomena.sk.
                        MX      10 mojserver.mojadomena.sk.
$ORIGIN mojadomena.sk.
$TTL 86400      ; 1 day
mojserver       IN   A       192.168.0.1
; to iste by bolo:
; mojserver.mojadomena.sk.     IN   A 192.168.0.1

mail            IN   CNAME   mojserver
www             IN   CNAME   mojserver
ftp             IN   CNAME   mojserver
diane           IN   A       192.168.0.2

Poznámky k zónovému súboru:

Pre záznamy nasledujúce po definícii domény platí: ak nie je meno ukončené znakom ".", dopĺňa sa zaň automaticky doména, v ktorej sa nachádza. (Táto doména je určená v SOA zázname alebo direktívou "$ORIGIN".) To umožňuje lepší prehľad v konfiguračnom súbore, pretože neopakujete stále meno domény. Dajte si však pozor, aby ste všetky plne kvalifikované mená serverov ukončovali bodkou, inak sa dočkáte prekvapení.

Príklad chyby (adresa v zázname "NS" nie je ukončená bodkou):

$ORIGIN .
$TTL 86400      ; zivotnost zaznamu 1 den
mojadomena.sk           IN SOA  mojserver.mojadomena.sk. adresa_spravcu.mojadomena.sk. (
                                2003013101 ; serial
                                86400      ; refresh (1 day)
                                21600      ; retry (6 hours)
                                3600000    ; expire (5 weeks 6 days 16 hours)
                                3600       ; minimum (1 hour)
                                )
                        NS      mojserver.mojadomena.sk
...

V tomto chybnom príklade záznam "mojserver.mojadomena.sk" nie je ukončený bodkou, takže to znamená, že bude mať hodnotu "mojserver.mojadomena.sk.mojadomena.sk", čo je samozrejme chyba!!

8.5.4 Vzorový reverzný zónový súbor

Pri vytváraní reverzných zónových súborov postupujeme rovnako ako pri vytváraní priamych zónových súborov. Definujeme špeciálnu doménu "0.168.192.in-addr.arpa" (všimnite si, že obsahuje jednotlivé oktety z IP adries, ktoré používame, ale v opačnom poradí!) a namiesto záznamov "A" použijeme záznamy "PTR".

$ORIGIN .
$TTL 86400      ; 1 day
0.168.192.in-addr.arpa IN SOA  mojserver.mojadomena.sk. adresa_spravcu.mojadomena. (
                                2003013101 ; serial
                                28800      ; refresh (8 hours)
                                14400      ; retry (4 hours)
                                3600000    ; expire (5 weeks 6 days 16 hours)
                                86400      ; minimum (1 day)
                                )
                        NS      mojserver.mojadomena.sk.
$ORIGIN 0.168.192.in-addr.arpa.
1                IN   PTR     mojserver.mojadomena.sk.
2                IN   PTR     diane.mojadomena.sk.

8.5.5 Kontrola zónových súborov

Pri testovaní konfiguračných súborov vám pomôže aj program "named-checkzone". Spúšťa sa s parametrami:

named-checkzone meno_zony cesta_k_zonovemu_suboru

čiže príkazy


named-checkzone mojadomena.sk /var/named/primary/mojadomena.sk.zone
named-checkzone 0.168.192.in-addr.arpa /var/named/primary/mojadomena.sk.reverse

otestujú konfiguráciu vašich zónových súborov uvedených v týchto príkladoch.

8.5.6 Súbor "/etc/resolv.conf"

Aby procesy na vašom serveri vôbec používal váš vlastný DNS server, treba upraviť súbor "/etc/resolv.conf" takto:

search mojadomena.sk
nameserver 127.0.0.1

8.6 Bezpečnosť

BIND bol v minulosti často terčom útokov, pretože štandardne beží s právami roota a je otvorený do siete. Aj môj server bol hacknutý cez starý a neaktualizovaný BIND (to bolo ešte v čase, keď som o bezpečnosti nič nevedel). Preto je dôležité sledovať, či neboli vydané aktualizované verzie. V tomto veľmi pomáhajú maling listy ako BugTraq, prípadne mailing listy venované bezpečnosti jednotlivých distribúcií. Informácie o známych dierach sa tiež objavujú na stránkach distribúcií (Debian Security) a samozrejme, na stránke autorov programu BIND.

Pre bezpečnosť DNS servera môžete však urobiť ešte viac!

8.6.1 Spúšťanie s právami bežného používateľa

Ako som už spomínal, štandardne BIND beží s právami používateľa "root". Prišiel čas na zmenu.

Na začiatku sme vytvorili používateľa a skupinu s menom "named". Teraz je čas, aby sme ich využili!

Démon "named" má parameter "-u pouzivatel" (vo verzii 8.X.X: "-u pouzivatel -g skupina"), ktorý mu umožňuje zmeniť po štarte svoje privilégiá a bežať s právami daného používateľa. Preto treba upraviť štartovací skript a pridať tento parameter do cesty. Niektoré distribúcie vám to ešte uľahčia:

Poznámka: pre BIND 8.X.X definujte aj parameter "-g skupina"; verzia 9.X.X použije pre používateľa, s ktorého právami sa spustí, aj jeho primárnu skupinu, ktorú sme nastavili ako "named".

Ak je váš DNS server sekundárnym serverom pre inú doménu, bude vytvárať (kopírovať od primárneho DNS servera) na disku zónové súbory. Najprv však potrebuje právo zápisu do adresára, kde sa tieto zónové súbory majú nachádzať. Preto sme na tieto účely vytvorili adresár "/var/named/secondary" s vlastníkom "named" a skupinou "named".

8.6.2 Spúšťanie démona vo vyhradenom adresári (chroot)

Veľmi dobrým mechanizmom zabezpečovania služieb, ktoré počúvajú na sieťových portoch, je vytváranie vyhradených adresárov a spúšťanie procesov v týchto adresároch. Pre daného démona to znamená, že po jeho spustení sa uzavrie vo vybranom adresári pomocou systémového volania "chroot()" a tento adresár nijakým spôsobom nemôže opustiť. Na to, aby to stopercentne fungovalo, proces nesmie bežať s rootovskými právami. Je tiež ideálne, keď démon použitie vyhradeného adresára priamo umožňuje. Všetko toto spĺňa BIND.

Na začiatok si treba uvedomiť, že vyhradený adresár nahradí procesu koreňový adresár ("/") a preto všetky absolútne cesty budú platiť v rámci vyhradeného adresára. Ak je napr. vyhradeným adresárom "/var/named", cesta "/etc/passwd" znamená "/var/named/etc/passwd". V praxi to znamená, že proces sa nielenže nedostane k súborom mimo vyhradeného adresára, ale aj to, že mu potrebné súbory musíte do vyhradeného adresára nakopírovať.

Zoznam súborov v adresári "/var/named" pred našimi úpravami:

[vix@hudson /var/named]$ ls -R
    
.:
etc/

./etc:
named.ca  named.conf  named.local  primary/

./primary:
mojadomena.sk.zone
mojadomena.sk.reversed

8.6.2.1 Vytvorenie adresárovej hierarchie

Keďže proces "named" o nejakom vyhradenom adresári ani len netuší, treba zabezpečiť, že všetky súbory nájde na miestach, ktoré zodpovedajú pôvodnému umiestneniu. Je to ako keby sme pred cestu ku každému potrebnému súboru vložili cestu k vyhradenému adresáru ("/var/named"). vytvoríme teda napr. adresár "/var/named/dev" simulujúci adresár "/dev".

Adresár "/var/named/etc" som odporúčal vytvoriť už pri inštalovaní BIND-a, takže ho teraz už vytvárať nebudeme.

Pred nasledujúcimi zmenami je žiadúce, aby proces "named" nebežal, takže ho zastavte príkazom "/etc/init.d/named stop".

V adresári "/var/named" zadajte príkazy:


cd /var/named
mkdir dev
mkdir -p var/named/primary
mkdir -p var/named/run/named
chown named:named var/named/run/named

8.6.2.2 Prekopírovanie systémových súborov

V adresári "/var/named" zadajte príkazy (predpokladám, že používate automaticky vygenerovaný súbor "/etc/rndc.key"):


cp /etc/localtime /var/named/etc/
mv /etc/rndc.key /var/named/etc
ln -s /var/named/etc/rndc.key /etc/rndc.key
chgrp named /var/named/etc/rndc.key
chmod g+r /var/named/etc/rndc.key

8.6.2.3 Prekopírovanie zónových súborov

BIND bude hľadať zónové súbory tam, kde predtým, teda v adresári "/var/named/". Lenže toto miesto je v skutočnosti v adresári "/var/named/var/named/", musíte teda súbory prekopírovať (presunúť):


mv /var/named/named.ca /var/named/var/named
mv /var/named/named.local /var/named/var/named
mv /var/named/primary/mojadomena.sk.zone /var/named/var/named/primary
mv /var/named/primary/mojadomena.sk.reverse /var/named/var/named/primary

8.6.2.4 Vytvorenie špeciálnych zariadení

V adresári "/var/named/dev" treba vytvoriť špeciálne zariadenia "null" a "random" (kópie zariadení "/dev/null" a "/dev/random" - nemožno ich však skopírovať!!!):


cd /var/named/dev
mknod -m 666 /var/named/dev/null c 1 3
mknod -m 644 /var/named/dev/random c 1 8

Pozor! Ak je adresár "/var" pripojený s atribútom "nodev", nebude možné vytvoriť systémové zariadenie! Budete tento atribút musieť odstránit ("/etc/fstab") a opätovne pripojiť súborový systém "/var" príkazom "mount /var -o remount".

8.6.2.5 Konfigurácia "syslogd"

Aby ste mohli používať program "syslogd" na logovanie správ procesu "named", používa sa socket, ktorý sa vytvorí v adresári "/dev/log". Pomocou tohto socketu komunikujú programy so syslogom. V našom prípade vyhradeného adresára treba vytvoriť "/var/named/dev/log" - nevytvoríte ho však vy, ale sám "syslogd". Treba ho najprv prekonfigurovať - zabezpečiť jeho spúšťanie s parametrom "-a /var/named/dev/log". Najjednoduchšie je upraviť štartovací skript "/etc/init.d/syslogd", môžete však použiť aj konfiguračné súbory typické pre niektoré distribúcie. V Mandrake je to súbor "/etc/sysconfig/syslog", kde treba upraviť riadok:

SYSLOGD_OPTIONS="-m 0 -a /var/named/dev/log"

Pre distribúciu Debian treba upraviť priamo štartovací skript "/etc/init.d/sysklogd", konkrétne riadok:

SYSLOGD="-a /var/named/dev/log"

čo je, ako sami vidíte, celkom analogický postup.

Samozrejme, po zmene treba reštartovať "syslogd" spustením "/etc/init.d/syslogd restart". Ak ste postupovali podľa návodu, v adresári "/var/named/dev" by sa mal vytvoriť špeciálny súbor (socket) "log".

8.6.2.6 Úprava štartovacieho skriptu "/etc/init.d/named"

Posledná vec je zmena štartovacieho skriptu. Treba zabezpečiť, aby sa "named" spúšťal s parametrom "-t /var/named", ktorý určuje vyhradený adresár. Môžete to opäť urobiť priamo v skripte, alebo v konfiguračných súboroch pre jednotlivé distribúcie.

Pre Mandrake je to súbor "/etc/sysconfig/named", premenná "ROOTDIR". Túto premennú nastavte na

ROOTDIR="/var/named"

Pre distribúciu Debian doplňte do premennej "OPTS" v štartovacom skripte "/etc/init.d/bind9" hodnotu:

OPTS="-t /var/named"

Výpis adresára "/var/named" po našich úpravách (pripravený na "chroot()"):

[root@hudson ~]# ls -laR /var/named

/var/named:
total 5
drwxr-xr-x    5 root     root        1024 Feb  5 21:20 ./
drwxr-xr-x   19 root     root         1024 Jan 31 19:27 ../
drwxr-xr-x    2 root     root         1024 Feb  8 11:55 dev/
drwxr-xr-x    2 root     root         1024 Feb  5 21:24 etc/
drwxr-xr-x    4 root     root         1024 Feb  5 21:21 var/

/var/named/dev:
total 2
drwxr-xr-x    2 root     root         1024 Feb  8 11:55 ./
drwxr-xr-x    5 root     root         1024 Feb  5 21:20 ../
srw-rw-rw-    1 root     root            0 Feb  8 11:55 log=
crw-rw-rw-    1 root     root       1,   3 Feb  5 21:15 null
crw-r--r--    1 root     root       1,   8 Feb  5 21:22 random

/var/named/etc:
total 5
drwxr-xr-x    2 root     root         1024 Feb  5 21:24 ./
drwxr-xr-x    5 root     root         1024 Feb  5 21:20 ../
-rw-r--r--    1 root     root          806 Feb  5 21:24 localtime
-rw-r-----    1 root     named         329 Feb  5 21:09 named.conf
-rw-r-----    1 root     named          77 Feb  5 21:21 rndc.key

/var/named/var:
total 4
drwxr-xr-x    4 root     root         1024 Feb  5 21:21 ./
drwxr-xr-x    5 root     root         1024 Feb  5 21:20 ../
drwxr-xr-x    3 root     root         1024 Feb  5 21:19 named/
drwxr-xr-x    3 root     root         1024 Feb  5 21:20 run/

/var/named/var/named:
total 7
drwxr-xr-x    3 root     root         1024 Feb  5 21:19 ./
drwxr-xr-x    4 root     root         1024 Feb  5 21:21 ../
-rw-r--r--    1 root     root         2769 Feb  5 21:19 named.ca
-rw-r--r--    1 root     root          436 Feb  5 21:19 named.local
drwxr-xr-x    2 root     root         1024 Feb  5 21:23 primary/

/var/named/var/named/primary:
total 4
drwxr-xr-x    2 root     root         1024 Feb  5 21:23 ./
drwxr-xr-x    3 root     root         1024 Feb  5 21:19 ../
-rw-r--r--    1 root     root          402 Feb  5 21:23 mojadomena.sk.zone
-rw-r--r--    1 root     root          402 Feb  5 21:23 mojadomena.sk.reverse

/var/named/var/run:
total 3
drwxr-xr-x    3 root     root         1024 Feb  5 21:20 ./
drwxr-xr-x    4 root     root         1024 Feb  5 21:21 ../
drwxr-xr-x    2 named    named        1024 Feb  8 11:55 named/

/var/named/var/run/named:
total 3
drwxr-xr-x    2 named    named        1024 Feb  8 11:55 ./
drwxr-xr-x    3 root     root         1024 Feb  5 21:20 ../
-rw-r--r--    1 named    named           4 Feb  8 11:55 named.pid

Teraz si v jednom okne spustite "tail -f /var/log/syslog" na zobrazovanie súboru "/var/log/syslog" a v druhom okne spustite štartovací skript "/etc/init.d/named start".

Mali by ste vidieť niečo takéto:

Feb 12 21:34:02 hudson named: named startup succeeded
Feb 12 21:34:02 hudson named[977]: starting BIND 9.2.1 -u named -t /var/named
Feb 12 21:34:02 hudson named[977]: using 1 CPU
Feb 12 21:34:03 hudson named[986]: loading configuration from '/etc/named.conf'
Feb 12 21:34:03 hudson named[986]: no IPv6 interfaces found
Feb 12 21:34:03 hudson named[986]: listening on IPv4 interface lo, 127.0.0.1#53
Feb 12 21:34:03 hudson named[986]: listening on IPv4 interface eth0, 10.0.0.1#53

Ak nevidíte žiadne chyby, všetko je OK. Otestujte funkčnosť DNS servera niekoľkými príkazmi "host", ako je to uvedené v nasledujúcej kapitole.

Ak vidíte chyby a démon "named" sa nespustil, podľa chybového hlásenia by ste mali byť schopní určiť problém. Pravdepodobne ste neuskutočnili niektorý z krokov, popísaných vyššie. Vždy máte možnosť vrátiť sa späť (inverziou krokov, ktoré ste urobili, najmä pokiaľ ide o presun konfiguračných súborov a o symbolické linky z adresárov do "/etc").

Ak sa vám postup zdal príliš zložitý, mali by ste vedieť, že pri verzii BIND 8.X.X to bolo ešte komplikovanejšie: do vyhradeného adresára bolo potrebné skopírovať aj knižnice a programy patriace k BIND-u a to po každej aktualizácii balíčka BIND alebo knižníc.

TODO: Špeciality - 2 DNS servery na jednom serveri (Intranet + Internet DNS) alebo implementácia tohto istého pomocou jedného DNS

8.7 Používanie utilít na prácu s DNS

Medzi najpoužívanejšie programy na overovanie funkčnosti DNS a zisťovanie jeho záznamov patria staručký "nslookup" a novšie "host" a "dig". Program "nslookup" je označený ako "deprecated" a nemali by ste ho používať, pokiaľ máte možnosť použiť niektorý z jeho novších variantov.

8.7.1 Program "host"

Program "host" je klientský program na komunikáciu s DNS serverom a umožňuje prístup k záznamov v DNS. Jeho použitie (pre kompletný manuál pozri "man host"):

host [-a] [-t typ_zaznamu] meno [server]

Parametre:

Príklady:

host www.vazka.sk
zistí IP adresu pre doménové meno "www.vazka.sk"
host 195.20.166.130
zistí doménové meno pre IP adresu "195.20.166.130"
host -t mx vazka.sk
zistí MX záznam pre doménu "vazka.sk"
host -t ns vazka.sk server.example.com
požiada server "server.example.com" o zistenie NS záznamu pre doménu "vazka.sk"

8.7.2 Program "dig"

Program "dig" je zo všetkých troch spomínaných utilít najnovší a má najviac možností, jeho výstup však môže začiatočníkom spôsobovať mierne problémy (treba si zvyknúť, nie je to zasa nič zložité, pretože výstup pripomína zónové súbory). Najjednoduchšie použitie príkazu má tvar:

dig [@server] meno typ_zaznamu

alebo

dig [@server] meno -t typ_zaznamu

Parametre:

Príklady:

dig www.vazka.sk
zistí IP adresu pre doménové meno "www.vazka.sk"
dig -x 195.20.166.130, resp. dig 130.166.20.195.in-addr.arpa
zistí doménové meno pre IP adresu "195.20.166.130"
dig -t mx vazka.sk
zistí MX záznam pre doménu "vazka.sk"
dig -t ns vazka.sk @server.example.com
požiada server "server.example.com" o zistenie NS záznamu pre doménu "vazka.sk"