Jednotlivé uzly v internetu jsou identifikovány pomocí IP adres, které jsou celosvětově unikátní. Ty jsou ale těžce zapamatovatelé a neříkají nic o umístění uzlu v síti. Proto se spolu s IP adresami používají symbolická doménová jména. Je tedy potřeba umět přiřazovat doménovému jménu IP adresu a opačně. Původně tento překlad probíhal pomocí záznamů v /etc/hosts. Toto řešení se však společně s rozšiřováním internetu stalo napoužitelné a byl tedy navržen DNS.
zkratka může podle kontextu znamenat celkový systém, name server nebo protokol
. > cz > muni > fi > lab; stromová struktura; delegování autorit
Fully Qualified Domain Name; celosvětově jedinečné; lab.fi.muni.cz
domény národní a generické; nad nimi ještě doména "."
vymezené územím státu; dvouznakový název – ISO3166
Nadnárodní; .com, .edu, .net, .int, .org, .mil, .gov, .info, ...
server překládající jména v doménovém tvaru na IP a naopak; každá doména musí mít (alespoň jeden) nameserver
name server nastavovaný správcem domény; právě jeden v doméně
záložní name server (záloha dat, dostupnost); automaticky zrcadlí obsah primárního DNS
server se pouze táže dál a uchovává si záznamy; nemá doménu
každý server je autoritativní pro vlastní doménu (pokud ji má – viz. cache-only servers); autoritativní odpověď pokud server odpovídá na dotaz o vlasní doméně; neautoritativní pokud odpovídá z cache
name servery pro doménu "."; v současnosti 13 kořenových name serverů označených písmeny A až M
klient DNS – tazatel; v Linuxu standartní knihovna C; nastavení /etc/resolv.conf, /etc/nsswitch.conf
            
#/etc/resolv.conf 
nameserver 192.168.1.254 #adresa name serveru, ktereho se resolver dotazuje
            
             | 
            
#/etc/nsswitch.conf
hosts:	files dns #mrkni nejdriv do /etc/hosts a pak se teprv ptej DNS
            
             | 
Resolver se ptá nejbližšího name serveru. Pokud server zná odpověd, odpoví ihned. Pokud server nezná odpověď, může se zachovat dvěma způsoby:
vrátí tazateli adresu (některého) kořenového DNS
ptá se sám kořenového DNS a očekává odpověď – tj. chová se jako resolver
Nejpoužívanějšími implementacemi DNS v Linuxu jsou BIND a djbdns. BIND (Berkeley Internet Name Domain) je referenční implementací DNS.
[ Djbdns je produkt profesora Daniela J. Bernsteina. Mezi jeho hlavní přednosti patři přehlednost kódu, bezpečnost, rychlost a implicitní chrootované prostředí. Tento server narozdíl od refernčního BINDu řeší spousty věcí jinak nebo je z důvodu bezpečnosti neřeší vůbec. ]
Zde se budeme zabývat nastavení BINDU (verze 9).
Hlavní konfigurační soubor je /etc/named.conf, který může vypadat např. takto (převzato z DNS HOWTO):
    
options {
        directory "/var/named";
};
controls {
        inet 127.0.0.1 allow { localhost; };
};
zone "." {
        type hint;
        file "root.hints";
};
zone "localhost" {
  type master;
  file "pz/localhost";
};
zone "0.0.127.in-addr.arpa" {
        type master;
        file "pz/127.0.0";
};
zone "linux.bogus" {
        type master;
        notify no;
        file "pz/linux.bogus";
};
zone "196.168.192.in-addr.arpa" {
        type master;
        notify no;
        file "pz/192.168.196";
};
    
   | 
Ukázka nastavení zóny linux.bogus v souboru /var/named/pz/linux.bogus
    
$TTL 3D
@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                        199802151       ; serial, todays date + todays serial #
                        8H              ; refresh, seconds
                        2H              ; retry, seconds
                        4W              ; expire, seconds
                        3H )            ; minimum, seconds
;
                TXT     "Linux.Bogus, your DNS consultants"
                NS      ns              ; Inet Address of name server
                NS      ns.friend.bogus.
                MX      10 mail         ; Pri mary Mail Exchanger
                MX      20 mail.friend.bogus. ; Secondary Mail Exchanger
gw              A       192.168.196.1
                TXT     "The router"
ns              A       192.168.196.2
                MX      10 mail
                MX      20 mail.friend.bogus.
