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.
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.
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
.
Zdaj znate postaviti named s predpomnilnikom. Natočite si piva, mleka ali tistega, kar pač najraje žulite, in zažurajte.