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.
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.
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.
Sedaj znate postaviti named s predpomnilnikom. Vzemite si pivo, mleko ali kar pač imate najraje in zažurajte.