www             CNAME   ns
donald          A       192.168.196.3
                MX      10 mail
                MX      20 mail.friend.bogus.
                TXT     "DEK"
mail            A       192.168.196.4
                MX      10 mail
                MX      20 mail.friend.bogus.
ftp             A       192.168.196.5
                MX      10 mail
                MX      20 mail.friend.bogus.    
    
   | 
  
$TTL 3D
@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                        199802151 ; Serial, todays date + todays serial
                        8H      ; Refresh
                        2H      ; Retry
                        4W      ; Expire
                        1D)     ; Minimum TTL
                NS      ns.linux.bogus.
1               PTR     gw.linux.bogus.
2               PTR     ns.linux.bogus.
3               PTR     donald.linux.bogus.
4               PTR     mail.linux.bogus.
5               PTR     ftp.linux.bogus.
 | 
Tabulka 1. Typy záznamů
| Typ | Název | Funkce | 
| SOA | Start Of Authority | Uvádí nastavení pro doménu | 
| NS | Name Server | Označuje Name Server domény | 
| A | host Adress | Konkrétní adresa IPv4 | 
| AAAA | host Adress | Konkrétní adresa IPv6 | 
| MX | Mail eXchange | Poštovní server, záznam obsahuje i prioritu | 
| CNAME | Canonical NAME | Přezdívka; slouží k přiřazení více jmen jedné IP; omezení! | 
| PTR | PoinTeR | Ukazuje na jméno u reverzního překladu | 
| TXT | TeXT | Textová poznámka | 
Nastavení sekundárního DNS pro zónu linux.bogus v souboru /etc/named.conf:
zone "linux.bogus" {
        type slave;
        file "sz/linux.bogus";
        masters { 192.168.196.2; };
};
 | 
@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                        199802151       ; serial, todays date + todays serial #
                        8H              ; refresh, seconds
                        2H              ; retry, seconds
                        4W              ; expire, seconds
                        1D )            ; minimum, seconds
 | 
Předchozí nastavení bylo jen základní, pro bezpečnější provoz je doporučeno nastavit několik omezení
Není třeba poskytovat všem kompletní informace o nastavení serveru. Stačí je poskytovat sekundárním serverům. Přidání nastavení allow-transfer do /etc/named.conf:
zone "linux.bogus" {
      allow-transfer { 192.168.1.4; localhost; };
};
 | 
Zakážeme dotazy na domény, které nevlastníme, kromě dotazů z vnitřních strojů. Změny v /etc/named.conf:
options {
      allow-query { 192.168.196.0/24; localhost; };
};
zone "linux.bogus" {
      allow-query { any; };
};
zone "196.168.192.in-addr.arpa" {
      allow-query { any; };
};
 | 
options {
        allow-recursion { 192.168.196.0/24; localhost; };
};
 | 
Nespouštějte server se superuživatelskými právy. Vytvořte uživatele a skupinu (např. named) a spouštějte server jako tento uživatel. Nekteré distribuce toto dělají automaticky.
Je silně doporučeno spouštět BIND v chrootovaném prostrědí. Případný útočník ovládnuvší proces tak nezíská přístup k jiným zdrojům na vašem počítači. Ke spouštění serveru v chrootovaném prostředí existuje několik vyčerpávajících HOWTO (např. pro BIND9), tudíž jen v kostce.
Do adresáře, kam chceme chrootovat zkopírujeme potřebné soubory (i s adresářovou strukturou):
etc – /etc/named.conf, /etc/ld.so.conf, /etc/localtime
lib – soubory vybramé pomocí ldd /usr/sbin/named; poté je třeba spustit ldconfig -r <chootovany adresar>
dev – je třeba vytvořit speciální soubory null a random
var – vytvoříme adresář var/run/named s právem zápisu pro uživatele pod kterým budeme server spouštět
Spustíme named pod s právy vytvořeného užibatele a v chrootovaném prostředí: /usr/sbin/named -u <uzivatel pro server> -t <chrootovaci adresar>
named-checkconf, named-checkzone – kontrola konfiguracnich souboru named
dig – výpis informací o serveru
host – výpis informací o serveru, bez parametrů prostý překlad adres
nslookup – interaktivní pokládání dotazů name serverům
Informace k referátu jsem čerpal ze stránek DNS HOWTO, Chroot-BIND HOWTO a některých předchozích referátů (citace o djbdns).
Další informace o DNS: RFCs, ISC BIND, článek o djbdns na root.cz a mnoho dalšího.