Služba prekladu doménových mien (DNS)

Služba prekladu doménových mien (DNS - Domain Name Service) je internetová služba, ktorá ku sebe navzájom priraďuje IP adresy a úplne kvalifikované doménové mená (FQDN - fully qualified domain names). V tomto smere nám DNS uľahčuje to, aby sme si nemuseli pamätať číselné  IP adresy. Počítače, na ktorých je spustená služba DNS sa nazývajú menné servery. Systém Ubuntu je vybavený programom BIND (Berkley Internet Naming Daemon), ktorý je najčastejšie používaný na poskytovanie tejto služby v systémoch Linux.

Inštalácia DNS

Ak chceme nainštalovať dns zadáme do príkazového riadka nasledujúci príkaz:

sudo apt-get install bind9

Veľmi užitočný balík na testovanie a riešenie problémov s DNS je balík dnsutils. Ak chceme nainštalovať balík dnsutils zadáme toto:

sudo apt-get install dnsutils

Konfigurácia DNS

Je mnoho spôsobov, akými sa dá nakonfigurovať BIND9. Najčastejšie sa jedná o konfiguráciu v podobe menného servera s dočasným úložiskom mien (caching nameserver), primárneho hlavného menného servera (primary master) a sekundárneho hlavného menného servera (secondary master).

  • V prípade servera s dočasným úložiskom mien BIND9 nájde odpoveď na požiadavku a zapamätá si ju a poskytuje ju pri ďalších požiadavkách.

  • Ako primárny hlavný menný server BIND9 číta zo súboru dáta o staniciach zóny a je autoritatívnym serverom pre celú zónu.

  • Sekundárny hlavný menný server BIND9 získava dáta o zóne z iného autoritatívneho menného servera zóny.

Prehľad

Konfiguračné súbory DNS sú uložené v priečinku /etc/bind. Hlavný konfiguračný súbor je /etc/bind/named.conf.

Riadok include hovorí o súbore, ktorý obsahuje nastavenia DNS. Riadok directory v súbore /etc/bind/named.conf.options hovorí o priečinku, v ktorom bude DNS hľadať súbory. Všetky súbory, ktoré BIND používa, sú zapísané pomocou relatívnej cesty ku tomuto priečinku.

V súbore /etc/bind/db.root sú zapísané hlavné koreňové menné servery z celého sveta. Zoznam serverov sa mení, preto je potrebné súbor /etc/bind/db.root občas aktualizovať. To sa zvyčajne udeje pri aktualizácii balíka bind9. Riadky zone definujú hlavný server, ktorého nastavenia sú uložené v súbore definovanom riadkom file.

Je možné konfigurovať server aj tak, aby bol súčasne menným serverom s dočasným úložiskom mien, primárnym hlavným serverom a sekundárnym hlavným serverom. Server môže poskytovať štartovaciu autoritu - Start of Authority (SOA) pre jednu zónu a zároveň poskytovať sekundárnu službu inej zóne. Súčasne môže všetkým staniciam v lokálnej sieti LAN poskytovať službu dočasného úložiska mien.

Menný server s dočasným úložiskom

Predvolená konfigurácia je nastavená na server s dočasným úložiskom. Všetko čo potrebujeme urobiť, je pridanie IP adries DNS serverov, ktoré získame od poskytovateľa internetového pripojenia. V súbore /etc/bind/named.conf.options odpoznámkujeme a zmeníme nasledujúce nastavenie:

forwarders {
1.2.3.4;
5.6.7.8;
};
[Note]

Adresy 1.2.3.4 a 5.6.7.8 nahraďte IP adresami menných serverov od poskytovateľa internetového spojenia.

Teraz reštartujeme DNS server, aby sa zmeny uplatnili. Do príkazového riadka zadáme:

sudo /etc/init.d/bind9 restart

Informácie o tom, ako nastavenie otestujeme, sa nachádzajú v časti “dig” .

Primárny hlavný menný server

V tejto časti BIND9 nastavíme ako primárny hlavný server pre doménu nieco.sk. Jednoducho nahradíme nieco.sk naším FQDN (úplným kvalifikovaným menom domény).

Priamy zónový súbor

Ak chceme v BIND9 vytvoriť DNS zónu a premeniť ho na primárny hlavný menný server, najskôr upravíme súbor /etc/bind/named.conf.local:

