Naprej Nazaj Kazalo

3. Predpomnilni imenski strežnik.

Prvi korak pri nastavljanju DNS, zelo uporaben za uporabnike klicnega dostopa

V Red Hat in sorodnih distribucijah lahko dosežete enak učinek kakor z napotki v prvih odsekih tega HOWTO z namestitvijo paketov bind, bind-utils in caching-nameserver. Če uporabljate Debian, preprosto namestite paketa bind in bind-doc. Seveda se z namestitvijo teh paketov ne boste naučili toliko kakor ob branju tega HOWTO, zato namestite pakete in ob prebiranju tega razdelka preverite nameščene datoteke.

Predpomnilni imenski strežnik poišče odgovor na imensko poizvedbo in si jo zapomni za naslednjič. S tem se znatno skrajša čakalni čas ob prihodnji poizvedbi, še posebej, če imate počasno povezavo.

Najprej potrebujete datoteko /etc/named.conf (Debian: /etc/bind/named.conf). Ta se prebere, ko se named zažene, in naj za zdaj vsebuje le:


// Konfiguracijska datoteka za predpomnilni imenski strežnik

options {
        directory "/var/named";

        // Odkomentiranje tega lahko pomaga, če ste za požarnim zidom in
        // stvari ne delujejo, kakor bi morale. Kljub temu se pogovorite
        // s svojim upraviteljem požarnega zidu.

        // query-source port 53;
};

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

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

Paketi distribucij Linuxa lahko uporabijo drugačna imena datotek; kljub temu imajo približno enake nastavitve.

Vrstica `directory' pove named, kje naj pogleda za datoteke. Vse datoteke, navedene zatem, so spravljene relativno na to mesto. Imenik pz je v /var/named in je torej v resnici /var/named/pz. /var/named je pravilni imenik glede na datotečni hierarhični standard Linux File system Standard.

V named.conf je omenjena tudi datoteka /var/named/root.hints. Ta naj vsebuje: (Pri kopiranju vsebine datoteke prek odlagališča iz elektronske različice tega dokumenta preverite, da v datoteki ni začetnih presledkov, tj. vse vrstice se morajo začeti z nepraznim znakom. Nekatero programje za urejanje besedil vnese na začetke vrstic presledke in povzroči zmedo. V tem primeru odstranite začetne presledke)


;
; Če to datoteko že imate, so lahko tu komentarji.
; Če je še nimate, naj vas to ne skrbi.
;
.                       6D IN NS        M.ROOT-SERVERS.NET.
.                       6D IN NS        I.ROOT-SERVERS.NET.
.                       6D IN NS        E.ROOT-SERVERS.NET.
.                       6D IN NS        D.ROOT-SERVERS.NET.
.                       6D IN NS        A.ROOT-SERVERS.NET.
.                       6D IN NS        H.ROOT-SERVERS.NET.
.                       6D IN NS        C.ROOT-SERVERS.NET.
.                       6D IN NS        G.ROOT-SERVERS.NET.
.                       6D IN NS        F.ROOT-SERVERS.NET.
.                       6D IN NS        B.ROOT-SERVERS.NET.
.                       6D IN NS        J.ROOT-SERVERS.NET.
.                       6D IN NS        K.ROOT-SERVERS.NET.
.                       6D IN NS        L.ROOT-SERVERS.NET.
;
M.ROOT-SERVERS.NET.     6D IN A         202.12.27.33
I.ROOT-SERVERS.NET.     6D IN A         192.36.148.17
E.ROOT-SERVERS.NET.     6D IN A         192.203.230.10
D.ROOT-SERVERS.NET.     6D IN A         128.8.10.90
A.ROOT-SERVERS.NET.     6D IN A         198.41.0.4
H.ROOT-SERVERS.NET.     6D IN A         128.63.2.53
C.ROOT-SERVERS.NET.     6D IN A         192.33.4.12
G.ROOT-SERVERS.NET.     6D IN A         192.112.36.4
F.ROOT-SERVERS.NET.     6D IN A         192.5.5.241
B.ROOT-SERVERS.NET.     6D IN A         128.9.0.107
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

Datoteka opisuje korenske imenske strežnike po svetu. Ti podatki se sčasoma spreminjajo, zato jih je treba tu in tam posodobiti. V poglavju Vzdrževanje si preberite navodila, kako to storiti.

Naslednji razdelek v named.conf je zadnji vnos zone. Njegov namen in uporabo bom razložil v naslednjem poglavju, za zdaj samo ustvarite datoteko 127.0.0 v podimeniku pz: (Spet po potrebi odstranite začetne presledke)


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

Vaš /etc/resolv.conf mora biti videti približno takole: (Spet odstranite presledke!)


search poddomena.vasa-domena.edu vasa-domena.edu
nameserver 127.0.0.1

Vrstica `search' pove, katere domene je treba preiskati za vsako ime računalnika, na katerega se želite priključiti. `nameserver' določa naslov vašega imenskega strežnika, v tem primeru vašega lastnega računalnika, na katerem bo named tekel (127.0.0.1 je v redu, četudi ima vaš računalnik še drug naslov). Če želite navesti več imenskih strežnikov, vpišite za vsakega po eno `nameserver' vrstico. (Napotek: named te datoteke ne bo nikoli prebral, potreboval jo bo le del sistema, ki bo uporabljal named. Napotek 2: V nekaterih datotekah resolv.conf je vrstica "domain". To je v redu, samo ne uporabite "search" in "domain", ti dve nastavitvi se izključujeta).

Za ponazoritev, kaj ta datoteka počne: če poskuša program opraviti poizvedbo za foo, bo najprej poskusil foo.poddomena.vasa-domena.edu, nato foo.vasa-domena.edu in šele na koncu foo. Pametno je, da v to vrstico ne vnesete preveč domen, ker iskanje po vseh vzame kar nekaj časa.

Zgled predpostavlja, da spadate v domeno poddomena.vasa-domena.edu in je vaš računalnik potemtakem vas-racunalnik.poddomena.vasa-domena.edu. V vrstici "search" naj ne bo vaše vrhnje domene (ang.: TLD, Top Level Domain), v tem primeru `edu'. Če se pogosto priključujete na računalnike v drugi domeni, lahko dodaste tudi vrstico: (Odstranite presledke, če je treba)


