DNS - Domain Name Service

teejuht

                1. Sissejuhatus
                2. IP aadress, hostname ja nslookup
                3. Kuidas DNS üles panna - lihtne näide
 

Sissejuhatus

DNS on mõiste mida kasutatakse kõneldes arvutite IP aadresside ja nimede vahelisest seosest. Ilma põhjalikumalt peatumata teemal anname lühida praktilise seisukoha :)

Siiski, olgu teada, et igal võrgukaardil on tavaliselt üks IP (Internet Protocol) aadress (kujul xxx.xxx.xxx.xxx nt. 193.40.0.12).
Tõsi, võimalik on ka omistada ühele füüsilisele kaardile mitu IP aadressi; seda tehnikat nimetetakse IP aliasinguks.

Ühel arvutil on tavaliselt üks võrgukaart, seega ka üks IP aadress. Aga serverites (sh. arvutites mida kasutatakse kahe või enama alamvõrgu ühendamiseks) on tihtipeale mitu võrgukaarti. Igal üks IP aadress.

Normaalne on olukord kus üks kaart peab ühendust välismaailmaga ja teine ja kolmas tegelevad kumbki oma alamvõrguga. Niisiis, serveri IP aadress (isegi nimi) oleneb millisest alamvõrgust serveri poole vaadata.

Olgu kohe öeldud, et laias laastus jagunevad IP aadresseid kahte klassi:

reserveeritud kohalikuks kasutamiseks 192.168.xxx.xxx ja
reaalsed, need on kõik ülejäänud. (nt. 193.40.0.12)

Internet koosneb seega suurest hulgast väikestest ( 10 - 100 arvutit) masinatest millest mõned on nö. päris IP aadressiga. Kõik ülejäänud on nn. 192.168.xxx.xxx alamvõrgu masinad. Nood masinad ei saa põhimõtteliselt olla serveriteks (globaalses tähenduses). Nad Interneti kliendid, küll aga nad saavad olla kohalikud print - serverid vms.

Siinkohal võiks ja ilmselt ka peaks rääkima põhjalikult võrgu topoloogiast ja IP aadresside jaotamisest A, B, C klassidesse. Kindlasti netmaskidest ja broadcastist. Seda ma praegu ei suuda teha nii, et ma tulemusega ise rahul oleksin :(

Seega, tuleb mis tuleb!

Kaadri (teatud möönudustega ka arvuti) IP aadress ja hostname - nslookup

Igal Internetis suhtlev arvutil on seega identifitseeritud ühe või mitme IP aadressiga.

võite järgi proovida: sisestage nt. Netscape Locationi reale 194.126.101.67

Kes pole viimased aastad elanud Mongoolias ja ennast täiesti Eestist ja eesti keelest lahti rebinud tunned ära nö. www.neti.ee!

Veel võite proovida nt. 193.40.76.18 ja peaks jõudma EÜP (veel tasustama reklaam :) koduleheni. (www.eyp.ee)

Ja paljuski on DNS (ja seda realiseeriv programm bind (mida käivitatakse tavaliselt 'ndc start') oma andmebaasiga) vaid selleks, et seada arvudele vastavusse nimed. Sest inimene mäletab tähenduslikke sõnu paremini kui arve.
Teisendusi arvudest nimedeks näeb käsuga 'nslookup' nii:

kopka:~$ nslookup 194.126.101.67
Server:  kopka.tkg.tartu.ee
Address:  193.40.51.51
Aliases:  51.51.40.193.in-addr.arpa

Name:    neti.neti.ee
Address:  194.126.101.67

kopka:~$
 

Siit on näha, kes on seatud teie nimeserveriks ehk kus arvutis töötab DNS'i teostav programm bind:

Server:  kopka.tkg.tartu.ee
Address:  193.40.51.51
Aliases:  51.51.40.193.in-addr.arpa
 

vastus on mitte-autoratiivne, st. et kopka.tkg.tartu.ee bind'i andmebaasis ei sisaldu otseselt www.ee kohta andmeid. Küll aga on keegi varem kas otseselt (nslookup'iga) või kaudselt (nt. web'is kolades) küsinud kopka käest selle masina kohta.

ja muidugi vastus küsimusele:

Name:    neti.neti.ee
Address:  194.126.101.67

Kusjuures tema nimeks on neti.neti.ee! (vt. all pool)

nslookup'i võib kasutada ka vastupidi:

kopka:~# nslookup www.eyp.ee
Server:  kopka.tkg.tartu.ee
Address:  193.40.51.51
Aliases:  51.51.40.193.in-addr.arpa

Non-authoritative answer:
Name:    wilhelm.eyp.ee
Address:  193.40.76.18
Aliases:  www.eyp.ee
 
 

kopka:~# nslookup www.neti.ee
Server:  kopka.tkg.tartu.ee
Address:  193.40.51.51
Aliases:  51.51.40.193.in-addr.arpa

Non-authoritative answer:
Name:    neti.neti.ee
Address:  194.126.101.67
Aliases:  www.neti.ee

kopka:~#

Ja siit näeme kohe ära huvitava asja, DNS'i süsteem võimaldab siduda ühe võrgukaardiga ehk talle vastava IP aadressiga mitu nime mis on sama head! Niisiis, kas www.neti.ee või neti.neti.ee (ju seal ikka mingi minor vahe ikka on kah, aga mina ei tea).

ja te võite nslookup'i kasutada ka interaktiivselt andes käsu 'nslookup' ilma argumentideta. Abiks on siin anda käsk help või exit. Loomulikult võite küsida nüüd erinevate masinate kohta.

Kindlasti on oluline märkida võimalus vahetada nimeserverit keda te otsingus kasutate. Nt.

> set querytype=ANY
> www.neti.ee myristaja.eenet.ee
Server:  myristaja.eenet.ee
Address:  193.40.0.12

Non-authoritative answer:
www.neti.ee     canonical name = neti.neti.ee

Authoritative answers can be found from:
neti.ee nameserver = dns.estpak.ee
neti.ee nameserver = dns2.estpak.ee
dns.estpak.ee   internet address = 194.126.115.18
dns2.estpak.ee  internet address = 194.126.101.34
>

siin otsitakse www.neti.ee kohta andmeid ja kasutatakse nimeserverina myristaja.eenet.ee'd.

Näeme, et vastus on mitteautoratiivne; samas saame teada, et kasutades dns.estpak.ee'd nimeserverina saaks autoratiivse vastuse.
(St. masinas dsn.estpak.ee on füüsiliselt olemas fail mis defineerib www.neti.ee ja temale vastava IP numbri; kõik muud masinad (nimeserverid) võivad lihtsalt mäletada seda seost).

Teeme uue otsingu lootes, et tulemus on autoratiivne:

> www.neti.ee dns.estpak.ee
Server:  dns.estpak.ee
Address:  194.126.115.18

www.neti.ee     canonical name = neti.neti.ee
neti.ee nameserver = dns.estpak.ee
neti.ee nameserver = dns2.estpak.ee
dns.estpak.ee   internet address = 194.126.115.18
dns2.estpak.ee  internet address = 194.126.101.34
>

Ja voila, ongi käes.

Self-explanatory on järgmised read:

> help
$Id: nslookup.help,v 8.4 1996/10/25 18:09:41 vixie Exp $

Commands:       (identifiers are shown in uppercase, [] means optional)
NAME            - print info about the host/domain NAME using default server
NAME1 NAME2     - as above, but use NAME2 as server
help or ?       - print info on common commands; see nslookup(1) for details
set OPTION      - set an option
    all         - print options, current server and host
    [no]debug   - print debugging information
    [no]d2      - print exhaustive debugging information
    [no]defname - append domain name to each query
    [no]recurse - ask for recursive answer to query
    [no]vc      - always use a virtual circuit
    domain=NAME - set default domain name to NAME
    srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2, etc.
    root=NAME   - set root server to NAME
    retry=X     - set number of retries to X
    timeout=X   - set initial time-out interval to X seconds
    querytype=X - set query type, e.g., A,ANY,CNAME,HINFO,MX,PX,NS,PTR,SOA,TXT,WKS,SRV,NAPTR
    port=X      - set port number to send query on
    type=X      - synonym for querytype
    class=X     - set query class to one of IN (Internet), CHAOS, HESIOD or ANY
server NAME     - set default server to NAME, using current default server
lserver NAME    - set default server to NAME, using initial server
finger [USER]   - finger the optional USER at the current default host
root            - set current default server to the root
ls [opt] DOMAIN [> FILE] - list addresses in DOMAIN (optional: output to FILE)
    -a          -  list canonical names and aliases
    -h          -  list HINFO (CPU type and operating system)
    -s          -  list well-known services
    -d          -  list all records
    -t TYPE     -  list records of the given type (e.g., A,CNAME,MX, etc.)
view FILE       - sort an 'ls' output file and view it with more
exit            - exit the program, ^D also exits
>

Viimane näide selle kohta kuidas välja uurida mis on mõne masina jaoks mailiga tegijaks masinaks (st. kus on sendmail).
Muide sendmail'i töö sõltub väga DNS'i õigest konfist. Eriti neil puhkudel kui teile saadetakse kirju aga samal ajal on teie masin maas. Siis peaks olema teil mõni sõber-masin kes need vastu võtab.

kopka:~# nslookup
Default Server:  kopka.tkg.tartu.ee
Address:  193.40.51.51
Aliases:  51.51.40.193.in-addr.arpa

> set q=MX
> www.ee ns.estnet.ee
Server:  ns.estnet.ee
Address:  193.40.248.20

www.ee  preference = 30, mail exchanger = mail.eunet.ee
www.ee  preference = 10, mail exchanger = www.ee
www.ee  preference = 20, mail exchanger = port.teleport.ee
www.ee  nameserver = port.teleport.ee
www.ee  nameserver = ns.estnet.ee
www.ee  nameserver = server.mm.uninet.ee
www.ee  nameserver = ns.eunet.ee
www.ee  nameserver = ns.data.ee
mail.eunet.ee   internet address = 195.222.0.4
www.ee  internet address = 194.204.30.70
port.teleport.ee        internet address = 193.40.208.193
ns.estnet.ee    internet address = 193.40.248.20
server.mm.uninet.ee     internet address = 194.204.30.70
ns.eunet.ee     internet address = 195.222.0.1
ns.data.ee      internet address = 195.222.4.1
>

Siin pange tähele, et vastus on autoratiivne kuna kasutati tema oma nimeserverit (see tehti varem kindlaks) ja querytype võib lihtsalt kirja panna kui 'q'.

See oli siiani asja väline pool.

Märgime veel asjasse puutuva huvitava käsu: traceroute: see võtab argumendiks mingi hostaname'i ja näita milliseid hoste IP datagrammid teel sinna läbivad.

nüüd sisemine pool:

3. Kuidas DNS'i üles panna?

Alustame sellest, et lihtsalt mängime ühe arvuti peal name serverit. Vaatame, et saame asja nii kaugele, et nslookup saaks näitama nimele vastavat IP numbrit ja numbrile vastavat nime. Nagu eespool kõneldi on see üks keskne DNS'i funktsioon.

Allpool eeldame, et masina nimeks millel see nimeserver asub on juta.ee, minul on seal sees ka võrgukaart nii igaks juhuks aga see pole vist tähtis. igatahes peab käsk hostname andma mõistlikke vastuseid. Vt. arvutid võrgus sektsiooni kuidas network ja võrgukaardid paika panna.

ja kuna teie enda masinast saab nimeserver siis tuleb see ka ära näidata /etc/resolv.conf failis:

domain ee
nameserver 192.168.1.199

domain ee tähendab, et kui te nt. annate oma masinal käsu lynx juta, siis esmalt palub lynx resolverit juta IP kindlaks teha, kui see ebaõnnestub, siis liidetakse talle otsa 'ee' ja püütakse kindlaks teha 'juta.ee' aadress. See peaks juba õnnestuma.
 

Kõigepealt on vaja teil hankida  (http://www.isc.net/bind.html/) programm bind 8.1.2 ning dokumentatsioon ja programm ära kompilleerida ning installeerida -

(Slackware peal kompilleerimisel on väike parandus:

enne käitumist vastavalt juhenditele README ja INSTALL failides peaks muutrma faili

/src/port/linux/Makefile.set rea

CDEBUG= -O -g reaks

CDEBUG= -g
 

Siis installeerige ära nagu kasaasolev juhend õpetab ja seejärel tuleb luua andmebaasid:
 

/etc/named .conf :
 

options {
        directory "/var/named";
        check-names master warn;
};

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

zone "ee" {
          type master;
          file "pz/ee.zone";
};
 

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

Siin võiks teha järgmised tähelepanekud:

options -> directory näitab, kus kataloogis on tegelikud andmebaasid:

zone "0.0.127.in-addr.arpa" on alati vajalik

zone "ee"   on koht kus on kirjas vastavused nimedest IP numbriteks

zone "192.in-addr.arpa" on koht kus on kirjas vastavused IP numbritelt nimedeks

type master tähendab, et kõik siin näidatud päringud võetakse kohalikust andmebaasi failidest ja neid pole vaja netis otsimas käia.

Esialgu ma ei kirjeldaks seda kuidas Internet koosneb domainidest ja et eriline domain on nn. in-addr.arpa
Vaatame asja tööle saada!

Niisiis loome nn. tsooni ee faili '/var/named/pz/ee.zone'

@               IN      SOA    juta.ee. root.juta.ee. (
                                  4       ; Serial
                                  8H      ; Refresh
                                  2H      ; Retry
                                  1W      ; Expire
                                  4)     ; Minimum TTL
                        NS      juta.ee.
juta                    A       192.168.1.199
ut                      A       192.168.1.1
localhost.              A       127.0.0.1
 
 

Taas väike selgitus:

- @ märk on nagu muutuja mille väärtuseks on tsooni nimi kust on viide selle faili juurde; seega praegu 'ee'.

Õige oleks esimese rea asemel kirjutada ka rida:

ee.                IN            SOA            juta.ee.   root.juta.ee.  (

- IN tähendab sõna Internet ja selle koha peal tavaliselt muud ei ole.
- SOA tähendab Start of Authority millele järgnevad parameetrid. Kui nad ühele reale ei mahu kirjutatakse nad üksteise alla kusjuures sulg pannakse ette ja taha. kõi mis jääb ; märgist paremale on kommentaar

- ut.ee. on selle tsooni autoriteeriv nimeserver (st. tema teab kõige paremini vastuseid)
- root.ut.ee. tuleb lugeda kui [email protected]. ja on selle serveriga tegeleja e-mail.
Kusjuures siin on oluline . (punkt) lõpus kui see on. Ta näitab, et nimi on absoluutne.

Rida

                                      NS            juta.ee.

tähendab, et juta.ee on tsooni 'ee' nimeserver see on mõnes mõttes nagu kordamine aga nii see on.

Muide, selle rea võik kirjutada välja ka nii:

ee.                 NS            juta.ee.

Seda võiks mõista kui kokkulepet, et kui järgneva rea esimene element on puudu, siis sellena tuleb kasitleda eelneva rea esimest elementi.

juta                A             192.168.1.199

ja ülejäänud read seavad vastavusse IP numbri ja nime; antud juhul juta.ee. ja 192.168.1.199
Jah, kui A kirje esimene elemest ei lõppe punktiga, siis liidetakse talle lõppu tsooni nimi (antud juhul 'ee').

Võiks kirjutada ka nii:

juta.ee.            A             192.168.1.199
 

Kuigi tagurpidi teisendus on tegemata, siiski peaks asi tööle minema.

Nameserveri käsud:

ndc start - käivitamine
ndc restart - taaskäivitamine
ndc stop - seiskamine
ndc reload - kui muutsite vaid nn. tsoonifailide definitsioone /var/named/pz'i siis piisab sellest, vähem aega.
 

Tehke ainul ära ka /var/named/pz/127.0.0 fail:
 

@               IN      SOA    juta.ee. root.juta.ee. (
                                  1       ; Serial
                                  8H      ; Refresh
                                  2H      ; Retry
                                  1W      ; Expire
                                  1D)     ; Minimum TTL
                        NS      juta.ee.
1                       PTR     localhost.

Siit saab arvuti teada, et 127.0.0.1 'le vastab localhost.

Proovige nslookup'i või dnsquery'ga vaadata! Muide nslookup'l on tore kask:

>ls domaini.nimi

olemas.

Kui ei ole nõus näitama, siis võite asendada /etc/resolv.conf'is nameserveri real IP aadressi 127.0.0.1'ga.

(väga abiks on vaadata mis syslogi läheb: igasugused veateated ja muu.
mina tegin syslogi tty12 peale. Kuidas vaadake lehelt syslogd.)
 

Usutavasti see õnnestus.
 

Nüüd vaatame ära teha ka tagurpidi teisendusele vastava faili:

/var/named/pz/192.zone:

@               IN      SOA    juta.ee. root.juta.ee. (
                                  5       ; Serial
                                  8H      ; Refresh
                                  2H      ; Retry
                                  1W      ; Expire
                                  5)     ; Minimum TTL
                                NS      juta.ee.
199.1.168                       PTR     juta.ee.
1.1.168                         PTR     ut.ee.

Siin pole localhosti rida sest tal on omaette tsoonifail ja ega ta saakski 192.zone'is olla.
Süntaks on sama nagu nimedest IP'desse teisenduse failil.
 

Ja taas veenduge, et saate nslookup'iga kätte mis tarvis.
 

Ütelme siia lõppu, et namererver on põhimõtteliselt selline asi mis üksinda väga ei tööta. Ta esindab neid programme mida iseloomustataks mõistega 'hajutatud andmebaas' St. , et põhimõtteliselt töötavad kõik Interneti DNS'i serverid koostöös. Kui ühe käest midagi päritakse ja too ei tea siis ta küsib ise kellegi kolmnda käest jne.

Olulist tähtusust DNS'i serverite omavaelisel suhtlemisel omavad esimese kirje väljad 5, 8H, 2H jne. Esialgu las nad olla nii nagu on, hiljem kommenteerime ka nende tähendust.

Teine asi on see, et nimeserveri andmebaasis saab näidata olulisi asju mida e-mailiga teha (Nn. MX kirjed)

Jutt jätkubki sellest kuidas panna tööle mitu nameserverit nii, et nad teeksid koostööd. Samuti sellest kuidas e-mail'i asju sättida ja mis tähendab 'domain - name structure'.