zone "nieco.sk" {
type master;
file "/etc/bind/db.nieco.sk";
};

Teraz použijeme vzorový zónový súbor ako šablónu na vytvorenie nášho súboru /etc/bind/db.nieco.sk:

sudo cp /etc/bind/db.local /etc/bind/db.nieco.sk

Otvoríme nový zónový súbor /etc/bind/db.nieco.sk, zmeníme localhost. na FQDN nášho servera spolu s bodkou "." na konci. Zmeníme 127.0.0.1 na IP adresu menného servera a root.localhost na platnú emailovú adresu, ale miesto znaku zavináč "@" použijeme bodku "." a bodku "." necháme aj na konci adresy.

Vytvoríme tiež A záznam pre ns.nieco.sk. - adresu menného servera:

;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA ns.nieco.sk. spravca.nieco.sk. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.nieco.sk.
@ IN A 127.0.0.1
@ IN AAAA ::1
ns IN A 192.168.1.10

Číslo označené poznámkou Serial je potrebné zvýšiť po každej úprave zónového súboru. Ak urobíme viacero zmien pred tým, ako reštartujeme  BIND9, stačí číslo Serial zvýšiť len raz.

Teraz stačí pridať DNS záznamy na koniec zónového súboru. Viac informácii o pridávaní záznamov sa nachádza v časti “Najčastejšie typy záznamov”.

[Note]

Mnoho administrátorov používa v čísle Serial dátum zmeny súboru, napríklad 0107200700 čo predstavuje ddmmyyyyss (kde ss je poradové číslo zmeny v danom dni)

Po vykonaní zmien v zónovom súbore, je potrebné BIND9 reštartovať, aby sa zmeny prejavili:

sudo /etc/init.d/bind9 restart

Reverzný zónový súbor

Teraz keď sme nastavili preklad mien na IP Adresy, je potrebné zadefinovať aj reverznú zónu. Reverzná zóna umožňuje systému DNS prekladať adresy na mená.

Otvoríme súbor /etc/bind/named.conf.local a pridáme nasledujúce nastavenia:

zone "1.168.192.in-addr.arpa" {
type master;
notify no;
file "/etc/bind/db.192";
};
[Note]

Čísla 1.168.192 prvými troma oktetmi adresy siete, ktorú používate. Tiež podľa toho upravte aj meno zónového súboru /etc/bind/db.192. Na konci by mal byť posledný oktet siete, ktorú používate.

Teraz vytvoríme súbor /etc/bind/db.192 podľa vzorového súboru:

sudo cp /etc/bind/db.127 /etc/bind/db.192

Teraz súbor /etc/bind/db.192 otvoríme a zmeníme tie isté nastavenia ako v súbore /etc/bind/db.nieco.sk:

;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA ns.nieco.sk. spravca.nieco.sk. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.
10 IN PTR ns.nieco.sk.

Číslo Serial v reverznej zóne je potrebné tiež zvýšiť pri každej zmene. Pre každý A záznam, ktorý sme vytvorili /etc/bind/db.nieco.sk je potrebné vytvoriť PTR záznam v /etc/bind/db.192.

Po dokončení úpravy reverzného zónového súboru reštartujeme BIND9:

sudo /etc/init.d/bind9 restart

Sekundárny hlavný menný server

Ak sme už nakonfigurovali primárny hlavný server, môžeme nakonfigurovať aj sekundárny hlavný server, ktorý zaistí dostupnosť menného servera v prípade, že sa primárny server stane nedostupným.

Najskôr na primárnom serveri povolíme prenos zóny. Pridáme nastavenie allow-transfer do definície priamej aj reverznej zóny v súbore /etc/bind/named.conf.local:

zone "nieco.sk" {
type master;
file "/etc/bind/db.nieco.sk";
allow-transfer { 192.168.1.11; };
};

zone "1.168.192.in-addr.arpa" {
type master;
notify no;
file "/etc/bind/db.192";
allow-transfer { 192.168.1.11; };
};
[Note]

Adresu 192.168.1.11 nahraďte IP Adresou sekundárneho menného servera.

Potom na sekundárnom servery nainštalujeme balík bind9 rovnaký spôsobom ako na primárnom serveri. Otvoríme súbor /etc/bind/named.conf.local a pridáme nasledujúce deklarácie priamej a reverznej zóny:

