DNS

Roman Stoklasa


Obsah:
 


DNS ako systém

DNS - Domain Name Sysem - vznikol na základe potreby prevodu IP adries počítačov v internete na ich (zrozumiteľné) názvy.

V počiatkoch sa na prevod mien počítačov na ich adresy v UNIXových OS používal súbor /etc/hosts. Udržovať takto údaje o počítačoch lokálne malo zmysel len pre malý okruh používaných mien, no po celosvetovom rozšírení internetu sa tento spôsob stal prakticky nepoužiteľný (v celosvetovom merítku). A tak vzniklo DNS... :-)

Súbor /etc/hosts sa stále môže používať pre statické nastavenie názvov/aliasov počítačov. Či sa primárne použije zadaný názov v /etc/hosts alebo či sa použije DNS na preklad adresy sa nastavuje v súbore /etc/nsswitch.conf.

Keďže prevažná väčšina počítačov v internete sa nenachádza samostatne, ale patria do istých skupín (sietí/podsietí), DNS je navrnuté ako stromová štruktúra, kde každý uzol (doména) upresní identifikáciu počítača. Keďže systém DNS tvorí strom, musí mať koreň - tým je "koreňová doména" označená ".". V súčastnosti existuje 13 DNS serverov pre koreňovú doménu označených A - M. IP adresy týchto DNS servery sú všeobecne známe. Konfiguračný súbor pre BIND sa dá stiahnuť napr. tu: ftp://internic.net/domain/named.root.
Pod koreňovou doménou sa nachádzajú tzv. Top-Level Domain - sú tvorené národnými domény ako napr. "sk", "cz", "uk", alebo nenárodné ako napr. "com", "net", "edu", "org",... Tie následne obsahujú údaje o svojich subdoménach atd.

Každá doména musí mať práve jeden primárny DNS server (autoritatívny) a môže mať niekoľko sekundárnych serverov (ktoré slúžia ako zálohy primárneho servera a poskytujú tie isté údaje).

Resolver

Resolverom sa nazýva sada knižničných funkcií, ktoré tvoria "klientskú" časť DNS systému.
Chovanie Resolvera sa typicky nastavuje v súbore /etc/resolv.conf a tiež v /etc/nsswitch.conf.

Možnosti v /etc/resolv.conf

DNS servery

DNS server je program, ktorý poskytuje klientom odpoveď na ich dotazy. DNS servery sa pri zodpovedaní na dotaz môžu chovať dvomi spôsobmi:

DNS serveri medzi sebou komunikujú primárne protokolom UDP na porte 53; pokiaľ je ale dotaz/odpoveď príliš veľký, je použitý protokol TCP (tiež na porte 53).

Typy záznamov