search poddomena.vasa-domena.edu vasa-domena.edu druga-domena.com

in tako naprej. Vsekakor morate tu navedene zglede nadomestiti s pravimi domenami. Zapomnite si, da na koncu domen ni pik. To je zelo pomembno; zapišite si za uho, da na koncu domen ni pik.

3.1 Zagon named

Po vsem tem je čas, da zaženemo named. Če uporabljate povezavo na klic, jo vzpostavite. Napišite `ndc start' in pritisnite enter. Če to ne deluje, poskusite `/usr/sbin/ndc start'. Če vam tudi tu spodleti, si oglejte poglavje Vprašanja in odgovori. V datoteki, v katero vaš syslog piše sporočila (navadno /var/adm/messages, lahko tudi v imeniku /var/log, morda tudi v datoteki syslog), se mora med zagonom named (naredite tail -f /var/log/messages) izpisati nekaj takega:

(vrstice, ki se končajo s \, se nadaljujejo v naslednji vrstici)

Dec 15 23:53:29 localhost named[3768]: starting.  named 8.2.2-P7 \
                Fri Nov 10 04:50:23 EST 2000 ^Iprospector@porky.\
                devel.redhat.com:/usr/src/bs/BUILD/bind-8.2.2_P7/\
                src/bin/named
Dec 15 23:53:29 localhost named[3768]: hint zone "" (IN) loaded\
                (serial 0)
Dec 15 23:53:29 localhost named[3768]: Zone "0.0.127.in-addr.arpa"\
                (file pz/127.0.0): No default TTL set using SOA\
                minimum instead
Dec 15 23:53:29 localhost named[3768]: master zone\
                "0.0.127.in-addr.arpa" (IN) loaded (serial 1)
Dec 15 23:53:29 localhost named[3768]: listening on [127.0.0.1].53 (lo)
Dec 15 23:53:29 localhost named[3768]: listening on [10.0.0.129].53\
                (wvlan0)
Dec 15 23:53:29 localhost named[3768]: Forwarding source address is\
                [0.0.0.0].1034
