DNS HOWTO

Obsah | Zpět | Další

3. Cachovací jmenný server

První pokus o konfiguraci DNS, velmi užitečný pro vytáčené připojení (dialup), kabelový modem, ADSL a podobné uživatele.

V distribuci Red Hat a distribucích souvisejících s Red Hat můžete docílit stejných reálných výsledků jako v první části dokumentu HOWTO instalací balíčků bind, bind-utils a caching-nameserver. Používáte-li distribuci Debian, jednoduše nainstalujte bind (nebo bind9, ačkoliv v době psaní tohoto dokumentu není BIND 9 podporován stabilní verzí Debianu) a bind-doc. Samozřejmě, pouhá instalace těchto balíčků vás nenaučí tolik jako přečtení dokumentu HOWTO. Takže, nainstalujte si balíčky a pak si přečtěte tento dokument a ověřte si, jaké soubory byly z balíčků nainstalovány.

Jmenný server, který používá pouze cachování, najde odpověd na dotaz na jméno a zapamatuje si ji pro případ, kdy budete tuto informaci opět potřebovat. Tento způsob při opětovném hledání jména významně zkrátí dobu čekání na odpověď na váš dotaz, zejména pokud používáte pomalé připojení.

Jako první potřebujete soubor nazvaný /etc/named.conf (v Debianu: /etc/bind/named.conf). Tento soubor je přečten, když je named spuštěn. V tomto případě by měl jednoduše obsahovat:

// Konfigurační soubor pro jmenný server používající pouze cachování
//
// Tato verze dokumentu HOWTO, kterou právě čtete, může obsahovat počáteční mezery
// (mezery na počátku řádek ještě před textem) v tomto i
// ostatních souborech. Aby věci fungovaly, musíte mezery odstranit.
//
// Mějte na paměti, že jména souborů a adresářů se mohou lišit, 
// ačkoliv jejich podstatný obsah může být velmi podobný.

options {
        directory "/var/named";

        // Odkomentování následujícího řádku by vám mohlo pomoci v případě, že musíte překonat
        // firewall a věci vám nefungují, jak by měly. Pravděpodobně si ale budete
        // muset promluvit se svým firewall administrátorem.

        // query-source port 53;
};
controls {
        inet 127.0.0.1 allow { localhost; } keys { rndc_key; };
};

key "rndc_key" {
        algorithm hmac-md5;
    secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
};

zone "." {
        type hint;
        file "root.hints";
};

 zone "0.0.127.in-addr.arpa" {
        type master;
        file "pz/127.0.0";
};

Linuxové distribuční balíčky mohou používat rozdílná jména souborů v případě všech druhů souborů v tomto textu uvedených; nicméně pořád budou obsahovat přibližně ty samé věci.

Řádek 'directory' říká named kam se podívat, hledá-li potřebné soubory. Veškeré názvy souborů budou následně relativní vzhledem k tomuto adresáři. Tímto způsobem bude pz adresářem pod /var/named, tj. /var/named/pz. /var/named bude tím správným adresářem podle Linux File system Standard.

Soubor pojmenovaný /var/named/root.hints by měl obsahovat následující:

;
; Pokud již tentou soubor máte, možná, že na tomto místě naleznete nějaké úvodní komentáře.
; Pokud ne, nenechte se zneklidnit.
;
; Jde-li o libovolné počáteční mezery před textem v následujících řádcích: odstraňte je!
; Řádky by měly začínat znaky ;, . nebo písmeny, ale ne prázdnými místy.
;
.                       6D  IN      NS      A.ROOT-SERVERS.NET.
.                       6D  IN      NS      B.ROOT-SERVERS.NET.
.                       6D  IN      NS      C.ROOT-SERVERS.NET.
.                       6D  IN      NS      D.ROOT-SERVERS.NET.
.                       6D  IN      NS      E.ROOT-SERVERS.NET.
.                       6D  IN      NS      F.ROOT-SERVERS.NET.
.                       6D  IN      NS      G.ROOT-SERVERS.NET.
.                       6D  IN      NS      H.ROOT-SERVERS.NET.
.                       6D  IN      NS      I.ROOT-SERVERS.NET.
.                       6D  IN      NS      J.ROOT-SERVERS.NET.
.                       6D  IN      NS      K.ROOT-SERVERS.NET.
.                       6D  IN      NS      L.ROOT-SERVERS.NET.
.                       6D  IN      NS      M.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.     6D  IN      A       198.41.0.4
B.ROOT-SERVERS.NET.     6D  IN      A       128.9.0.107
C.ROOT-SERVERS.NET.     6D  IN      A       192.33.4.12
D.ROOT-SERVERS.NET.     6D  IN      A       128.8.10.90
E.ROOT-SERVERS.NET.     6D  IN      A       192.203.230.10
F.ROOT-SERVERS.NET.     6D  IN      A       192.5.5.241
G.ROOT-SERVERS.NET.     6D  IN      A       192.112.36.4
H.ROOT-SERVERS.NET.     6D  IN      A       128.63.2.53
I.ROOT-SERVERS.NET.     6D  IN      A       192.36.148.17
J.ROOT-SERVERS.NET.     6D  IN      A       198.41.0.10
K.ROOT-SERVERS.NET.     6D  IN      A       193.0.14.129
L.ROOT-SERVERS.NET.     6D  IN      A       198.32.64.12
M.ROOT-SERVERS.NET.     6D  IN      A       202.12.27.33

Soubor popisuje světové kořenové jmenné servery (tzv. rooty). Servery se v průběhu času mění a musí být tu a tam udržovány. Pro informace, jak tato data udržet v souboru aktuální, se podívejte do sekce o údržbě.

Následující část v named.conf je poslední zone. Její použití vysvětlím v pozdější kapitole; pro tuto chvíli prostě jen vytvořte tento soubor nazvaný 127.0.0 v podadresáři pz: (V případě že celý text jednoduše okopírujete, odstraňte znovu, prosím, počáteční mezery.).

$TTL 3D
@               IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                                1       ; Serial
                                8H      ; Refresh
                                2H      ; Retry
                                4W      ; Expire
                                1D)     ; Minimum TTL
                        NS      ns.linux.bogus.
1                       PTR     localhost.

Části nazvané key a controls společně specifikují, že váš named může být vzdáleně ovládán prostřednictvím programu nazvaného rndc, pokud se připojuje z lokálního počítače a identifikuje se se šifrovaným tajným klíčem. Tento klíč je vlastně jakýmsi heslem. Pro správnou funkci rndc potřebujete aby /etc/rndc.conf odpovídalo následujícímu:

key rndc_key {
algorithm "hmac-md5";
secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
};

options {
    default-server localhost;
    default-key    rndc_key;
};

Jak vidíte, klíč je identický. Pokud byste chtěli používat rndc z jiných počítačů, pak se jejich časy nesmí lišit o více než 5 minut. V tomto případě doporučuji použít ntp (xntpd a ntpdate) software.

Jako další budete potřebovat /etc/resolv.conf, který bude vypadat nějak takto: (Znovu, prosím, odstraňte počáteční mezery!)

search subdomain.your-domain.edu your-domain.edu
nameserver 127.0.0.1

Řádek search přesně určuje, jaké domény mají být prohledány pro libovolné hostitelského jméno, k němuž se chcete připojit. Řádek nameserver určuje adresu vašeho jmenného serveru, v tomto případě vašeho vlastního počítače, protože to je to místo, kde váš named běží (127.0.0.1 je správný údaj, bez ohledu na to, zda má váš počítač ještě nějakou další adresu). Chcete-li vytvořit seznam nekolika jmenných serverů, vložte jeden řádek nameserver pro každý z nich. (Poznámka: named nikdy tento soubor nenačítá, resolver používající named ho načítá. Poznámka 2: V některých souborech resolv.conf můžete najít řádek říkající domain. To je v pořádku, ale nikdy nepoužívejte současně obojí search and domain, pouze jedno z nich bude fungovat).