Typy záznamov, ako sú popísané v RFC1035 (http://www.ietf.org/rfc/rfc1035.txt):
Základnou jednotkou sú tzv. RR - Resource Records.

Formát RR: (citované z http://www.ietf.org/rfc/rfc1035.txt)

                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                                               |
    /                                               /
    /                      NAME                     /
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TYPE                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     CLASS                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TTL                      |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                   RDLENGTH                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
    /                     RDATA                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

where:

NAME            an owner name, i.e., the name of the node to which this
                resource record pertains.

TYPE            two octets containing one of the RR TYPE codes.

CLASS           two octets containing one of the RR CLASS codes.

TTL             a 32 bit signed integer that specifies the time interval
                that the resource record may be cached before the source
                of the information should again be consulted.  Zero
                values are interpreted to mean that the RR can only be
                used for the transaction in progress, and should not be
                cached.  For example, SOA records are always distributed
                with a zero TTL to prohibit caching.  Zero values can
                also be used for extremely volatile data.

RDLENGTH        an unsigned 16 bit integer that specifies the length in
                octets of the RDATA field.

RDATA           a variable length string of octets that describes the
                resource.  The format of this information varies
                according to the TYPE and CLASS of the resource record.
				

TYPE            value and meaning

A               1 a host address
NS              2 an authoritative name server
MD              3 a mail destination (Obsolete - use MX)
MF              4 a mail forwarder (Obsolete - use MX)
CNAME           5 the canonical name for an alias
SOA             6 marks the start of a zone of authority
MB              7 a mailbox domain name (EXPERIMENTAL)
MG              8 a mail group member (EXPERIMENTAL)
MR              9 a mail rename domain name (EXPERIMENTAL)
NULL            10 a null RR (EXPERIMENTAL)
WKS             11 a well known service description
PTR             12 a domain name pointer
HINFO           13 host information
MINFO           14 mailbox or mail list information
MX              15 mail exchange
TXT             16 text strings
				


Toto je všeobecný formát záznamov v DNS systéme. Každý DNS server však môže mať inú syntax pri zápise týchto údajov do konfiguračných súborov.

BIND - Berkeley Internet Name Domain

BIND je asi najrozšírenejším DNS serverom. Je naprogramovaný ako monolitický a teda obsahuje mimo iné samotný server, resolver (pre riešenie rekurzívnych dotazov), cache a tiež nástroje pre overenie správnej činnosti DNS servera.

Schéma konfiguračných súborov serveru BIND je mnohokrát popísaná, preto ju nebudem opisovať, ale uvediem odkazy na rôzne zdroje:

Popis, ako rozbehat BIND v chrootovanom prostredí je podrobne popísané napr. tu: http://www.linuxsecurity.com/docs/LDP/Chroot-BIND-HOWTO.html, a zhrnuté napr. v tých vyššie uvedených referátoch.

BIND - the Buggy Internet Name Daemon ?

BIND je aj nechvalne známy kvôli svojím chybám - pretekaniu bufferov, ktoré tvorili veľké bezpečnostné diery. Možno aj kvôli znechuteniu nad serverom BIND vznikol server djbdns, ktorý naprogramoval D. J. Bernstein.

djbdns

djbdns nie je jeden program - démon, ale je sadou nástrojov pre prístup k systému DNS. Základnými časťami sú:


djbdns je naprogramovaný s prvoradým ohľadom na bezpečnosť, potom na efektívnosť.

Keďže rôznych variánt popisov a postupov pre inštaláciu a nastavenie BIND-u je mnoho, ale nestretol som sa s ani jedným popisom servera djbdns, tak by som sa o to pokúsil.

Inštalácia

Kompletný popis od autora je možné nájsť na http://cr.yp.to/djbdns/install.html.
V skratke:

  1. Je treba mať nainštalované daemontools 0.70 alebo novšie a tiež ucspi-tcp
  2. Stiahnuť a rozbaliť zdrojáky - djbdns-1.05.tar.gz
  3. skompilovať:
    	 make 
    
    prípadne:
         echo gcc -O2 -include /usr/include/errno.h > conf-cc
         make 
    
  4. Ako root nainštalovať:
    	 make setup check
    

Spustenie DNS servera

djbdns beží natívne v chroot prostredí, takže sa netreba starať o žiadne extra úpravy a konfigurácie.

  1. ako root vytvoriť uživateľov Gtinydns a Gdnslog.
  2. ako root vytvoriť /etc/tinydns adresár služby a nastavit IP adresu DNS služby:
    	 tinydns-conf Gtinydns Gdnslog /etc/tinydns 1.8.7.200	
    	

    Poznámka - táto IP adresa nesmie byť taká istá ako stresa DNS cache slžby. Tiež musí mať voľný port 53.
  3. Overiť správnosť behu služby:
         ln -s /etc/tinydns /service
         sleep 5
         svstat /service/tinydns
    	 
  4. Nastaviť DNS dáta - viz. ďalej.

Nastavenie DNS záznamov

  1. Získanie delegácie pre "našu" doménu od nadradeného DNS servera. Inými slovami - nadradený DNS server (napr. TLD DNS server) musí vedieť o našej doméne a musí jej priradiť IP adresu našeho nameservera.
  2. Musíme pridať záznamy nášmu DNS serveru, aby on sám vedel, že je delegovaný pre našu doménu - program add-ns

    Napr.:
         cd /service/tinydns/root
         ./add-ns heaven.af.mil 1.8.7.200
         ./add-ns heaven.af.mil 1.8.7.201
         ./add-ns 7.8.1.in-addr.arpa 1.8.7.200
         ./add-ns 7.8.1.in-addr.arpa 1.8.7.201
         make		
    		
    Pozn.: make na konci je nutný, aby sa zmeny prejavili do databáze, s ktorou tinydns server práve pracuje.
  3. Pridanie záznamov pre názvy počítačov, resp. pre názvy služieb (www/ftp/pop/...) : add-host, add-alias

    Príklad: priradenie názvov lion, tiger, bear počítačom pre príslušné IP adresy + priradenie aliasov pre služby www a ftp:
         cd /service/tinydns/root
         ./add-host lion.heaven.af.mil 1.8.7.4
         ./add-host tiger.heaven.af.mil 1.8.7.5
         ./add-host bear.heaven.af.mil 1.8.7.6
         ./add-alias www.heaven.af.mil 1.8.7.4
         ./add-alias ftp.heaven.af.mil 1.8.7.4
         make		
    		
  4. Priradenie MX záznamov: add-mx

    Príklad:
         cd /service/tinydns/root
         ./add-mx heaven.af.mil 1.8.7.193
         make
    		
  5. Delegovanie synovského DNS servera pre nejakú subdoménu - program add-childns.

    Príklad:
         cd /service/tinydns/root
         ./add-childns elysium.heaven.af.mil 1.2.3.144
         make		
    		

Overenie správnosti konfigurácie

  1. Overenie, či sa nachádzajú správne záznamy v súbore /service/tinydns/root/data Napr. by niektorý riadok mohol vyzerať takto:
     +www.heaven.af.mil:1.8.7.4		
    		
    Riadky môžu začínať rôznym znakom podľa toho, o aký záznam sa jedná (napr. '=' - meno počítača; '+' - alias pre službu; '@' - MX záznam; '&' - delegovaný DNS server; '.' - ?delegácia domény? )
  2. Použiť tinydns-get pre overenie dat v aktualnej databazi:
         cd /service/tinydns/root
         tinydns-get a www.heaven.af.mil		
    		
  3. Overiť, či je DNS serveru priradená niektorá z IP adries počítača:
         cat /service/tinydns/env/IP
         netstat -n -i		
    		
  4. Overiť status služby tinydns:
         svstat /service/tinydns		
    		
  5. Skúsiť sa opýtať priamo tinydns na vlastné adresy - pomocou dnsq :
         dnsq a www.heaven.af.mil 1.8.7.200
         dnsq a www.heaven.af.mil 1.8.7.201		
    		
  6. Skúsiť sa opýtať DNS cache - pomocou dnsqr :
         dnsqr a www.heaven.af.mil		
    		
    Ak dnscache nebude schopný nájsť adresu, problém bude takmer určite v nadradenom DNS serveri, ktorý nedelegoval náš tinydns server pre našu doménu. Poslednou záchranou by mohol byť výpis z dnstrace, prípadne výpis z logu /service/dnscache/log/main/current.
Tento návod je v originálnom znení na adrese http://cr.yp.to/djbdns/run-server.html.
Ďalšie užitočné návody a postupy ako na tinydns sa dajú nájsť napr. tu: http://cr.yp.to/djbdns.html

Zdroje: