DNS HOWTO <author>Nicolai Langfeldt (<tt/janl@linpro.no/), Jamie Norrish and others <date>Version 3.1, 2001-01-18 <abstract> Kako postati mali DNS administrator. V slovenščino prevedel Andrej Lajovic <tt/andrej.lajovic@guest.arnes.si/, 7. avgusta 2000. Prevod posodobil in dopolnil Rok Papež <tt/rok.papez@lugos.si/, 12. decembra 2001. </abstract> <toc> <sect>Predgovor <p>Ključne besede: DNS, BIND, BIND 4, BIND 8, named, povezava na klic, PPP, slip, ISDN, Internet, domena, ime, ločljivost, računalniki, predpomnenje. <p>Ta dokument je del projekta Linux Documentation Project. <sect1>Pravne zadeve <p>(C)opyright 1995-1999 Nicolai Langfeldt. Pri popravljanju in/ali razširjanju tega dokumenta ohranite tudi sporočilo o avtorskih pravicah in ga ustrezno dopolnite. <p>V slovenščino prevedel Andrej Lajovic <tt/andrej.lajovic@guest.arnes.si/, 7. avgusta 2000. Za razširjanje slovenskega prevoda veljajo enaki pogoji, kot za original. <p>Prevod malce posodobil in dopolnil Rok Papež <tt/rok.papez@lugos.si/, 12. decembra 2001. <sect1>Zahvala in prošnja za pomoč. <p>Rad bi se zahvalil Arntu Gulbrandsenu, ki se je pregrizel skozi vse delovne različice tega dokumenta in ki mi je dal mnogo uporabnih predlogov. Rad bi se zahvalil tudi mnogim ljudem, ki so mi poslali predloge in opozorila po elektronski pošti. <p>Prebirate dokument v trajnem razvoju; zato vas naprošam, da me obvestite o uspehih in težavah. S tem lahko pomagate izboljšati ta HOWTO. Komentarje in/ali vprašanja ter denar pošljite na janl@math.uio.no. Lahko pa kupite tudi mojo DNS knjigo. O tem si lahko preberete v bibiliografskem razdelku. Komentarje in/ali vprašanja ter denar pošljite na janl@math.uio.no. Preden mi pošljete sporočilo, na katerega želite tudi odgovor, prosim preverite, da je vaš naslov, naveden v pismu <em/zagotovo/ pravilen in delujoč. Preden mi pišete si preberite tudi poglavje <ref id="qanda" name="Vprašanja in odgovori">. Še nekaj: razumem le norveški in angleški jezik. <p>To je HOWTO. Vzdržujem ga kot del LDP-ja že od leta 1995. V letu 2000 sem napisal knjigo na isto temo. Rad bi dal vedeti, da čeprav je ta HOWTO v veliko pogledih podoben knjigi to <em>ni</em> zvodenela različica knjige z namenom njenega promoviranja. Knjigo lahko zasledite v bibliografskem razdelku na koncu HOWTO-ja. Bralci tega HOWTO-ja so mi pomagali uvideti kaj je pri DNS-u težko doumljivo. To je pomagalo pri pisanju knjige, pri pisanju knjige pa sem potem uvidel kaj ta HOWTO potrebuje. HOWTO je osnoval knjigo in knjiga je osnovala različico 3 tega HOWTO-ja. Veliko zahvale gre tudi založniku knjige, Que, ki je preizkusil srečo z menoj :-) <!-- This is a comment meant for translators: If you're a translator you may put information about reaching someone speaking the language you translate to, and that can help with DNS problems, such as yourself, here (otherwise I get mail in chinese and spanish asking for help about DNS) If you want to translate this HOWTO please notify me so I can keep track of what languages it has been published in, and also I can notify you when the HOWTO has been updated. --> <sect1>Posvetilo <p>Ta HOWTO je posvečen Anne Line Norheim Langfeldt, čeprav ga verjetno ne bo nikoli prebrala - pač ni takšne vrste dekle. <sect>Uvod.<label id="intro"> <p><bf/Kaj to je in kaj ni./ <p>DNS (Domain Name System) preslikuje imena računalnikov v IP številke, ki jih imajo vsi računalniki v internetu. Preslikuje imena v naslove, naslove v imena in še nekaj drugih stvari. Ta HOWTO opisuje kako ustvariti tovrstni preslikovalni imenik na Unix sistemu z nekaterimi značilnostmi za Linux. <p>Preslikava je preposta povezava med dvema rečema, v tem primeru med imenom računalnika, na primer <tt>ftp.linux.org</tt> ter IP številko računalnika (oz. naslovom) <tt/199.249.150.4/. DNS vsebuje tudi obratne preslikave, iz IP številke v ime računalnika; temu se reče angleško "reverse mapping". <p>DNS je za nepoučene ljudi (vas ;-) eno od bolj nejasnih področij omrežne administracije. Na srečo DNS ni tako težak. Ta HOWTO bo poskusil razjasniti nekatere stvari. Opisuje, kako postaviti <em/preprost/ DNS imenski strežnik. Začeli bomo z predpomnilnim imenskim strežnikom in prešli na postavitev primarnega DNS strežnika. Za zapletenejše postavitve lahko pogledate v poglavje <ref id="qanda" name="Vprašanja in odgovori">. Če ni opisano tam, boste morali <em/prebrati/ nekaj Prave Dokumentacije. Kaj sestavlja Pravo Dokumentacijo, sem navedal v poglavju <ref id="bigger" name="Zadnje poglavje">. <p>Preden začnete, naj bo vaš računalnik nastavljen tako, da se lahko telnetate vanj in iz njega ter uspešno izvajate različne povezave v omrežje. Še posebej pomembno je, da lahko izvedete ukaz <tt>telnet 127.0.0.1</tt> in dobite svoj lasten računalnik (preizkusite sedaj!). Za začetek potrebujete tudi ustrezno nstavljene datoteke <tt>/etc/nsswitch.conf</tt>, <tt>/etc/resolv.conf</tt> in <tt>/etc/hosts</tt>, ker njihove funkcije tu ne bom razlagal. Če računalnika še nimate ustrezno nastavljenega si oglejte Networking-HOWTO in/ali Networking-Overview-HOWTO kjer je razloženo kako se vse to vzpostavi. Preberite jih. <p>Ko rečem 'vaš računalnik', mislim s tem računalnik, na katerem postavljate DNS in ne kakšen drug računalnik, ki sodeluje pri vaših omrežnih podvigih. <p>Predpostavljam, da niste za kakršnim koli požarnim zidom, ki bi preprečeval imenske poizvedbe. Če ste, boste potrebovali posebno konfiguracijo --- poglejte v poglavje <ref id="qanda" name="Vprašanja in odgovori">. <p>Strežnik za imenske poizvedbe je na Unix-u program <tt/named/. Je del paketa ``BIND'', katerega vzdržuje The Internet Software Consortium. <tt>Named</tt> je vključen v večino distribucij Linuxa in je tipično nameščen v sklopu paketa <tt/BIND/ kot <tt>/usr/sbin/named</tt>. <p>Vkolikor named imate, ga verjetno lahko uporabite; sicer pa lahko preveden program dobite z Linuxove ftp strani ali pa si pretočite zadnjo različico izvorne kode z <url url="ftp://ftp.isc.org/isc/bind/src/">. Ta HOWTO govori o bind različici 8. Starejša različica tega HOWTO-ja, ki velja za bind 4, je še vedno dosegljiva na <url url="http://www.math.uio.no/~janl/DNS/">. Če vaš named priročnik (man) govori (na koncu, v razdelku FILES) o <tt/named.conf/, imate bind 8, če govori o <tt/named.boot/, pa bind 4. Če imate različico 4 in vam je varnost pomembna, bi morali vsekakor nadgraditi na različico 8. <p>DNS je čez cel internet segajoča baza. Pazite, kaj vpišete vanjo. Če boste vanjo vpisali neumnosti, boste vi in drugi ljudje neumnosti iz nje tudi dobili. Vzdržujte svoj DNS organiziran in pregleden, da vam bo dobro služil. Naučite se ga uporabljati, administrirati, odpravljati napake in bodite še eden dober administrator, ki skrbi, da internet zgledno deluje. <p><bf/Nasvet:/ Naredite si rezervne kopije vseh datotek, ki jih boste spreminjali - v primeru, da kaj ne bo delovalo, lahko sistem še vedno vrnete v staro, delujoče stanje. <sect>Predpomnilni imenski strežnik.<label id="caching"> <p><bf/Prvi korak v konfiguraciji DNS-a, zelo uporaben za uporabnike klicnega dostopa/ <p>Na Red Hat in sorodnih distribucijah lahko dosežete enaki učinek kot ob napotkih prvi odsek tega HOWTO-ja z namestitvijo paketov <tt/bind/, <tt/bind-utils/ in <tt/caching-nameserver/. Če uporabljate Debian preprosto namestite paketa <tt/bind/ in <tt/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. <p>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. <p>Najprej potrebujete datoteko <tt>/etc/named.conf</tt> (Debian: <tt>/etc/bind/named.conf</tt>). Ta se prebere, ko se named zažene in naj za zdaj vsebuje le: <code> // 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"; }; </code> <p>Paketi Linux distribucij lahko uporabijo drugačna imena datotek; vseeno vsebujejo približno enake nastavitve. <p>Vrstica `<tt/directory/' pove named, kje naj pogleda za datoteke. Vse datoteke, navedene zatem, se nahajajo relativno na to mesto. Imenik <tt>pz</tt> se nahaja v <tt>/var/named</tt> in je torej v resnici <tt>/var/named/pz</tt>. <tt>/var/named</tt> je pravilni imenik glede na datotečni hierarhični standard <em/Linux File system Standard/. <p>V <tt>named.conf</tt> je omenjena tudi datoteka <tt>/var/named/root.hints</tt>. Ta naj vsebuje: (<em/Pri kopiranju vsebine datoteke preko odlagališča iz elektronske različice tega dokumenta se prepričajte, da datoteka <bf/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/) <code> ; ; Č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 </code> <p>Datoteka opisuje korenske imenske strežnike po svetu. Ti podatki se sčasoma spreminjajo, zato jih je potrebno občasno posodobiti. Preberite si poglavje <ref id="maint" name="Vzdrževanje"> za navodila, kako to storiti. <p>Naslednji razdelek v <tt>named.conf</tt> je zadnji vnos <tt>zone</tt>. Njegov namen in uporabo bom razložil v naslednjem poglavju, za zdaj samo ustvarite datoteko <tt>127.0.0</tt> v podimeniku <tt>pz</tt>: (<em/Ponovno, po potrebi odstranite začetne presledke/) <code> $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. </code> <p>Vaš <tt>/etc/resolv.conf</tt> mora izgledati približno takole: (<em/Ponovno: odstranite presledke!/) <code> search poddomena.vasa-domena.edu vasa-domena.edu nameserver 127.0.0.1 </code> <p>Vrstica `<tt>search</tt>' pove, katere domene je potrebno preiskati za vsako ime računalnika, na katerega se želite priključiti. `<tt>nameserver</tt>' 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 `<tt>nameserver</tt>' 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). <p>Za ilustracijo, kaj ta datoteka počne: če poskuša program opraviti poizvedbo za <tt>foo</tt>, bo najprej poskusil <tt>foo.poddomena.vasa-domena.edu</tt>, nato <tt>foo.vasa-domena.edu</tt> in šele na koncu <tt>foo</tt>. Pametno je, da v to vrstico ne vnesete preveč domen, ker iskanje po vseh zahteva kar nekaj časa. <p>Primer predpostavlja, da spadate v domeno <tt>poddomena.vasa-domena.edu</tt> in je vaš računalnik potemtakem <tt>vas-racunalnik.poddomena.vasa-domena.edu</tt>. Vrstica "search" naj ne vsebuje vaše vrhnje domene (ang.: TLD, Top Level Domain), v tem primeru `<tt>edu</tt>'. Če se pogosto priključujete na računalnike v drugi domeni, lahko dodate tudi vrstico: (<em/Odstranite presledke, če je potrebno/) <code> search subdomain.your-domain.edu your-domain.edu other-domain.com </code> 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. <sect1>Zagon named<label id="starting"> <p>Po vsem tem je čas, da zaženemo named. Če uporabljate povezavo na klic, jo vzpostavite. Napišite `<tt>ndc start</tt>' in pritisnite enter. Če to ne deluje, poskusite `<tt>/usr/sbin/ndc start</tt>'. Če vam tudi tu spodleti, si poglejte poglavje <ref id="qanda" name="Vprašanja in odgovori">. V datoteki, kamor vaš syslog piše sporočila (navadno <tt>/var/adm/messages</tt>, lahko tudi v imeniku <tt>/var/log</tt>, morda tudi v datoteki <tt/syslog/), se mora med zagonom named (naredite <tt>tail -f /var/log/messages</tt>) izpisati nekaj takšnega: <p>(vrstice, ki se končajo z \ se nadaljujejo v naslednji vrstici) <tscreen><verb> 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. </verb></tscreen> <p>Č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". <p>Sedaj lahko preverite svoje nastavitve. Tradicionalno je bil za to uporabljen program <tt/nslookup/. Dandanes se priporoča sledeče: <tscreen><verb> $ 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 </verb></tscreen> <p>Če dobite to, vse deluje, kot je treba. Upajmo. Če ne, potem pojdite nazaj in še enkrat vse preglejte. Vsakič, ko spremenite datoteko <tt/named.conf/, morate ponovno zagnati named, kar lahko storite z ukazom <tt/ndc restart/. <p>Sedaj lahko izvedete poizvedbo. Poskusite poizvedeti o kakšnem računalniku, ki je blizu vas. Blizu mene je na primer <tt/pat.uio.no/ - univerza v Oslu. <tscreen><verb> $ 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 </verb></tscreen> <p>Tokrat je dig povprašal named za poizvedbo o <tt>pat.uio.no</tt>. Ta je nato kontaktiral enega od imenskih strežnikov, navedenih v datoteki <tt>root.hints</tt> in iskal od tam naprej. Poizvedba utegne trajati nekaj časa, ker je potrebno preiskati vse domene v <tt>/etc/resolv.conf</tt>. 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. <p>Če še enkrat izvedete isto poizvedbo, dobite sledeče: <tscreen><verb> $ 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 </verb></tscreen> <p>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. <em/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. <sect1>Poizvedovalci (ang. Resolvers) <p>Vsi OSi imajo standardizirane C API klice gethostbyname in gethostbyaddr, ki lahko prejemajo podatke iz večih virov. Ti viri so določeni v <tt>/etc/nsswitch.conf</tt> 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 `<tt/hosts:/'; bila naj bi: <code> hosts: files dns </code> (<em/Saj se spomnite nasvetov glede začetnih presledkov? Ne bom jih več omenjal./) <p>Če ne obstaja vrstica, ki bi se začela z `<tt/hosts:/' potem jo sami vstavite tako kot je navedena zgoraj. Vrstica pravi, da se naj najprej preveri datoteka <tt>/etc/hosts</tt> in šele nato DNS tako je navedeno v <tt/resolv.conf/. <sect1>Čestitke <p>Sedaj znate postaviti named s predpomnilnikom. Vzemite si pivo, mleko ali kar pač imate najraje in zažurajte. <sect>Posredovanje (ang. Forwarding) <p>V velikih, dobro organiziranih akademskih omrežjih ali omrežjih ponudnikov interneta boste včasih ugotovili, da ima omrežje nastavljeno posredovalno hierarhijo DNS strežnikov, kar pomaga razbremeniti tako strežnike v lastnem omrežje, kot tudi zunanje strežnike. Pogosto je težko ugotoviti, ali ste v takšnem omrežju ali ne. To pravzaprav sploh ni pomembno, če si nastavite DNS strežnik vašega ponudnika interneta kot ``posredovalnik'' in tako naredite poizvedbe hitrejše ter zmanjšate obremenitev vašega omrežja. Če uporabljate dostop preko modema, je to lahko kar velika pridobitev. Za namene tega primera bomo predpostavili, da ima vaš ponudnik interneta dva imenska strežnika, ki jih želite uporabljati, njuni IP številki sta <tt>10.0.0.1</tt> in <tt>10.1.0.1</tt>. V vaši datoteki <tt>named.conf</tt> torej vstavite v razdelek ``options'' sledeče vrstice: <code> forward first; forwarders { 10.0.0.1; 10.1.0.1; }; </code> <p>Obstaja leptrik za računalnike z povezavo na klic, ki uporabljajo posredovalce. Opisan je v razdelku <ref id="qanda" name="Vprašanja in odgovori">. <p>Ponovno zaženite vaš imenski strežnik in ga preverite z dig. Naj bi delovalo. <sect><em/Preprosta/ domena.<label id="simple"> <p><bf/Kako postaviti svojo lastno domeno./ <sect1>Najprej nekaj teorije <p>Najprej: Saj ste prebrali vse pred tem, kajne ? To je potrebno. <p>Preden <em/resnično/ začnemo to poglavje, vam bom serviral nekaj teorije in primerov o tem, kako DNS deluje. In vi boste to prebrali, ker je dobro za vas. Če nočete prebrati, bi bilo dobro, da vsaj na hitro preletite. Nehajte preletavati, ko pridete do tistega, kar mora iti v vašo datoteko <tt>named.conf</tt>. <p>DNS je hierarhičen, drevesno strukturiran sistem. Vrh se imenuje `<tt/./' in izgovarja `koren' (ang.: root), kot je tipično za drevesne podatkovne strukture. Pod <tt/./ je veliko število vrhnjih domen (ang.: TLD, Top Level Domain), od katerih so najbolj poznane <tt/ORG/, <tt/COM/, <tt/EDU/ in <tt/NET/, seveda pa jih je še mnogo več. Struktura ja prav takšna kot drevo - ima korenino in je zavejena. Če imate vsaj nekaj računalniškega znanja, boste v DNS prepoznali iskalno drevo, lahko boste našli stičišča, liste in robove. Pike so stičišča in robovi so na imenih. <p>Ko iščemo določen računalnik, gre poizvedba rekurzivno po hierarhiji, začenši pri vrhu. Če hočete izvedeti naslov <tt/prep.ai.mit.edu/, mora vaš imenski strežnik nekje začeti. Začne s svojim predpomnilnikom. Če predpomnilnik vsebuje odgovor bo odgovoril kot smo videli v prejšnjem razdelku. Če odgovora ne pozna bo začel odstranjevati dele imena začenši na levi strani. Pogledal bo ali ve kaj o <tt/ai.mit.edu./, potem o <tt/mit.edu./, potem o <tt/edu./. Vedno pa pozna <tt/./, saj se nahaja v datoteki <tt/root.hints/. Potem bo povprašal <tt/./ strežnik o <tt/prep.ai.mit.edu/. Ta <tt/./ strežnik ne bo poznal odgovora, bo pa pomagal z preusmeritivjo (ang. refferal) s katero bo nakazal kod naj se išče odgovor. Preko preusmeritev bo naš strežnik prišel do strežnika, ki bo imel pravi odgovor. To bom sedaj prikazal. <tt/+norec/ pomeni, da naj dig sprašuje nerekurzivno, tako da moramo sami delati rekurzijo. Z ostalimi stikali zmanjšamo obseg podatkov, ki jih izpisuje dig: <tscreen><verb> $ dig +norec +noH +noques +nostats +nocmd prep.ai.mit.edu. ;; res options: init defnam dnsrch ;; got answer: ; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 13 ;; AUTHORITY SECTION: . 5d23h48m47s IN NS I.ROOT-SERVERS.NET. . 5d23h48m47s IN NS E.ROOT-SERVERS.NET. . 5d23h48m47s IN NS D.ROOT-SERVERS.NET. . 5d23h48m47s IN NS A.ROOT-SERVERS.NET. . 5d23h48m47s IN NS H.ROOT-SERVERS.NET. . 5d23h48m47s IN NS C.ROOT-SERVERS.NET. . 5d23h48m47s IN NS G.ROOT-SERVERS.NET. . 5d23h48m47s IN NS F.ROOT-SERVERS.NET. . 5d23h48m47s IN NS B.ROOT-SERVERS.NET. . 5d23h48m47s IN NS J.ROOT-SERVERS.NET. . 5d23h48m47s IN NS K.ROOT-SERVERS.NET. . 5d23h48m47s IN NS L.ROOT-SERVERS.NET. . 5d23h48m47s IN NS M.ROOT-SERVERS.NET. ;; ADDITIONAL SECTION: I.ROOT-SERVERS.NET. 6d23h48m47s IN A 192.36.148.17 E.ROOT-SERVERS.NET. 6d23h48m47s IN A 192.203.230.10 D.ROOT-SERVERS.NET. 6d23h48m47s IN A 128.8.10.90 A.ROOT-SERVERS.NET. 6d23h48m47s IN A 198.41.0.4 H.ROOT-SERVERS.NET. 6d23h48m47s IN A 128.63.2.53 C.ROOT-SERVERS.NET. 6d23h48m47s IN A 192.33.4.12 G.ROOT-SERVERS.NET. 6d23h48m47s IN A 192.112.36.4 F.ROOT-SERVERS.NET. 6d23h48m47s IN A 192.5.5.241 B.ROOT-SERVERS.NET. 6d23h48m47s IN A 128.9.0.107 J.ROOT-SERVERS.NET. 6d23h48m47s IN A 198.41.0.10 K.ROOT-SERVERS.NET. 6d23h48m47s IN A 193.0.14.129 L.ROOT-SERVERS.NET. 6d23h48m47s IN A 198.32.64.12 M.ROOT-SERVERS.NET. 6d23h48m47s IN A 202.12.27.33 </verb></tscreen> <p>To je preusmeritev. Dobili samo samo "Authority section", brez "Answer section". Naš lastni imenski strežnik nas preusmeri. Izberimo naključno enega: <tscreen><verb> $ dig +norec +noH +noques +nostats +nocmd prep.ai.mit.edu. @H.ROOT-SERVERS.NET. ; (1 server found) ;; res options: init defnam dnsrch ;; got answer: ; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 3, ADDITIONAL: 3 ;; AUTHORITY SECTION: MIT.EDU. 2D IN NS BITSY.MIT.EDU. MIT.EDU. 2D IN NS STRAWB.MIT.EDU. MIT.EDU. 2D IN NS W20NS.MIT.EDU. ;; ADDITIONAL SECTION: BITSY.MIT.EDU. 2D IN A 18.72.0.3 STRAWB.MIT.EDU. 2D IN A 18.71.0.151 W20NS.MIT.EDU. 2D IN A 18.70.0.160 </verb></tscreen> Takoj nas preusmeri na MIT.EDU strežnik. Ponovno naključno izberemo nek strežnik: <tscreen><verb> $ dig +norec +noH +noques +nostats +nocmd prep.ai.mit.edu. @bitsy.mit.edu ; (1 server found) ;; res options: init defnam dnsrch ;; got answer: ; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4 ;; ANSWER SECTION: prep.ai.mit.edu. 3h50m7s IN A 198.186.203.18 ;; AUTHORITY SECTION: AI.MIT.EDU. 6H IN NS FEDEX.AI.MIT.EDU. AI.MIT.EDU. 6H IN NS LIFE.AI.MIT.EDU. AI.MIT.EDU. 6H IN NS ALPHA-BITS.AI.MIT.EDU. AI.MIT.EDU. 6H IN NS BEET-CHEX.AI.MIT.EDU. ;; ADDITIONAL SECTION: FEDEX.AI.MIT.EDU. 6H IN A 192.148.252.43 LIFE.AI.MIT.EDU. 6H IN A 128.52.32.80 ALPHA-BITS.AI.MIT.EDU. 6H IN A 128.52.32.5 BEET-CHEX.AI.MIT.EDU. 6H IN A 128.52.32.22 </verb></tscreen> <p>Tokrat smo dobili tudi "ANSWER SECTION" in odgovor na naše vprašanje. Razdelek "AUTHORITY SECTION" vsebuje podatek katere strežnike naj naslednjič povprašamo o <tt/ai.mit.edu/. Tako lahko neposredno njih vprašamo kadar bomo spraševali o imenih iz <tt/ai.mit.edu/. <p>Začenši z <tt/./ smo našli imenski strežnik za vsak nivo v imenu domene s pomčjo preusmeritev. Če bi uporabili lastni DNS strežnik namesto vseh drugih strežnikov bi se vsi tako zbrani podatki shranili v predpomnilnik in kar nekaj časa mu ne bi bilo potrebno ponoviti že opravljenih poizvedb. <p>V drevesni prispodobi je vsaka ``<tt/./'' v imenu vejišče. Vsak del med dvema ``<tt/./'' je ime posmazenih vej v drevesu. Po drevesu se gre tako, da se vzame želeno ime (<tt/prep.ai.mit.edu/) in poizvedemo pri korenu (<tt/./) ali pri kateremkoli že strežniku od korena proti prep.ai.mit.edu, ki ga imamo v predpomilniku. Šele ko v predpomnilniku ni več iskanih zapisov se rekurzivne poizvedbe opravijo pri zunanjih strežnikih in se sledi preusmeritvam (ang. refferal) vse dlje proti imenu. <p>Domena, o kateri se manj govori, pa je vseeno zelo pomembna je <tt/in-addr.arpa/. Prav tako, kot `navadne' domene je vgnezdena, vendar nam omogoča ravno nasprotno - da izvemo imena računalnikov iz njihovih naslovov. Pomembna stvar, ki si jo morate zapomniti je, da so IP naslovi v domeni <tt>in-addr.arpa</tt> zapisani v obratnem vrstnem redu. Če je naslov računalnika <tt>192.128.52.43</tt>, je postopek, ki ga ubere named prav takšen, kot za <tt>prep.ai.mit.edu</tt>: najdi strežnik za <tt>arpa.</tt>, najdi strežnik <tt>in-addr.arpa.</tt>, najdi strežnik za <tt>192.in-addr.arpa.</tt>, najdi strežnik za <tt>128.192.in-addr.arpa.</tt>, najdi strežnik za <tt>52.128.192.in-addr.arpa.</tt> in končno najdi zapise za <tt>43.52.128.192.in-addr.arpa.</tt> Pametno, kajne? (Recite `da'.) Prav dejstvo, da so številke obrnjene, lahko povzroči veliko zmešnjavo. <sect1>Naša lastna domena <p>Sedaj bomo definirali našo lastno domeno - <tt/linux.izmislek/ in v njej definirali računalnike. Uporabil sem popolnoma izmišljeno domeno; tako smo lahko gotovi, da ne bomo motili koga Tam Zunaj. <p>Še ena stvar, preden začnemo: imena računalnikov ne smejo vsebovati določenih znakov - omejeni smo na črke angleške abecede: a-z, številke: 0-9 in znak '-' (pomišljaj). Držite se jih. Velikosti črk DNS ne razlikuje, zato je <tt/pat.uio.no/ isto kot <tt/Pat.UiO.No/. <p>Delo smo začeli že s tem razdelkom v <tt/named.conf/: <code> zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; }; </code> <p>Prosim, zapomnite si, da na koncu domen v tej datoteki ni pike `<tt/./'. Ta razdelek pove, da bomo sedaj definirali <tt/0.0.127.in-addr.arpa/, da smo za to domeno glavni (angl. master) strežnik in da so podatki zanjo shranjeni v datoteki <tt>pz/127.0.0</tt>. Datoteko smo že prej ustvarili, vsebuje pa: <code> $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. </code> <p>Prosim, zapomnite si pike `<tt/./' na koncu vseh polnih domen v tej datoteki, kot nasprotje datoteki <tt/named.conf/. Nekateri ljudje začnejo vsako `zone' datoteko z ukazom <tt/$ORIGIN/, vendar je to popolnoma odveč. Izvor (kam v DNS hierarhiji spada) datoteke `zone' je namreč naveden v <tt>named.conf</tt>, v tem primeru je to <tt/0.0.127.in-addr.arpa/. <p>Ta datoteka `zone' vsebuje tri zapise virov (ang.: RRs, resource records): SOA, NS in PTR. SOA pomeni začetek pristojnosti (ang.: Start Of Authority). `@' je oznaka za izvor in ker je v stolpcu `domena' za to datoteko navedeno 0.0.127.in-addr.arpa, prva vrstica v resnici pomeni <tscreen><verb> 0.0.127.in-addr.arpa. IN SOA ... </verb></tscreen> <p>NS je zapis vira imenskega strežnika (ang.: Name Server RR). Na začetku te vrstice ni oznake `@', ker se to ohranja še iz prejšnje vrstice - takšen način prihrani veliko tipkanja. Zapis vira NS bi torej lahko zapisali tudi kot <tscreen><verb> 0.0.127.in-addr.arpa. IN NS ns.linux.bogus </verb></tscreen> <p>DNS-u pove, kateri računalnik je strežnik za domeno <tt/0.0.127.in-addr.arpa/ in to je <tt/ns.linux.izmislek/. 'ns' je standardno ime za imenske strežnike, kot je <tt/www./<em/nekaj/ standardno ime za spletne strežnike, vendar to ni pravilo - ime je lahko karkoli. <p>Zapis vira PTR (Domain Name Pointer) pravi, da je računalniku na naslovu 1 v podmreži <tt/0.0.127.in-addr.arpa/, torej 127.0.0.1, ime <tt/localhost/. <p>Zapis SOA (Start Of Authority) je glava za <em/vse/ datoteke `zone', ki morajo vsebovati natanko en zapis SOA. Ta zapis vsebuje podatke o domeni, od kod prihaja (računalnik z imenom <tt/ns.linux.izmislek/), kdo je odgovoren za njeno vsebino (<tt/hostmaster@linux.izmislek/ - tukaj vstavite svoj e-mail naslov), katera različica datoteke `zone' je to (serijska številka: 1) in druge podatke, ki imajo opraviti z DNS strežniki s predpomnenjem ter sekundarnimi DNS strežniki. Za vsa ostala polja (osveževanje - refresh, ponoven poskus - retry, razveljavljenje - expire in minimum) se zanesite na številke, ki so navedene v tem HOWTO-ju in vse bi moralo ustrezno delovati. Pred zapisom SOA pride obvezna vrstica <tt/$TTL 3D/. Vsi vaše `zone' datoteke naj jo vsebujejo. <p>Now restart your named (the command is <tt/ndc restart/) and use dig to examine your handy work. <tt/-x/ asks for the inverse query: <p>Sedaj ponovno zaženite named (ukaz je <tt/ndc restart/) in uporabite dig za ogled vašega dela. <tt/-x/ opravi obratno poizvedbo (ang. reverse query): <tscreen><verb> $ 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: 5 msec ;; FROM: lookfar to SERVER: default -- 127.0.0.1 ;; WHEN: Sat Dec 16 01:13:48 2000 ;; MSG SIZE sent: 40 rcvd: 110 </verb></tscreen> <p>Torej uspe preslikati 127.0.0.1 v <tt/localhost/. Odlično. Sedaj se lahko spravimo k našemu glavnemu opravilu, domeni <tt/linux.izmislek/. Najprej vstavimo nov razdelek 'zone' v <tt/named.conf/: <code> zone "linux.bogus" { notify no; type master; file "pz/linux.bogus"; }; </code> <p>Spet si zapomnite, da na koncu domen v <tt/named.conf/ ni pik `<tt/./'. <p>V datoteko `zone' <tt/linux.izmislek/ bomo napisali nekaj popolnoma izmišljenih podatkov: <code> ; ; Zone file for linux.bogus ; ; The full zone file ; $TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds ; NS ns ; Inet Address of name server MX 10 mail.linux.bogus ; Primary Mail Exchanger MX 20 mail.friend.bogus. ; Secondary Mail Exchanger ; localhost A 127.0.0.1 ns A 192.168.196.2 mail A 192.168.196.4 </code> <p>O zapisu SOA si morate zapomniti dve stvari. <tt/ns.linux.izmislek/ <em/mora/ biti resničen računalnik z zapisom A. Prepovedano je imeti zapis CNAME za računalnik, naveden v zapisu SOA. Vsekakor ni pomembno, da je njegovo ime 'ns', lahko je kakršno koli veljavno ime. Druga stvar; hostmaster.linux.izmislek se bere kot hostmaster@linux.izmislek in mora biti obstoječ naslov ali preusmeritev naslova, na katerega bo oseba, ki vzdržuje DNS prejemala pošto (ta oseba naj pošto tudi redno pregleduje). Ni nujno, da je to ravno `hostmaster' - lahko je vaš navaden e-mail naslov, vendar se pogosto pričakuje, da obstaja tudi naslov `hostmaster'. <p>V tej datoteki je nov zapis vira, in sicer MX, kar pomeni poštni strežnik (ang.: Mail eXchanger). Ta zapis pove sistemom, kam naj pošljejo pošto, ki je naslovljena na <tt/nekdo@linux.izmislek/, v tem primeru na <tt/mail.linux.izmislek/ ali <tt/mail.prijatelj.izmislek/. Številka pred imeni računalnikov pomeni prednost. Če je le mogoče, se pošta pošlje strežniku z najmanjšo številko (10), sicer pa naslednjemu z najmanjšo številko, v tem primeru <tt/mail.prijatelj.izmislek/, ki ima prednost 20. <p>Ponovno zaženite named z ukazom <tt>ndc restart</tt> in opazujte rezultate z dig-om: <tscreen><verb> $ dig any linux.bogus +pfmin ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23499 ;; QUERY: 1, ANSWER: 4, AUTHORITY: 1, ADDITIONAL: 1 ;; QUERY SECTION: ;; linux.bogus, type = ANY, class = IN ;; ANSWER SECTION: linux.bogus. 3D IN MX 10 mail.linux.bogus.linux.bogus. linux.bogus. 3D IN MX 20 mail.friend.bogus. linux.bogus. 3D IN NS ns.linux.bogus. linux.bogus. 3D IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ) ; minimum </verb></tscreen> <p>Po pazljivem opazovanju boste odkrili napako. Vrstica <tscreen><verb> linux.bogus. 3D IN MX 10 mail.linux.bogus.linux.bogus. </verb></tscreen> <p>je popolnoma napačna. Morala bi biti <tscreen><verb> linux.bogus. 3D IN MX 10 mail.linux.bogus. </verb></tscreen> <p>Namenoma sem naredil napako, da se boste lahko iz nje naučili :-) Če pogledate v datoteko `zone', boste ugotovili, da v vrstici: <tscreen><verb> MX 10 mail.linux.bogus ; Primary Mail Exchanger </verb></tscreen> <p>manjka pika. Ali drugače povedano, ima 'linux.izmislek' preveč. Če se v datoteki `zone' ime računalnika ne konča s piko, se mu doda izvor in v tem primeru povzroči dvojen <tt/linux.izmislek.linux.izmislek/. Torej je <code> MX 10 mail.linux.bogus. ; Primary Mail Exchanger </code> ali <code> MX 10 mail ; Primary Mail Exchanger </code> pravilno. Priporočam uporabo druge možnosti, ker je potrebnega manj tipkanja. Nekateri BIND strokovnjaki se s tem ne bodo strinjali, nekateri pa se bodo. V datoteki `zone' je lahko domena napisana in se konča s `<tt/./', ali pa ni napisana in se namesto nje privzame izvorna domena. <p>Poudariti moram, da v named.conf <em/ne sme/ biti pike na koncu domen. Še sanja se vam ne, kolikokrat je `<tt/./' preveč ali premalo zamešala stvari in popolnoma zmedla ljudi. <p>Zdaj, ko sem vam vse to povedal, je tu nova, popravljena datoteka `zone' s še nekaj dodatnimi informacijami: <code> ; ; Zone file for linux.bogus ; ; The full zone file ; $TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds ; TXT "Linux.Bogus, your DNS consultants" NS ns ; Inet Address of name server NS ns.friend.bogus. MX 10 mail ; Primary Mail Exchanger MX 20 mail.friend.bogus. ; Secondary Mail Exchanger localhost A 127.0.0.1 gw A 192.168.196.1 HINFO "Cisco" "IOS" TXT "The router" ns A 192.168.196.2 MX 10 mail MX 20 mail.friend.bogus. HINFO "Pentium" "Linux 2.0" www CNAME ns donald A 192.168.196.3 MX 10 mail MX 20 mail.friend.bogus. HINFO "i486" "Linux 2.0" TXT "DEK" mail A 192.168.196.4 MX 10 mail MX 20 mail.friend.bogus. HINFO "386sx" "Linux 1.2" ftp A 192.168.196.5 MX 10 mail MX 20 mail.friend.bogus. HINFO "P6" "Linux 2.1.86" </code> <p>Tukaj smo spoznali še cel kup novih zapisov: HINFO, informacija o računalniku (ang.: Host INFOrmation), ima dva dela in dobra navada je, da ju izpolnite. Prvi del je strojna oprema ali procesor računalnika, drugi pa operacijski sistem. Računalnik z imenom 'ns' ima procesor Pentium in poganja Linux 2.0. CNAME, kanonično ime (ang.: Canonical NAME) je način za poimenovanje istega računalnika z več različnimi imeni. V našem primeru je www alternativno ime za ns. <p>Uporaba zapisa CNAME je nekoliko sporna, vendar se je popolnoma varno ravnati po pravilu, da se zapisi MX, CNAME in SOA ne smejo <em/nikoli/ nanašati na zapis CNAME, temveč samo na nekaj z zapisom A. Na primer, ni priporočljivo, da imate <code> foobar CNAME www ; NE! </code> medtem, ko je takole pravilno <code> foobar CNAME ns ; Da! </code> <p>Prav tako se je varno zanašati na to, da CNAME ni dovoljeno ime računalnika za e-mail naslov: <tt/webmaster@www.linux.izmislek/ na primer ni dovoljen naslov glede na zgoraj navedene nastavitve. Pričakujete lahko, da bo kar nekaj administratorjev Tam Zunaj hotelo, da to pravilo upoštevate, čeprav za vas morda deluje. Način, da preprečite težave je uporaba zapisov A (in še nekaterih drugih, na primer MX): <code> www A 192.168.196.2 </code> <p>Nekaj BIND super-strokovnjakov celo priporoča, naj se zapisi CNAME <em/sploh/ ne uporabljajo, vendar razprava 'zakaj da' in 'zakaj ne' ne spada v ta HOWTO. <p>Kot ste lahko že opazili, se ta HOWTO in mnogo strežnikov ne drži tega pravila. <p>Naložite novo bazo podatkov z ukazom <tt/ndc reload/, ki pove named, naj še enkrat prebere svoje datoteke. <tscreen><verb> $ dig linux.bogus axfr ; <<>> DiG 8.2 <<>> linux.bogus axfr $ORIGIN linux.bogus. @ 3D IN SOA ns hostmaster ( 199802151 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ) ; minimum 3D IN NS ns 3D IN NS ns.friend.bogus. 3D IN MX 10 mail 3D IN MX 20 mail.friend.bogus. 3D IN TXT "Linux.Bogus, your DNS consultants" gw 3D IN TXT "The router" 3D IN HINFO "Cisco" "IOS" 3D IN A 192.168.196.1 localhost 3D IN A 127.0.0.1 mail 3D IN HINFO "386sx" "Linux 1.2" 3D IN MX 10 mail 3D IN MX 20 mail.friend.bogus. 3D IN A 192.168.196.4 www 3D IN CNAME ns donald 3D IN TXT "DEK" 3D IN HINFO "i486" "Linux 2.0" 3D IN MX 10 mail 3D IN MX 20 mail.friend.bogus. 3D IN A 192.168.196.3 ns 3D IN HINFO "Pentium" "Linux 2.0" 3D IN MX 10 mail 3D IN MX 20 mail.friend.bogus. 3D IN A 192.168.196.2 ftp 3D IN HINFO "P6" "Linux 2.1.86" 3D IN MX 10 mail 3D IN MX 20 mail.friend.bogus. 3D IN A 192.168.196.5 @ 3D IN SOA ns hostmaster ( 199802151 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ) ; minimum ;; Received 29 answers (29 records). ;; FROM: lookfar to SERVER: 127.0.0.1 ;; WHEN: Sat Dec 16 01:35:05 2000 </verb></tscreen> <p>Tole je v redu. Kot lahko vidite, je izpis zelo podoben sami datoteki `zone'. Poglejmo, kaj pravi samo za <tt/www/: <tscreen><verb> $ dig www.linux.bogus +pfmin ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27345 ;; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 1 ;; QUERY SECTION: ;; www.linux.bogus, type = A, class = IN ;; ANSWER SECTION: www.linux.bogus. 3D IN CNAME ns.linux.bogus. ns.linux.bogus. 3D IN A 192.168.196.2 </verb></tscreen> <p>Z drugimi besedami, pravo ime <tt/www.linux.izmislek/ je <tt/ns.linux.izmislek/, poleg tega pa vam poda še nekaj drugih informacij o ns, dovolj, da bi se lahko priključili nanj, če bi bili program. <p>Sedaj smo na polovici poti. <sect1>Obratni vnosi (ang. Reverse zone) <p>Sedaj lahko programi pretvorijo imena v domeni linux.izmislek v naslove, na katere se lahko priključijo, potrebujemo pa še obratne vnose, ki bodo omogočili DNS-u, da pretvarja naslove v imena. Imena so pomembna informacija za mnoge strežnike (FTP, IRC, WWW in druge), ki na podlagi tega odločajo, ali se bodo sploh pogovarjali z vami ali ne ter kakšno prednost vam bodo dali v primeru, da se bodo. Za popoln dostop do vseh storitev na internetu potrebujete obratne vnose. <p>Dodajte tole v <tt/named.conf/: <code> zone "196.168.192.in-addr.arpa" { notify no; type master; file "pz/192.168.196"; }; </code> <p>Stvar je natanko takšna, kot pri <tt/0.0.127.in-addr.arpa/, pa tudi vsebina je podobna: <code> $TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; Serial, todays date + todays serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR gw.linux.bogus. 2 PTR ns.linux.bogus. 3 PTR donald.linux.bogus. 4 PTR mail.linux.bogus. 5 PTR ftp.linux.bogus. </code> <p>Ponovno zaženite named (<tt/ndc restart/) in ponovno preglejte vaše delo z dig: <code> $ dig -x 192.168.196.4 +pfmin ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8764 ;; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUERY SECTION: ;; 4.196.168.192.in-addr.arpa, type = ANY, class = IN ;; ANSWER SECTION: 4.196.168.192.in-addr.arpa. 3D IN PTR mail.linux.bogus. </code> <p>Zaenkrat izgleda v redu, preglejmo še vse naenkrat: <code> dig -x 192.168.196 AXFR ; <<>> DiG 8.2 <<>> -x AXFR $ORIGIN 196.168.192.in-addr.arpa. @ 3D IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ) ; minimum 3D IN NS ns.linux.bogus. 4 3D IN PTR mail.linux.bogus. 2 3D IN PTR ns.linux.bogus. 5 3D IN PTR ftp.linux.bogus. 3 3D IN PTR donald.linux.bogus. 1 3D IN PTR gw.linux.bogus. @ 3D IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ) ; minimum ;; Received 8 answers (8 records). ;; FROM: lookfar to SERVER: 127.0.0.1 ;; WHEN: Sat Dec 16 01:44:03 2000 </code> <p>Odlično! Če vaš izpis ne izgleda takole, poglejte v syslog za sporočila o napakah, kot sem razložil na začetku tega poglavja pod naslovom <ref id="starting" name="Zagon named">. <sect1>Opozorila <p>Rad bi dodal še nekaj stvari. IP številke, ki sem jih uporabil v primerih, navedenih tukaj, so vzete iz blokov 'zasebnih mrež', kar pomeni, da se jih v internetu ne sme uporabljati za prave naslove. So pa zato varne za uporabo v primerih. Druga stvar, na katero vas moram opozoriti je vrstica <tt/notify no;/, ki pove named, naj svojih sekundarnih strežnikov ne opozarja na spremembe datotek `zone'. V BIND-8 lahko named opozori druge strežnike, navedene v zapisih NS, kadar se kakšna od teh spremeni. To je sicer pripravno pri resnični uporabi, za privatne poskuse pa mora biti izključeno --- saj vendar nočemo, da bi naši poskusi onesnažili internet, kajne? <p>In seveda, ta domena je popolnoma izmišljena, kot so izmišljeni tudi naslovi v njej. Za primer prave domene glejte naslednje poglavje. <sect1>Zakaj obratne poizvedbe ne delujejo. <p>Obstaja nekaj ``pasti'' pri postavljanju obratnih vnosov, ki jih navadno rešimo z imenskimi poizvedbami. Preden greste naprej, potrebujete delujoče obratne vnose - če vam ne delujejo, pojdite nazaj in jih popravite. <p>Razložil bom dve možnosti, zaradi katerih obratni vnosi ne delujejo, kot so videti iz izven vašega omrežja. <sect2>Obratni vnosi niso pristojni. <p>Ko dobite od ponudnika internetnih storitev svoj del omrežja in domeno, je domena navadno pristojna za ta del omrežja. Pristojnost je zapis NS, lepilo, ki vam omogoča priti od enega imenskega strežnika do drugega, kot sem pojasnil v poglavju o teoriji. Saj ste ga prebrali ? Če vaši obratni vnosi ne delujejo, pojdite nazaj in ga preberite. Zdaj. <p>Tudi obratni vnosi morajo biti pristojni za določen del omrežja. Če ste dobili omrežje <tt/192.168.192/ z domeno <tt/linux.izmislek/, mora ponudnik v svoje datoteke `zone' zapisati tako vnos NS za imenske poizvedbe, kot tudi vnos NS za obratne poizvedbe. Če sledite verigi od <tt/in-addr.arpa./ do vas, boste verjetno našli prekinitev - najverjetneje pri vašem ponudniku. V tem primeru ga kontaktirajte in ga prosite za odpravo napake. <sect2>Imate brezrazredno podmrežo <p>To je dokaj zapletena tema, vendar so brezrazredne podmreže dandanes zelo pogoste in če niste vsaj srednje veliko podjetje, ste v njej najverjetneje tudi vi. <p>Brezrazredne podmreže danes ohranjajo internet pri življenju. Nekaj let nazaj je bilo veliko razprav o pomanjkanju IP številk. Pametni ljudje v IETF (Internet Engineering Task Force, organizacija, ki skrbi za internet) so staknili glave in iznašli rešitev. Za določeno ceno. Ta cena je, da dobite manj kot ``C'' podmrežo, poleg tega pa se lahko zgodi, da nekaj stvari ne bo delalo. Oglejte si <url name="Ask Mr. DNS at" url="http://www.acmebw.com/askmrdns/00007.htm" > za dobro razlago o tem in kako se s tem spopasti. <p>Ste prebrali? Tega ne bom razlagal, zato si, prosim, preberite. <p>Prvi del problema je, da mora vaš ponudnik interneta razumeti tehniko, ki jo opisuje Mr. DNS. Nekateri majhni ponudniki je ne razumejo popolnoma, zato jim jo boste morda morali razložiti. Prej se prepričajte, da jo sami obvladate ;-) Ponudnik bo nato postavil obratne vnose na njihovem strežniku, kar lahko preverite z dig. <p>Drugi in zadnji del problema pa je, da morate tudi vi razumeti tehniko. Če o tem niste prepričani, pojdite nazaj in preberite še enkrat, nato pa lahko postavite vaše lastne brezrazredne obratne vnose, kot vam to opisuje Mr. DNS. <p>Obstaja pa še ena težava. Stari programi <em/ne bodo/ sposobni slediti triku <tt/CNAME/ v verigi poizvedovanja in zato ne bodo sposobni naresti obratnih poizvedb za vaš računalnik. To lahko pomeni, da vas bo strežnik razvrstil v napačen razred, vam prepovedal dostop oziroma storil kaj podobnega. Če njegove usluge resnično potrebujete, je edina možnost (ki jo jaz poznam), da poprosite vašega ponudnika, naj vstavi vaš PTR zapis v njihovo brezrazredno datoteko `zone', namesto v trik s CNAME vnosom. <p>Nekateri ponudniki interneta vam bodo ponudili tudi drugačne rešitve, kot so spletni forumi za obratne vnose in podobni avtomagični sistemi. <sect1>Sekundarni (ang. Slave) strežniki <p>Zatem, ko ste pravilno vzpostavili svojo zono na primarnem strežniku morate vzpostaviti vsaj še en sekundarni strežnik. Ti so potrebni zaradi zanesljivosti. Če vaš strežnik pade bodo tako lahko uporabniki še vedno prišli do potrebnih podatkov za vašo domeno s pomočjo sekundarnega strežnika. Sekundarni strežnik naj bo čim dlje od vas in naj imata čim manj skupnega od sledečega: električno napajanje, LAN povezava, ponudnika internet storitev, mesto in deželo. Če so našteti atributi vsi različni za primarni in sekundarni strežnik imate zelo dober sekundarni strežnik. <p>Sekundarni strežnik je imenski strežnik, ki prekopira vse zone datoteke iz primarnega strežnika. Nastavite ga na sledeči način: <code> zone "linux.bogus" { type slave; file "sz/linux.bogus"; masters { 192.168.196.2; }; }; </code> <p>Uporabi se mehanizem imenovan prenos zone (ang. zone-transfer). Tega nadzira vas SOA. <code> @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds </code> <p>Zona se prenese le, če je serijska številka na primarnem strežniku večja od tiste na sekundarnem. Na vsak osveževalni interval (ang. refresh) sekundarni preveri ali ima primarni novejši zapis. Če zaradi nedosegljivosti ni mogoče preveriti zapisa bo poskusil vsak interval kot je določeno v polju ponovni poskus (ang. retry). Če bo primarni nedosegljiv ves čas do izeeka razveljavitnega (ang. expire) intervala sekundarni odstrani to zono iz datotečnega sistema in ne bo več posredoval njenih podatkov . <sect>Osnovne varnostne nastavitve. <label id="security"> <p><em/Od Jamie Norrish/ <p><bf/Nastavitve za zmanjšanje možnosti za težave./ <p>Nekaj preprostih korakov, ki povečajo varnost in potencialno zamnjšajo njegovo obremenitev. Tu predstavljena snov je le začetna točka; če vas skrbi varnost (in naj bi vas) si oglejte še ostali material na internetu (glej <ref id="bigger" name="Zadnje poglavje">). <p>Sledeče nastavitve se pojavijo v <tt/named.conf/. Če se nastavitve pojavi v razdelku <tt/options/ se tiče vseh zon v tisti datoteki. Če se pojavi znotraj vnosa <tt/zone/ se tiče le tiste zone. Zapis v <tt/zone/ vnosu je močnejši od tistega v <tt/options/ razdelku. <Sect1>Omejevanje prenosa zone <p>Da bi lahko sekundarni strežniki odgovarjali na poizvedbe morajo najprej prenesti zono iz vašega primarnega strežnika. Zelo malo drugih ima to potrebo. Zato omejite prenose zone z <tt/allow-transfer/ nastavitvijo. Privzemimo, da je 192.168.1.4 IP številka strežnika ns.friend.bogus in dodajte še sebe za razhroščevalne namene: <code> zone "linux.bogus" { allow-transfer { 192.168.1.4; localhost; }; }; </code> <p>S to omejitvijo so ljudem na voljo le podatki, ki jih neposredno zahtevajo. Nihče ne more dobiti natančnih podatkov o vaši postavitvi. <Sect1>Zaščita proti prikrivanju naslova. <p>Najprej onemogočite poizvedbe za domene, ki jih nimate v lasti razen z vaših notranjih/lokalnih računalnikov. S tem ne samo, da onemogočite zlonamerno uporabo vašega strežnika ampak tudi omejite nepotrebno uporabo vašega strežnika. <code> options { allow-query { 192.168.196.0/24; localhost; }; }; zone "linux.bogus" { allow-query { any; }; }; zone "196.168.192.in-addr.arpa" { allow-query { any; }; }; </code> <p> Za tem onemogočite rekurzivne poizvedbe razen z vaših notranjih/lokalnih računalnikov. S tem se izognete napadom z okvarjenimi podatki (ang. cache poisoning attack - napačne podatki se podtaknejo vašemu strežniku). <code> options { allow-recursion { 192.168.196.0/24; localhost; }; }; </code> <Sect1>Uporaba named kot ne-root <p>Zelo dobro je, da vaš named strežnik teče pod drugim uporabnikom kot pa je root. S tem možni vlomilec (ang. cracker) nima na voljo vseh pravic. Najprej morate ustvariti uporabnika in skupino pod katero naj teče named in nato popravite named zagonsko (ang. init) skripto. Named-u nastavite uporabniško ime in skupino z stikaloma -u in -g. <p>Na primer, v Debian GNU/Linux 2.2 spremenite skripto <tt>/etc/init.d/bind</tt> tako, da vsebuje vrstico: <code> start-stop-daemon --start --quiet --exec /usr/sbin/named -- -u named -g named </code> <p>Isto se da narediti pri Red Hat in ostalih distribucijah. Dave Lugo je opisal varno dvojno postavitev z ječo (ang. chroot) <url url="http://www.etherboy.com/dns/chrootdns.html">, ki bi utegnila biti zanimiva za branje. <sect>Primer prave domene<label id="real-example"> <p><bf>Tukaj je nekaj <em/pravih/ datotek `zone'</bf> <p>Uporabniki so predlagali, da poleg učnih primerov vključim tudi datoteke prave in delujoče domene. <p>Te primere uporabljam z dovoljenjem Davida Bullocka z LAND-5. Datoteke so bile posnete 24. septembra 1996 in sem jih nato nekoliko popravil, da delujejo z BIND-8, zato se to, kar vidite tu, nekoliko razlikuje od rezultatov, ki jih dobite iz poizvedovanja pri imenskih strežnikih LAND-5. <sect1>/etc/named.conf (ali /var/named/named.conf) <p>Tukaj lahko najdemo glavne razdelke `zone' za dvoje obratnih vnosov: omrežje 127.0.0 in omrežje LAND-5 <tt/206.6.177/. Tu je tudi primarni razdelek za <tt/land-5.com/. Pozorni bodite na to, da datoteke niso shranjene v mapi <tt/pz/, kot v tem HOWTO-ju, temveč v mapi <tt/zone/. <code> // Boot file for LAND-5 name server options { directory "/var/named"; }; zone "." { type hint; file "root.hints"; }; zone "0.0.127.in-addr.arpa" { type master; file "zone/127.0.0"; }; zone "land-5.com" { type master; file "zone/land-5.com"; }; zone "177.6.206.in-addr.arpa" { type master; file "zone/206.6.177"; }; </code> <p>Če boste to datoteko skopirali v vaš named.conf, da bi se igrali, <bf/PROSIM/, vpišite še vrstico ``<tt>notify no;</tt>'' v razdelke `zone' za obe <tt>land-5</tt>, da preprečite nesreče. <sect1>/var/named/root.hints <p>Zapomnite si, da je ta datoteka dinamična in zato tale ni več veljavna. Svojo lahko naredite z dig-om, kot sem razložil. <code> ; <<>> DiG 8.1 <<>> @A.ROOT-SERVERS.NET. ; (1 server found) ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10 ;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13 ;; QUERY SECTION: ;; ., type = NS, class = IN ;; ANSWER SECTION: . 6D IN NS G.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. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.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 I.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. ;; ADDITIONAL SECTION: G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241 ;; Total query time: 215 msec ;; FROM: roke.uio.no to SERVER: A.ROOT-SERVERS.NET. 198.41.0.4 ;; WHEN: Sun Feb 15 01:22:51 1998 ;; MSG SIZE sent: 17 rcvd: 436 </code> <sect1>/var/named/zone/127.0.0 <p>Samo osnove; nujen zapis SOA in zapis, ki preslika 127.0.0.1 v <tt/localhost/. Oba sta potrebna. Ni potrebno, da je v tej datoteki še kaj. Verjetno ne bo nikoli potrebno, da jo popravljate, razen, če se spremeni imenski strežnika ali e-naslov administratorja DNS. <code> @ IN SOA land-5.com. root.land-5.com. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS land-5.com. 1 PTR localhost. </code> <p>Če si ogledate naključno BIND namestitev boste najbrž ugotovili, da manjka <tt/$TTL/ tako kot tu. Prej ni bila uporabljena in šele različica BIND-a 8.2 je pričela opozarjati o tem, da je ni. Svetujem, da v vsako zone datoteko vstavite vrstico <tt/$TTL/. <sect1>/var/named/zone/land-5.com <p>Tukaj lahko vidimo zapis SOA in potreben zapis NS. Kot lahko opazite, ima LAND-5 tudi sekundarni imenski strežnik na <tt/ns2.psi.net/. Tako tudi mora biti: <em/vedno/ mora obstajati izven določene strani še sekundarni imenski strežnik, za vsak slučaj. Vidimo lahko, da obstaja glaven računalnik, <tt>land-5</tt>, ki skrbi za veliko različnih internetnih storitev in ima tudi nekaj alternativnih imen narejenih s CNAME (druga možnost je uporaba zapisov A). <p>Iz zapisa SOA je razvidno, da domena izvira iz <tt/land-5.com/, kontaktna oseba je <tt/root@land-5.com/. Tudi <tt/hostmaster/ je pogosto uporabljen naslov za kontaktno osebo. Serijska številka je v formatu yyyymmdd (leto, mesec, dan) s pripeto dnevno serijsko številko; to je verjetno šesta verzija te datoteke na dan 20. septembra 1996. Zapomnite si, da se serijska številka <em/mora/ povečevati monotono in ker je današna serijska številka omejena na <em/eno/ cifro, mora po 9 popravkih počakati do naslednjega dne, da lahko ponovno popravlja datoteko. Premislite ali ne bi uporabili dveh številk. <code> @ IN SOA land-5.com. root.land-5.com. ( 199609206 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds NS land-5.com. NS ns2.psi.net. MX 10 land-5.com. ; Primary Mail Exchanger TXT "LAND-5 Corporation" localhost A 127.0.0.1 router A 206.6.177.1 land-5.com. A 206.6.177.2 ns A 206.6.177.3 www A 207.159.141.192 ftp CNAME land-5.com. mail CNAME land-5.com. news CNAME land-5.com. funn A 206.6.177.2 ; ; Workstations ; ws-177200 A 206.6.177.200 MX 10 land-5.com. ; Primary Mail Host ws-177201 A 206.6.177.201 MX 10 land-5.com. ; Primary Mail Host ws-177202 A 206.6.177.202 MX 10 land-5.com. ; Primary Mail Host ws-177203 A 206.6.177.203 MX 10 land-5.com. ; Primary Mail Host ws-177204 A 206.6.177.204 MX 10 land-5.com. ; Primary Mail Host ws-177205 A 206.6.177.205 MX 10 land-5.com. ; Primary Mail Host ; {Many repetitive definitions deleted - SNIP} ws-177250 A 206.6.177.250 MX 10 land-5.com. ; Primary Mail Host ws-177251 A 206.6.177.251 MX 10 land-5.com. ; Primary Mail Host ws-177252 A 206.6.177.252 MX 10 land-5.com. ; Primary Mail Host ws-177253 A 206.6.177.253 MX 10 land-5.com. ; Primary Mail Host ws-177254 A 206.6.177.254 MX 10 land-5.com. ; Primary Mail Host </code> <p>Če si ogledate imenski strežnik land-5, boste ugotovili, da so imena računalnikov v obliki <tt/ws_/<em/številka/. Po BIND-4 je named namreč začel zahtevati, da se točno držite znakov, ki se smejo uporabiti v imenih. BIND-8 s tem sploh ne bi deloval več, zato sem zamenjal `_' s pomišljajem (-). <p>Še ena zanimiva stvar je dejstvo, da delovne postaje nimajo individualnih imen, temveč so le-ta sestavljena iz predpone in zadnjih delov IP številk. Uporaba takšnega sistema lahko močno olajša vzdrževanje, vendar je precej neosebna in je lahko povod za nejevoljo vaših strank. <p>Vidimo lahko tudi, da je <tt/funn.land-5.com/ alternativno ime za <tt/land-5.com/, vendar z uporabo zapisa A in ne CNAME. To je dobra politika, kot sem povedal že prej. <sect1>/var/named/zone/206.6.177 <p>Komentarji za to datoteko sledijo za njo. <code> @ IN SOA land-5.com. root.land-5.com. ( 199609206 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS land-5.com. NS ns2.psi.net. ; ; Servers ; 1 PTR router.land-5.com. 2 PTR land-5.com. 2 PTR funn.land-5.com. ; ; Workstations ; 200 PTR ws-177200.land-5.com. 201 PTR ws-177201.land-5.com. 202 PTR ws-177202.land-5.com. 203 PTR ws-177203.land-5.com. 204 PTR ws-177204.land-5.com. 205 PTR ws-177205.land-5.com. ; {Many repetitive definitions deleted - SNIP} 250 PTR ws-177250.land-5.com. 251 PTR ws-177251.land-5.com. 252 PTR ws-177252.land-5.com. 253 PTR ws-177253.land-5.com. 254 PTR ws-177254.land-5.com. </code> <p>Obratni vnosi so del nastavitev, ki povzroča največ težav. Uporabljajo se za iskanje imena računalnika, če imate njegovo IP številko. Primer: ste IRC strežnik in sprejemate povezave IRC klientov. Toda - ste norveški IRC strežnik in želite sprejemati le povezave klientov na norveškem in v drugih skandinavskih država. Ko se na vas priključi klient, vam lahko vaša C knjižnica pove IP številko računalnika, ki se je priključil, ker je le-ta napisana v vsakem paketu podatkov, ki pride po internetu. Sedaj lahko pokličete funkcijo gethostbyaddr, ki preslika IP številko v ime računalnika. Gethostbyaddr bo vprašal DNS strežnik in ta bo prevzel iskanje imena. Predpostavimo, da se je poskusil priključiti klient z ws-177200.land-5.com. IP številka, ki vam jo pove C knjižnica, je 206.6.177.200. Da ugotovimo ime računalnika moramo najti <tt>200.177.6.206.in-addr.arpa</tt>. DNS strežnik bo najprej našel strežnike za <tt>arpa.</tt>, nato strežnike za <tt>in-addr.arpa.</tt> in sledil po številkah 206 in 6 ter končno našel strežnik za <tt>177.6.206.in-addr.arpa.</tt> na LAND-5. Od njega bo dobil odgovor, da ima za <tt>200.177.6.206.in-addr.arpa</tt> zapis ``<tt>PTR ws-177200.land-5.com</tt>'', kar pomeni, da k naslovu <tt>206.6.177.200</tt> spada ime <tt>ws-177200.land-5.com</tt>. Tako opis poizvedbe za <tt/prep.ai.mit.edu/ je tudi ta malce fiktivna. <p>Pojdimo nazaj k primeru IRC strežnika. Strežnik sprejema samo povezave iz skandinavskih dežel, to je <tt/*.no/, <tt/*.se/ in <tt/*.dk/. Ime <tt/ws-177200.land-5.com/ vsekakor ne ustreza nobeni od teh možnosti, zato bo strežnik zavrnil povezavo. Če <em/ne bi/ bilo obratnih preslikav za <tt/206.6.177.200/ skozi <tt/in-addr.arpa/, strežnik sploh ne bi mogel najti imena računalnika in vse, kar bi imel za primerjati z <tt/*.no/, <tt/*.se/ in <tt/*.dk/ bi bilo <tt/206.2.177.200/ - kar se seveda ne bi ujemalo. <p>Nekateri ljudje vam bodo govorili, da so obratne poizvedbe pomembne samo za strežnike, oziroma, da sploh niso pomembne. Ni res: mnogi ftp, novičarski, IRC in celo nekateri http (WWW) strežniki vam <em/ne bodo/ dovolili, da se priključite z računalnika, katerega imena ne morejo izvedeti. Zato so obratne poizvedbe v resnici <em/obvezne/. <sect>Vzdrževanje<label id="maint"> <p><bf/Skrbite, da bo vse delovalo./ <p>Poleg tega, da skrbite, da bo vse delovalo, imate še eno nalogo - vzdržujte datoteko <tt/root.hints/ točno. To je najenostavneje z uporabo programa dig. Najprej ga zaženite brez argumentov in dobili boste <tt/root.hints/ glede na vaš strežnik, nato pa zaženite dig še z enim od korenskih strežnikov: <tt/dig @korenski-strežnik/. Izhod, ki ga dobite, je nova datoteka root.hints. Shranite ga v datoteko (<tt/dig @e.root-servers.net . ns >root.hints.nov/) in zamenjajte staro datoteko <tt/root.hints/ z njo. <p>Ne pozabite ponovno zagnati named potem, ko ste zamenjali datoteko. <p>Al Longyear mi je poslal skript za vzdrževanje <tt/root.hints/, ki ga lahko poganjate avtomatično - v crontab vpišite vnos, ki ga bo pognal vsak mesec, nato pa lahko nanj pozabite. Skript predpostavlja, da imate delujočo elektronsko pošto in da na vašem računalniku obstaja naslov `hostmaster'. Da bo ustrezala vašim nastavitvam, jo morate prirediti svojim potrebam. <code> #!/bin/sh # # Posodobimo predpomnilniško datoteko imenskega strežnika enkrat na mesec. # To skripto samodjeno zaganja vnos v crontabu. # # Original je napisal Al Longyear # Za BIND 8 priredil Nicolai Langfeldt # David A. Ranch je poročal o različnih možnih napakah # Test s pingom je predlagal Martin Foster # Ali named deluje? - test predlagal Erik Bryer. # # ( echo "To: hostmaster <hostmaster>" echo "From: system <root>" # Is named up? Check the status of named. case `ndc status 2>&1` in *'cannot connect to command channel'*) echo "named is DOWN. root.hints was NOT updated" echo exit 0 ;; esac PATH=/sbin:/usr/sbin:/bin:/usr/bin: export PATH # NOTE: V /var/named smejo pisati le ta skripta in ustrezni uporabniki # ne bo odprl zmožnosti za zlonamerno prekinitev delovanja strežnika # ali možnosti za vlom v račun superuporabnika - root. cd /var/named 2>/dev/null || { echo "Subject: Cannot cd to /var/named, error $?" echo echo "The subject says it all" exit 1 } # Smo povezani v internet? Pingajmo strežnik vašega ponudnika case `ping -qnc 1 some.machine.net 2>&1` in *'100% packet loss'*) echo "Subject: root.hints NI posodobljen. Mreža NE DELUJE." echo echo "The subject says it all" exit 1 ;; esac dig @e.root-servers.net . ns >root.hints.new 2> errors case `cat root.hints.new` in *NOERROR*) # Delovalo je :;; *) echo "Posodobitev datoteke root.hints NI USPELA." echo echo "Posodavljanje root.hints ni uspelo" echo "dig je sporočil sledeče:" echo cat root.hints.new errors exit 1 ;; esac echo "Subject: Datoteka root.hints je posodobljena" echo echo "Datoteka root.hints sedaj vsebuje sledeče podatke:" echo cat root.hints.new chown root.root root.hints.new chmod 444 root.hints.new rm -f root.hints.old errors mv root.hints root.hints.old mv root.hints.new root.hints ndc restart echo echo "Imenski strežnik je bil ponovno zagnan in sedaj ve za morebitne spremembe." echo "Prejšnja datoteka root.hints se zdaj imenuje /var/named/root.hints.old." ) 2>&1 | /usr/lib/sendmail -t exit 0 </code> <p>Morda ste izvedeli, da je datoteka <tt/root.hints/ na voljo tudi preko ftp protokola na Internic. Prosim vas, da za posodabljanje <tt/root.hints/ uporabljate raje dig, ker je ta možnost bolj prijazna tako do interneta kot do Internica. <sect>Prehod iz različice 4 v različico 8<label id="bind8"> <p>To poglavje, ki ga je napisal David E. Smith (dave@bureau42.ml.org) je bilo v originalu poglavje o uporabi BIND 8. Da se sklada z novim naslovom, sem ga nekoliko popravil. <p>Na to temo ni potrebno veliko besed. Razen tega, da se uporablja named.conf namesto named.boot, je vse popolnoma enako. BIND 8 ima tudi skripto v perlu, ki vam pretvori stare datoteke v nove. Primer named.boot (starejša različica) za imenski strežnik s predpomnilnikom: <code> directory /var/named cache . root.hints primary 0.0.127.IN-ADDR.ARPA 127.0.0.zone primary localhost localhost.zone </code> V mapi bind8/src/bin/named (<em/tu predvidevam, da imate pred seboj izvorno kodo. Če imate paket s prevedenim programom, je skripta verjetno prav tako nekje nameščena, vendar ne vem točno, kje. -ed/) v ukazno vrstico napišite: <code> ./named-bootconf.pl < named.boot > named.conf </code> To naredi named.conf: <code> // generated by named-bootconf.pl options { directory "/var/named"; }; zone "." { type hint; file "root.hints"; }; zone "0.0.127.IN-ADDR.ARPA" { type master; file "127.0.0.zone"; }; zone "localhost" { type master; file "localhost.zone"; }; </code> <p>Deluje za vse, kar je lahko v <tt>named.boot</tt>, čeprav ne doda novih pridobitev in možnosti, ki jih omogoča BIND 8. Tule je bolj popoln <tt/named.conf/, ki deluje enako, vendar nekoliko bolj učinkovito. <code> // To je nastavitvena datoteka za named (BIND 8.1 ali novejši). // Navadno bo inštalirana v /etc/named.conf // Edina razlika med to in `že pripravljeno' datoteko (poleg tega // komentarja :) je to, da sem odkomentiral vrstico `directory', ker // sem datoteke `zone' že imel v /var/named. options { directory "/var/named"; datasize 20M; }; zone "localhost" IN { type master; file "localhost.zone"; }; zone "0.0.127.in-addr.arpa" IN { type master; file "127.0.0.zone"; }; zone "." IN { type hint; file "root.hints"; }; </code> <p>V distribuciji BIND 8 lahko v mapi bind8/src/bin/named/test najdete to in nekaj izvodov datotek `zone', ki jih večina ljudi lahko prekopira in takoj uporabi. <p>Formati datotek `zone' in <tt/root.hints/ so enaki, tako kot tudi ukazi za njihovo posodobljanje. <sect>Vprašanja in odgovori<label id="qanda"> <p>Prosim, preberite to poglavje predno mi pišete. <enum> <item>Moj named zahteva datoteko named.boot <p>Berete napačen HOWTO. Poglejte si starejšo različico teg HOWTO-ja, ki pokriva bind 4, na <url url="http://www.math.uio.no/~janl/DNS/"> <item>Kako uporabljam DNS izza požarnega zidu? <p>Namig: <tt>forward only;</tt>, Verjetno boste potrebovali tudi <code> query-source port 53; </code> <p>v razdelku ``options'' v datoteki <tt>named.conf</tt>, kot je napisano v primeru <ref id="caching" name="Imenski strežnik s predpomnilnikom">. <item>Kako naj prepričam DNS, da periodično obrača razpoložljive naslove za določeno storeitev, na primer za www.zelo-zaseden.com, da se obremenitev porazdeli na več računalnikov? <p>Naredite več <bf/A/ zapisov za www.zelo-zaseden.com in uporabite bind 4.9.3 ali novejšega. Potem bo bind avtomatsko spreminjal svoje odgovore. S prejšnjimi različicami binda to <em/ne bo/ delovalo. <item>Rad bi postavil DNS na (zaprtem) intranetu. Kaj moram storiti? <p>Izpustite datoteko <tt/root.hints/ in napišite le datoteke `zone'. To tudi pomeni, da vam ne bo treba posodabljati datoteke root.hints. <item>Kako postavim sekundarni (pomožni) imenski strežnik? <p>Če ima primarni/glavni strežnik naslov 127.0.0.1, dodajte tale razdelek v named.conf sekundarnega strežnika: <code> zone "linux.bogus" { type slave; file "sz/linux.bogus"; masters { 127.0.0.1; }; }; </code> <p>V polje <tt>masters</tt> lahko vpišete tudi več glavnih strežnikov, ločenih s ';' (podpičji). <item>Rad bi poganjal bind tudi, ko nisem priključen na internet. <p>Obstajajo štiri rešitve v zvezi s tem: <itemize> <item>Specific to BIND 8, Adam L Rice has sent me this e-mail, about how to run DNS painlessly on a dialup machine: <item>Specifično za BIND 8, Adam L Rice mi je poslal sledeče e-sporočilo o tem kako teče DNS brez težav na računalnikom z dostopom na klic: <tscreen><verb> Odkril sem novo različico BINDa pri kateri to [<em/prekladanje datoek, -ed/] ni več potrebno. Obstaja nastavitev "forward" poleg nastavitve "forwarders", ki nadzira kako se uporabljajo. Privzeta nastavizev je "forward first", ki najprej povpraša vse strežnike podane v "forwarders" nastavitvi in šele za tem poskuša opraviti normalen, dolgotrajen postopek. Zato gethostbyname() klic traja tako dolgo časa, ko povezave ni. Toda, če se nastavi "forward only" potem BIND obupa, ko ne dobi odgovora od posredovalcev. Tako se gethostbyname() hitro vrne. Zato potem se ni potrebno igrati z premeščanjem datotek v /etc in ponovnim zagonomo strežnika. V mojem primeru sem le dodal vrstice forward only; forwarders { 193.133.58.5; }; v options { } razdelku moje named.conf datoteke. Deluje zelo lepo. Edina pomanjkljivost tega je spremeni zelo napreden kos DNS programja v neumen predpomnilnik. Ponekod bi želel uporabljati samo neumen DNS predpomnilnik, toda ni videti, da bi kaj takega obstajalo za Linux </verb></tscreen> <item>To pismo sem prejel od Iana Clarka, <ic@deakin.edu.au>. V njem opisuje, kako to stori. <tscreen><verb> Named tukaj poganjam na računalniku za 'Maškerado'. Imam dve datoteki root.hints, ena se imenuje root.hints.real in vsebuje resnične podatke, druga pa je root.hints.fake in vsebuje... ---- ; root.hints.fake ; this file contains no information ---- Ko se odklopim od interneta, prekopiram datoteko root.hints.false v root.hints in ponovno zaženem named. Ko pa se priključim v internet, skopiram root.hints.real v root.hints in ponovno zaženem named. Oboje naredita skripti ip-down in ip-up. Prvič, ko naredim poizvedbo o domeni, named nima podatkov o njej in v `messages' napiše... Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN kar pa me ne moti. Zame vsekakor odlično deluje. Imenski strežnik lahko uporabljam za lokalne računalnike, medtem, ko niso priključeni v internet, in sicer brez poteka časa za zunanje domene, medtem, ko pa sem priključen v internet, delujejo poizvedbe normalno. </verb></tscreen> <p>Peter Denison je menil, da Ian ne gre dovolj daleč in je napisal: <tscreen><verb> Ko povezan) Nudi predpomnjene (in LAN) vnose takoj. Nepredpomnjene vnose pa posreduj imenskemu strežniku ISP-ja Ko nepovezan) Nudi LAN vnose takoj Za ostale poizvedbe **takoj** vrni napako. Kombinacija spreminjanja root.cache datoteke in posredovanja poizvedb ne deluje. Zato sem vzpostavil (po debati z lokalnim LUGom - Linux Users Group) dva nameda kot je dano: named-povezan: posreduje imenskemu strežniku ISPja primarni za zono lokalnet primarni za obratno lokalnet zono (1.168.192.in-addr.arpa) primarni za 0.0.127.in-addr.arpa posluša na vratih 60053 named-zaprt: brez posredovanja "nepravi" root.cache datoteka sekundarni za 3 localnet zone (primarni je 127.0.0.1:60053) posluša na vratih 61053 Skupaj z preusmerjanjem vrat, ki preusmeri vrata 53 na 61053, ko sem povezan in na 60053, ko sem nepovezan. (Uporabljam novi netfilter paket pod 2.3.18, toda stari (ipchains) mehanizem bi tudi moral delovati.) Opozorilo, to ne bo delovalo čisto iz-škatle, ker je majhen hrošč v BIND-u 8.2, ki sem ga že posredoval razvijalcem, ki prepreči delovanje sekundarnega, če je primarni na istem IPju (četudi je na drugih vratih). Gre za enostaven popravek, ki bo moral kmalu biti dodan. </verb></tscreen> <item>Od Karl-Maxa Wagnerja sem prejel tudi informacijo, kako bind deluje vzajemno z NFS in portmapper-jem na računalniku, ki večinoma ni priključen v internet: <tscreen><verb> Navadno poganjam lasten named na vseh računalnikih, ki so le občasno priključeni v internet preko modema. Imenski strežnik se obnaša le kot predpomnilnik, nima področja pristojnosti in za vse poizvedbe sprašuje strežnike iz datoteke root.hints. Kot je v navadi za Slackware, se tudi zažene pred nfsd in mountd. Z enim od mojih računalnikov (Libretto 30 notebook) sem imel težavo - včasih sem ga lahko dosegel z drugega sistema, priključenega v moj LAN, večino časa pa to ni delovalo. Ista težava se je pojavila ne glede nato, ali sem uporabljalj PLIP, PCMCIA mrežno kartico ali PPP po serijski povezavi. Po nekaj ugibanja in poskušanja sem ugotovil, da je named nekako pokvaril postopek registracije, ki ga nfsd in mountd izvedeta s portmapper-jem pri zagonu (navadno takrat, ko zaženem računalnik). Zagon named po nfsd in mountd je to težavo popolnoma odpravil. Ker tako spremenjena zagonska procedura nima stranskih učinkov, vam priporočam, da jo popravite in tako preprečite morebitne težave. </verb></tscreen> <item>Zadnja možnost so HOWTO informacije o povezavah na klic <url name="Ask Mr. DNS at" url="http://www.acmebw.com/askmrdns/#linux-dialup">, ki pa govorijo o bind 4 in jih morate zato prilagoditi za bind 8. </itemize> <item>Kje ima named svoj predpomnilnik? Lahko kako vplivam na njegovo velikost? <p>Predpomnilnik je v celoti shranjen v spominu in ni <em/nikoli/ zapisan na disk, zato vsakič, ko ubijete named, izgubite njegovo vsebino. Predpomnilnika <em/ni mogoče/ upravljati. Named ga uredi po nekih preprostih pravilih in to je to. Njegove vsebine in velikosti ne morete na noben način spremeniti ali omejiti. Če želite, lahko to ``popravite'' s hekanjem named, vendar vam tega ne priporočam. <item>Ali named shranjuje predpomnilnik med ponovnimi zagoni? Ga lahko pripravim do tega, da ga shrani? <p>Named svojega predpomnilnika <em/ne/ shranjuje, ko umre. To pomeni, da mora predpomnilnik zgraditi na novo vsakič, ko ga ubijete in ponovno zaženete. <em/Ni načina/, da bi named shranil svoj predpomnilnik v datoteko. Če želite, lahko to ``popravite'' s hekanjem named, vendar vam tega ne priporočam. <item>Kako lahko dobim domeno? Želel bi svojo lastno domeno (na primer) <tt/linux-rules.net/. Kako bi lahko to domeno pripisal nase? <p>Povprašajte svojega ponudnika internet storitev, on vam bo zagotovo lahko pomagal. Vendar si zapomnite, da je v večini delov sveta potrebno za domeno plačati. <item>Kako lahko zavarujem svoj DNS ? Kako uredim ločena DNSa ? <p>Oboje sta napredi temi in o njima lahko preberete v <url url="http://www.etherboy.com/dns/chrootdns.html">. O tem ne bom tu več razglajbljal. </enum> <sect>Kako postati veliki DNS administrator.<label id="bigger"> <p><bf/Dokumentacija in orodja./ <p>Prava Dokumentacija obstaja, na internetu in v tiskani obliki. Potrebno je, da preberete nekaj te dokumentacije in tako naredite korak od majhnega do velikega administratorja. V tiskani obliki sem napisal <em/The Concise Guide to DNS and BIND/ (avtor: Nicolai Langfeldt), založil Que (ISDN 0-7897-2273-9). Knjiga je podobno temu HOWTO-ju. Samo več podrobnosti in več vsega. Tipična knjiga pa je <em/DNS in BIND/ avtorja sta C. Liu in P. Albitz iz O'Reilly & Associates, Sebastopol, CA, ISBN 0-937175-82-X. Tudi ta je odlična. V 3. izdaji pokriva tako BIND8 kot BIND 4. Poglavje o DNS-u je tudi v <em/Administracija omrežja TCP/IP/, čigar avtor je Craig Hunt iz O'Reilly..., ISBN 0-937175-82-X. Še eno nujno branje za Dobro administracijo DNS-a (oziroma dobro karkoli) je <em/Zen in umetnost vzdrževanja motornih koles/, avtor Robert M. Pirsig :-) Dosegljivo je kot ISBN 0688052304 in druge. <p>Na internetu boste našli dobre stvari na <url url="http://www.dns.net/dnsrd/"> (Mapa z zapisi o DNS), <url url="http://www.isc.org/bind.html">; FAQ, in referenčni priročnik (BOG; Bind Operations Guide), pa tudi članki in definicije protokola in DNS trikov (skoraj, če ne popolnoma vse RFC-je navedene spodaj najdete tudi v distribuciji bind-a). Večino teh sploh nisem prebral in zato tudi nisem velik DNS administrator. Arnt Gulbrandsen pa je prebral BOG in je popolnoma zanesen :-). Obstaja novičarska skupina o DNS, <url url="news:comp.protocols.tcp-ip.domains">, poleg tega pa je na internetu tudi veliko število RFC-jev o DNS-u. Najpomembnejši so verjetno spodaj nanizani. Tisti, ki imajo BCP (ang. Best Current Practice) so <em/zelo priporočljivi/. <descrip> <tag/RFC 2671/ P. Vixie, <em/Extension Mechanisms for DNS (EDNS0)/ August 1999. <tag/RFC 2317/, BCP 20, H. Eidnes et. al. <em/Classless IN-ADDR.ARPA delegation/, March 1998. Govori o CIDR oz. brezrazrednem obratnih poizvedbah. <tag/RFC 2308/, M. Andrews, <em/Negative Caching of DNS Queries/, March 1998. O negativnem prepomnenju in o $TTL nastavitvi zone datotek. <tag/RFC 2219/, BCP 17, M. Hamilton and R. Wright, <em/Use of DNS Aliases for Network Services/, October 1997. O uporabi CNAME. <tag/RFC 2182/, BCP 16, R. Elz et. al., <em/Selection and Operation of Secondary DNS Servers/, July 1997. <tag/RFC 2052/ A. Gulbrandsen, P. Vixie, <em/A DNS RR for specifying the location of services (DNS SRV)/, October 1996 <tag/RFC 1918/ Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear, <em/Address Allocation for Private Internets/, 02/29/1996. <tag/RFC 1912/ D. Barr, <em/Common DNS Operational and Configuration Errors/, 02/28/1996. <tag/RFC 1912 Errors/ B. Barr <em/Errors in RFC 1912/, this is available at <url url="http://www.cis.ohio-state.edu/~barr/rfc1912-errors.html"> <tag/RFC 1713/ A. Romao, <em/Tools for DNS debugging/, 11/03/1994. <tag/RFC 1712/ C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, <em/DNS Encoding of Geographical Location/, 11/01/1994. <tag/RFC 1183/ R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, <em/New DNS RR Definitions/, 10/08/1990. <tag/RFC 1035/ P. Mockapetris, <em/Domain names - implementation and specification/, 11/01/1987. <tag/RFC 1034/ P. Mockapetris, <em/Domain names - concepts and facilities/, 11/01/1987. <tag/RFC 1033/ M. Lottor, <em/Domain administrators operations guide/, 11/01/1987. <tag/RFC 1032/ M. Stahl, <em/Domain administrators guide/, 11/01/1987. <tag/RFC 974/ C. Partridge, <em/Mail routing and the domain system/, 01/01/1986. </descrip> </article>