zone "nieco.sk" {
type slave;
file "/var/cache/bind/db.nieco.sk";
masters { 192.168.1.10; };
};

zone "1.168.192.in-addr.arpa" {
type slave;
file "/var/cache/bind/db.192";
masters { 192.168.1.10; };
};
[Note]

Adresu 192.168.1.10 nahraďte IP adresou primárneho menného servera.

Reštartujeme BIND9 na sekundárnom serveri:

sudo /etc/init.d/bind9 restart

V súbore /var/log/syslog by sme mali vidieť niečo podobné tomuto:

slave zone "nieco.sk" (IN) loaded (serial 6)
slave zone "100.18.172.in-addr.arpa" (IN) loaded (serial 3)
[Note]

Poznámka: Zóna sa prenesie iba vtedy, ak číslo Serial na primárnom serveri je väčšie ako na sekundárnom.

[Note]

Predvolený priečinok pre súbory neautoritatívnej zóny je /var/cache/bind/. Tento priečinok je tiež nastavený v AppArmor tak, aby do neho démon named mohol zapisovať. Viac informácií o AppArmor sa nachádza v časti “AppArmor”.

Riešenie problémov s DNS

Táto časť hovorí o spôsoboch, akými môžeme zistiť príčiny vzniknutých problémov s DNS a BIND9.

Testovanie

resolv.conf

Ak chceme začať testovať BIND9, je potrebné pridať servery do zoznamu  menných serverov. Pre istotu primárny menný server nakonfigurujeme rovnako ako ostatné stanice. Otvoríme súbor /etc/resolv.conf a pridáme nasledujúce riadky:

nameserver	192.168.1.10
nameserver 192.168.1.11
[Note]

Môžete tiež pridať IP adresu sekundárneho servera pre prípad, že primárny nebude fungovať.

dig

Ak máme nainštalovaný balík dnsutils, môžeme otestovať nastavenie dns pomocou nástroja dig:

  • Po nainštalovaní BIND9 použijeme dig ako rozhranie so spätnou väzbou, aby sme sa uistili, či server načúva na porte 53. V príkazovom riadku zadáme:

    dig -x 127.0.0.1
    

    Mali by sme uvidieť riadky podobné týmto:

    ;; Query time: 1 msec
    ;; SERVER: 192.168.1.10#53(192.168.1.10)
  • Ak máme BIND9 nastavený ako menný server s dočasnou pamäťou, môžeme príkaz "dig" použiť na otestovanie rýchlosti odpovede na požiadavku:

    dig ubuntu.com
    

    Všimneme si čas požiadavky na konci výstupu:

    ;; Query time: 49 msec

    Po opätovnom zadaní tej istej požiadavky by sme mali dostať oveľa kratší čas:

    ;; Query time: 1 msec

ping

Teraz si ukážeme, ako môžeme otestovať DNS, či správne prekladá mená staníc. Použijeme na to nástroj ping, ktorý odošle ICMP echo požiadavku. Do príkazového riadka zadáme:

ping nieco.sk

V prípade, že menný server bude vedieť preložiť adresu ns.nieco.sk na IP adresu, mal by výstup vyzerať takto:

PING ns.nieco.sk (192.168.1.10) 56(84) bytes of data.
64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.800 ms
64 bytes from 192.168.1.10: icmp_seq=2 ttl=64 time=0.813 ms

named-checkzone

Výborný spôsob, akým sa dajú otestovať zónové súbory, je použitie nástroja named-checkzone, ktorý sa nainštaloval pri inštalácii balíka bind9. Tento nástroj umožňuje zistiť, či je konfigurácia pred reštartovaním BIND9 správna a umožňuje robiť zmeny za behu.

  • Ak chceme otestovať náš priamy zónový súbor, zadáme toto:

    named-checkzone nieco.sk /etc/bind/db.nieco.sk
    

    Ak je všetko nastavené správne, mal by výstup vyzerať takto:

    zone nieco.sk/IN: loaded serial 6
    OK
  • Podobne môžeme otestovať aj reverzný zónový súbor:

    named-checkzone nieco.sk /etc/bind/db.192
    

    Výstup by mal vyzerať takto:

    zone nieco.sk/IN: loaded serial 3
    OK
[Note]

Čísla Serial sa budú vo Vašom prípade pravdepodobne odlišovať.