Dec 15 23:53:29 localhost named[3769]: Ready to answer queries.

Če zagledate tako ali drugačno sporočilo o napaki, ste se verjetno nekje zmotili. Named vam bo povedal, v kateri datoteki je napaka. Odpravite napako in izvedite "ndc restart".

Zdaj lahko preverite svoje nastavitve. Tradicionalno je bil za to uporabljen program nslookup. Dandanes se priporoča naslednje:

$ dig -x 127.0.0.1

; <<>> DiG 8.2 <<>> -x 
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUERY SECTION:
;;      1.0.0.127.in-addr.arpa, type = ANY, class = IN

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

;; AUTHORITY SECTION:
0.0.127.in-addr.arpa.   1D IN NS        ns.penguin.bv.

;; Total query time: 30 msec
;; FROM: lookfar to SERVER: default -- 127.0.0.1
;; WHEN: Sat Dec 16 00:16:12 2000
;; MSG SIZE  sent: 40  rcvd: 110

Če dobite to, vse deluje, kot je treba. Vsaj upamo tako. Če ne, se vrnite in še enkrat vse preglejte. Vsakič, ko spremenite datoteko named.conf, morate znova zagnati named. To lahko storite z ukazom ndc restart.

Zdaj lahko izvedete poizvedbo. Poskusite poizvedeti po kakem računalniku, ki je blizu vas. V moji bližini je na primer pat.uio.no - univerza v Oslu.

$ 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 aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; QUERY SECTION:
;;      pat.uio.no, type = A, class = IN

;; ANSWER SECTION:
pat.uio.no.             1D IN A         129.240.130.16

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

;; ADDITIONAL SECTION:
nissen.uio.no.          1D IN A         129.240.2.3
ifi.uio.no.             1H IN A         129.240.64.2
nn.uninett.no.          1D IN A         158.38.0.181

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

Tokrat je dig povprašal named za poizvedbo o pat.uio.no. Ta je nato stopil v stik z enim od imenskih strežnikov, navedenih v datoteki root.hints, in iskal od tam naprej. Poizvedovanje utegne trajati nekaj časa, ker je treba preiskati vse domene v /etc/resolv.conf. Naj vas opozorim na zastavico "aa" v vrstici "flags:". Oznanja, da je odgovor prišel neposredno od strežnika, ki je odgovoren za domeno, o kateri smo poizvedovali (odgovor "authoritive"). Pozneje bomo povedali več o odgovorih "authoritive".

Če še enkrat izvedete isto poizvedbo, dobite naslednje:

$ 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

Bodite pozorni, da tokrat manjka zastavica "aa". To pomeni, da named ni šel še enkrat izvajat iste poizvedbe po internetu, saj jo ima že v svojem predpomnilniku. Lahko pa se zgodi, da je informacija v tem času zastarela. Na to (zelo malo verjetno) možnost ste opozorjeni s tem, da ni zastavice "aa". Zdaj veste, da predpomnenje poizvedb deluje.

3.2 Poizvedovalci (ang. Resolvers)

Vsi OS imajo standardizirane klice C API gethostbyname in gethostbyaddr, ki lahko prejemajo podatke iz več virov. Ti viri so določeni v /etc/nsswitch.conf v Linuxu (in nekaterih drugih Unixih). To je dolga datoteka, ki določa, iz katere datoteke ali zbirke podatkov se dobi različne podatke. Ponavadi so pri vrhu uporabne opombe, ki bi jih bilo nemara pametno prebrati. Najdite vrstico, ki se začne z `hosts:'; bila naj bi:


hosts:      files dns

(Saj se še spomnite nasvetov o začetnih presledkih? Ne bom jih namreč več ponavljal.)

Če ni vrstice, ki bi se začela s `hosts:', jo sami vstavite, tako kot je navedeno zgoraj. Vrstica pravi, naj se najprej preveri datoteka /etc/hosts in šele nato DNS, tako je navedeno v resolv.conf.

3.3 Čestitam

Zdaj znate postaviti named s predpomnilnikom. Natočite si piva, mleka ali tistega, kar pač najraje žulite, in zažurajte.


Naprej Nazaj Kazalo