Abychom ilustrovali, co tento soubor dělá, podívejme se na následující: Pokud se klient pokusí nalézt foo, pak je nejdříve vyzkoušeno foo.subdomain.your-domain.edu, poté foo.your-domain.edu, a nakonec foo. Možná, že nebudete chtít do řádku search vložit tolik domén, protože nějaký čas trvá prohledat je všechny.

Uvedený příklad předpokládá, že náležíte pod doménu subdomain.your-domain.edu; váš počítač se pak pravděpodobně jmenuje your-machine.subdomain.your-domain.edu. Řádek 'search' by neměl obsahovat vaši TLD (Top Level Domain = doménu nejvyššího řádu, v tomto případě 'edu'). Pokud se často potřebujete připojit k hostiteli v jiné doméně, můžete tuto doménu přidat do řádku 'search' následujícím způsobem: (Nezapomeňte odebrat počáteční mezery, pokud tam nějaké jsou.)

search subdomain.your-domain.edu your-domain.edu other-domain.com

a tak dále. Patrně budete místo výše uvedených příkladů potřebovat vložit jména skutečných domén. Prosím, povšimněte si chybějících teček na konci doménových jmen. Toto je velmi důležité; prosím, povšimněte si chybějících teček na konci doménových jmen!

3.1 Spuštění named

Po všech přípravách je nyní čas spustit named. Používáte-li dialup připojení, pak se nejdříve připojte. Nyní spusťte named, buďto spuštěním bootovacího skriptu: /etc/init.d/named start nebo přímým spuštěním named: /usr/sbin/named. Pokud vše zkoušíte s předchozí verzí BIND, jste pravděpodobně zvyklí na používání ndc. V BIND 9 bylo ndc nahrazeno rndc, které umožňuje vzdálenou kontrolu vašeho named, ale už nenabízí možnost přímého spuštění named. Podíváte-li se do vašeho syslogu (většinou se jmenuje /var/log/messages, v Debianu je pojmenován /var/log/daemon, nebo se také můžete podívat do dalších souborů /var/log) ve chvíli spouštění named (proveďte tail -f /var/log/messages) měli byste vidět něco jako:

(řádky končící znakem pokračují na dalším řádku textu)

Dec 23 02:21:12 lookfar named[11031]: starting BIND 9.1.3
Dec 23 02:21:12 lookfar named[11031]: using 1 CPU
Dec 23 02:21:12 lookfar named[11034]: loading configuration from \
    '/etc/named.conf'
Dec 23 02:21:12 lookfar named[11034]: the default for the \
    'auth-nxdomain' option is now 'no'
Dec 23 02:21:12 lookfar named[11034]: no IPv6 interfaces found
Dec 23 02:21:12 lookfar named[11034]: listening on IPv4 interface lo, \
    127.0.0.1#53
Dec 23 02:21:12 lookfar named[11034]: listening on IPv4 interface eth0, \
    10.0.0.129#53
Dec 23 02:21:12 lookfar named[11034]: command channel listening on \
    127.0.0.1#953
Dec 23 02:21:13 lookfar named[11034]: running

Objeví-li se ve výše uvedeném textu nějaké chybové zprávy, pak je něco v nepořádku. Named pojmenuje soubor, který načítá. Jděte zpátky a zkontrolujte tento soubor. Až ho opravíte, spusťte znovu program named.

Nyní vyzkoušejte svoje nastavení. Obvykle se pro to používá program nazývaný nslookup. V současné době bych vám ale doporučil program dig:

$ dig -x 127.0.0.1
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26669
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa.                IN      PTR

;; ANSWER SECTION:
1.0.0.127.in-addr.arpa. 259200  IN      PTR     localhost.

;; AUTHORITY SECTION:
0.0.127.in-addr.arpa.   259200  IN      NS      ns.linux.bogus.

;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 02:26:17 2001
;; MSG SIZE  rcvd: 91

Dostanete-li odpověď shodnou s výše uvedeným textem, pak vše funguje tak, jak má. Doufejme. Vidíte-li cokoliv hodně odlišného, vraťte se zpět a ještě jednou vše pořádně zkontrolujte. Pokaždé když změníte soubor, musíte znovu spustit rndc reload.