Záznamy

BIND9 má veľa rôznych nastavení týkajúcich sa zaznamenávania. Hlavné nastavenia sú dve. Nastavenie channel (kanál) hovorí o tom, kam pôjdu záznamy a nastavenie category (kategória) určuje, aké informácie budú zaznamenávané.

Ak nie sú nakonfigurované žiadne nastavenia, použije sa predvolené nastavenie:

logging {
category default { default_syslog; default_debug; };
category unmatched { null; };
};

Táto časť hovorí o tom, ako nakonfigurovať BIND9 tak, aby odosielal debug (ladiace) správy súvisiace s DNS požiadavkami do samostatného súboru.

  • Najskôr nastavíme kanál tak, aby systém vedel kam má správy odosielať. Otvoríme súbor /etc/bind/named.conf.local a pridáme nasledujúce riadky:

    logging {
    channel query.log {
    file "/var/log/query.log";
    severity debug 3;
    };
    };
  • Potom nastavím kategóriu, aby systém odosielal všetky DNS požiadavky do súboru query.log:

    logging {
    channel query.log {
    file "/var/log/query.log";
    severity debug 3;
    };
    category queries { query.log; };
    };
[Note]

Poznámka: nastavenie debug môžete meniť v rozsahu 1 až 3. Ak ho nezadáte, použije sa úroveň 1.

  • Pretože démon named je spustený pod používateľom bind po vytvorení súboru /var/log/query.log musíme zmeniť jeho vlastníctvo:

    sudo touch /var/log/query.log
    sudo chown bind /var/log/query.log
    
  • Pred tým, ako bude môcť démon named zapisovať do nového log súboru, musíme aktualizovať profil AppArmor. Najskôr otvoríme súbor /etc/apparmor.d/usr.sbin.named a pridáme:

    /var/log/query.log w,

    Potom nanovo načítame profil:

    cat /etc/apparmor.d/usr.sbin.named | sudo apparmor_parser -r
    

    Viac informácii o AppArmor sa dozviete v časti  “AppArmor”

  • Teraz reštartujeme BIND9 aby sa zmeny prejavili:

    sudo /etc/init.d/bind9 restart
    

Teraz by sme mali vidieť v súbore /var/log/query.log informácie o požiadavkách. Toto je len veľmi jednoduchá ukážka toho, ako sa konfigurujú nastavenia zaznamenávania systému BIND9. Podrobnejšie informácie sa dozviete v časti “Viac informacií”.

Zdroje

Najčastejšie typy záznamov

Táto časť obsahuje niektoré z najbežnejších typov DNS záznamov.

  • A záznam: Tento záznam priraďuje IP adresu k názvu stanice.

    www      IN    A      192.168.1.12
  • CNAME záznam: Používa sa na vytvorenie aliasu k existujúcemu A záznamu. CNAME záznam sa ale nedá vytvoriť tak, aby odkazoval na iný CNAME záznam.

    web     IN    CNAME  www
  • MX záznam: Definuje miesto, kam majú byť posielané emaily. Musí odkazovať na záznam typu A, nie na CNAME.

            IN    MX      mail.nieco.sk.
    mail IN A 192.168.1.13
  • NS záznam: Používa sa na definovanie serverov, ktoré riadia kópie zóny. Musí odkazovať na A záznam, nie na CNAME. Sú to miesta, na ktorých je definovaný primárny a sekundárny server.

            IN    NS     ns.nieco.sk.
    IN NS ns2.nieco.sk.
    ns IN A 192.168.1.10
    ns2 IN A 192.168.1.11

Ďalšie informácie

Na stránke DNS HOWTO sa nachádzajú podrobnejšie informácie o konfigurácii BIND9.

Podrobné informácie o DNS a BIND9 sa nachádzajú na stránke Bind9.net.

Kniha DNS and BIND je veľmi obľúbená, teraz bolo vydané jej piate vydanie.

Skvelým miestom, kde môžete prediskutovať problémy s BIND9 s komunitou Ubuntu Servera, je IRC kanál #ubuntu-server na freenode.

Za pozretie stojí aj Ubuntu wiki stránka BIND9 Server HOWTO.

Z českých kníh je to napríklad Velký průvodce protokoly TCP/IP a systémem DNS od autorov Alena Kabelová, Libor Dostálek