Naprej Nazaj Kazalo

3. Predpomnilni imenski strežnik.

Prvi korak v konfiguraciji DNS-a, zelo uporaben za uporabnike klicnega dostopa

Na Red Hat in sorodnih distribucijah lahko dosežete enaki učinek kot ob napotkih prvi odsek tega HOWTO-ja 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 kot ob branju tega HOWTO-ja. Zato namestite pakete in ob branju tega razdelka preveriti nameščene datoteke.

Predpomnilni imenski strežnik poišče odgovor na imensko poizvedbo in si jo zapomni za prihodnjič. S tem se znatno zmanjš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, kot bi morale. Vseeno se pogovorite z vašim
        // 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 Linux distribucij lahko uporabijo drugačna imena datotek; vseeno vsebujejo približno enake nastavitve.

Vrstica `directory' pove named, kje naj pogleda za datoteke. Vse datoteke, navedene zatem, se nahajajo relativno na to mesto. Imenik pz se nahaja 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 preko odlagališča iz elektronske različice tega dokumenta se prepričajte, da datoteka ne vsebujejo začetnih presledkov, t.j. vse vrstice se morajo začeti z ne-praznim znakom. Nekatero programje za urejevanje besedil lahko vnese na začetke vrstic presledke in povzroči zmedo. V tem primeru odstranite začetne presledke)


;
; Če to datoteko že imate, se lahko tu nahajajo komentarji.
; Če se ne, ne skrbite.
;
.                       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 potrebno občasno posodobiti. Preberite si poglavje Vzdrževanje za 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: (Ponovno, 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 izgledati približno takole: (Ponovno: odstranite presledke!)


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

Vrstica `search' pove, katere domene je potrebno 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: Nekatere resolv.conf datoteke vsebujejo vrstico "domain". To je v redu, samo ne uporabite "search" in "domain", ti dve nastavitvi se izključujeta).

Za ilustracijo, 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 zahteva kar nekaj časa.

Primer predpostavlja, da spadate v domeno poddomena.vasa-domena.edu in je vaš računalnik potemtakem vas-racunalnik.poddomena.vasa-domena.edu. Vrstica "search" naj ne vsebuje 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 dodate tudi vrstico: (Odstranite presledke, če je potrebno)


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

in tako naprej. Vsekakor morate tukaj navedene primere zamenjati s pravimi domenami. Zapomnite si, da na koncu domen ni pik. To je zelo pomembno; prosim, zapomnite si, 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 poglejte poglavje Vprašanja in odgovori. V datoteki, kamor 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 takšnega:

(vrstice, ki se končajo z \ 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 vidite kakršna koli sporočila o napakah, ste se verjetno nekje zmotili. Named vam bo povedal v kateri datoteki je napaka. Odpravite napako in izvršite "ndc restart".

Sedaj lahko preverite svoje nastavitve. Tradicionalno je bil za to uporabljen program nslookup. Dandanes se priporoča sledeče:

$ 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. Upajmo. Če ne, potem pojdite nazaj in še enkrat vse preglejte. Vsakič, ko spremenite datoteko named.conf, morate ponovno zagnati named, kar lahko storite z ukazom ndc restart.

Sedaj lahko izvedete poizvedbo. Poskusite poizvedeti o kakšnem računalniku, ki je blizu vas. Blizu mene 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 kontaktiral enega od imenskih strežnikov, navedenih v datoteki root.hints in iskal od tam naprej. Poizvedba utegne trajati nekaj časa, ker je potrebno preiskati vse domene v /etc/resolv.conf. Naj vas opozorim na zastavico "aa" v "flags:" vrstici. Ta oznanja, da je odgovor prišel neposredno od strežnika, ki je odgovoren za domeno o kateri smo poizvedovali ("authoritive" odgovor). Kasneje bomo povedali več o "authoritive" odgovorih.

Če še enkrat izvedete isto poizvedbo, dobite sledeče:

$ 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 izvajati isto poizvedbe po internetu, saj jo ima že v svojem predpomnilniku. Lahko pa se zgodi, da je informacija v tem času zastarela. Na to (izredno majhno) možnost ste opozorjeni s tem, da ni zastavice "aa". Sedaj veste, da predpomnenje poizvedb deluje.

3.2 Poizvedovalci (ang. Resolvers)

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


hosts:      files dns

(Saj se spomnite nasvetov glede začetnih presledkov? Ne bom jih več omenjal.)

Če ne obstaja vrstica, ki bi se začela z `hosts:' potem jo sami vstavite tako kot je navedena zgoraj. Vrstica pravi, da se naj najprej preveri datoteka /etc/hosts in šele nato DNS tako je navedeno v resolv.conf.

3.3 Čestitke

Sedaj znate postaviti named s predpomnilnikom. Vzemite si pivo, mleko ali kar pač imate najraje in zažurajte.


Naprej Nazaj Kazalo