Teď můžete zadat dotaz. Zkuste vyhledat nějaký počítač, který je k vám blízko. Já mám poblíž počítač pat.uio.no, který je umístěn na Universitě v Oslo:

$dig pat.uio.no
; <<>> DiG 9.1.3 <<>> pat.uio.no
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15574
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0

;; QUESTION SECTION:
;pat.uio.no.                    IN      A

;; ANSWER SECTION:
pat.uio.no.             86400   IN      A       129.240.130.16

;; AUTHORITY SECTION:
uio.no.                 86400   IN      NS      nissen.uio.no.
uio.no.                 86400   IN      NS      nn.uninett.no.
uio.no.                 86400   IN      NS      ifi.uio.no.

;; Query time: 651 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 02:28:35 2001
;; MSG SIZE  rcvd: 108

V tuto chvíli se dig ptá vašeho named,aby mohl nalézt počítač pat.uio.no. Potom se spojí s jedním jmenným serverem, který je uvedený ve vašem root.hints souboru, a zeptá se na cestu od něj. Předtím než dostanete odpověď, může celý proces malou chvíli trvat, protože bude možná nutno prohledat všechny domény, které jste uvedli v /etc/resolv.conf.

Zeptáte-li se znovu na totéž, pak dostanete následující:

$ dig pat.uio.no

; <<>> DiG 8.2 <<>> pat.uio.no 
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; QUERY SECTION:
;;      pat.uio.no, type = A, class = IN

;; ANSWER SECTION:
pat.uio.no.             23h59m58s IN A  129.240.130.16

;; AUTHORITY SECTION:
UIO.NO.                 23h59m58s IN NS  nissen.UIO.NO.
UIO.NO.                 23h59m58s IN NS  ifi.UIO.NO.
UIO.NO.                 23h59m58s IN NS  nn.uninett.NO.

;; ADDITIONAL SECTION:
nissen.UIO.NO.          23h59m58s IN A  129.240.2.3
ifi.UIO.NO.             1d23h59m58s IN A  129.240.64.2
nn.uninett.NO.          1d23h59m58s IN A  158.38.0.181

;; Total query time: 4 msec
;; FROM: lookfar to SERVER: default -- 127.0.0.1
;; WHEN: Sat Dec 16 00:23:09 2000
;; MSG SIZE  sent: 28  rcvd: 162

Jak jasně vidíte, bylo vše tentokrát mnohem rychlejší; 4ms v porovnání s více než půl sekundou v předchozím případě. Odpověd byla vyhledána v cache. Při použití cachování se objevuje riziko, že data, která obdržíte jako odpověď na svou otázku, budou zastaralá. Zdrojové servery však mohou určovat dobu, po kterou je možné data získaná z cache považovat za platná, takže pravděpodobnost, že obdržené údaje jsou správné, je vysoká.

3.2 Resolvery

Všechny operační systémy implementující standardy C API mají volání gethostbyname a gethostbyaddr. Ty umožňují získat informace z několika rozdílných zdrojů. Z kterých konkrétních zdrojů jsou informace schopny získat je nastaveno v /etc/nsswitch.conf v Linuxu (a v některých dalších Unixech). Jedná se o dlouhý soubor specifikující z jakého souboru nebo databáze lze získat rozličné typy dat. Soubor obvykle nahoře obsahuje pomocné poznámky a komentáře, které je vhodné, abyste si přečetli. Potom najděte řádek začínající slovem `hosts:'; mělo by tam být napsáno:

hosts:      files dns

(Pamatujete si na mé poznámky o počátečních mezerách, že? Už je nebudu znovu zmiňovat.)

Pokud zde není žádný řádek začínající na `hosts:', tak do souboru vložte ten, který je uvedený nad tímto textem. Řádek říká, že programy se mají nejdříve podívat do souboru /etc/hosts, a potom podle resolv.conf zkontrolovat DNS.

3.3 Gratulace

Tak a teď už víte, jak si vytvořit cachovací jmenný server. Takže si dejte pivo, mléko nebo cokoliv, co máte rádi, abyste to mohli oslavit.

Obsah | Zpět | Další