Kako radi DNS i zašto je toliko važan

Piše: Mario Cesarić

Većina prosječnih korisnika uređaja poput računala, notebooka, tableta, pametnih mobilnih uređaja (engl. smartphone) itd. ne razmišlja niti ima potrebe razmišljati o svim mogućim parametrima koje proizvođači i njihovi inženjeri moraju objediniti i implementirati kako bi ti uređaji bili jednostavni, funkcionalni i kako bi služili svojoj namjeni i korisniku, a ne korisnik njima.

Zaista je mnogo parametara da bi proizvod u konačnici obavljao svoj posao, poput hardverske i softverske izvedbe, općenito rečeno, no u ovom članku će fokus biti na djeliću softvera koji nam služi kako bi aplikacije koje koristimo što jednostavnije znale doći do nekog odredišta na globalnoj mreži – Internetu, no i unutar manjih mreža – Intranetu/Ekstranetu.

Kao što naslov govori, radi se o DNS (engl. Domain Name System) servisu koji nam to i omogućuje. Svi ga svakodnevno koristimo, možda i ne znajući za njega, pa smo mu odlučili posvetiti jedan edukativni blog post.

Ipak, kako je DNS samo po sebi dosta opširna i kompleksna tema, više ćemo se fokusirati na neke općenite tehničke detalje pristupačne korisnicima, kako bi imali lakše razumijevanje što DNS zapravo za nas radi i kako to radi te kako riješiti neke probleme vezane uz DNS i sl. Naravno, kao što svaki edukativni sustav funkcionira, prije svega mora biti malo teorije da bi razumjeli praksu ;)

DNS u teoriji

DNS je servis koji primarno služi prevođenju odnosno mapiranju alfa-numeričkih naziva u IP adresu računala (engl. Forward Lookup), ali često i obratno (engl. Reverse Lookup). Taj proces nazivamo procesom rezolucije. Kao što vjerojatno znamo, svako računalo na mreži, između ostaloga, ima i jedinstvenu oznaku a to je IP adresa. Postoje dvije vrste IP adresa, one od 4 byte-a (32-bit) – IPv4 i one od 16 byte-ova (128-bit) – IPv6. Suština računalnih algoritama je bazirana na binarnom sustavu brojeva i sve se na kraju svodi na pretvorbu u “jedinice” i “nule” (engl. bit) tako da se ime računala pomoću DNS-a usmjerava na IP adresu računala. Kao primjer uzmimo domenu avalon.hr mapiranu na IP adresu poslužitelja 80.237.232.142 a na kraju to bude zapis od 32 jedinice i nule.

Adresiranje računala, odnosno svakog mrežnog uređaja, je opet tema za sebe koju ćemo možda sažeti u nekom od sljedećih blog postova pa zasada nećemo ulaziti u detalje, no bilo je bitno skrenuti pozornost da je čovjeku teško zapamtiti skup nekakvih brojeva decimalne vrijednosti (IPv4) ili čak heksadecimalnih vrijednosti (IPv6) a to nam DNS sustavi olakšavaju lakše pamtljivim nazivima.

Struktura DNS sustava
Kako radi DNS, izvor: http://en.wikibooks.org

 

Kako i za sve drugo u informatičkoj djelatnosti trebaju postojati stroga pravila i kako se moraju poštivati strogo propisani protokoli i hijerarhija, tako i kod DNS sustava. Postoji krovna organizacija, ICAAN (engl. Internet Corporation for Assigned Names and Numbers), koja je između ostaloga zadužena za koordinaciju i alokaciju segmenata IP adresa, ali i naziva domena. Ta organizacija prema strogim pravilima odlučuje kome će, kako i u kojem omjeru dodijeliti neki naziv.

Organizacije kojima je nazivni entitet dodijeljen od strane ICAAN-a, dalje prema svojim pravilima distribuiraju, odnosno u većini slučajeva prodaju nazive krovnih domena (engl. TLD = Top-Level Domain) koje su im dodijeljene, npr. tzv generičke domene .com, .info, .net, .org ili nacionalne domene (engl. ccTLD = Country Code Top-Level Domain), npr. .hr, .ba, .rs, .it. Korisnici domene registriraju kod takvih organizacija pa te organizacije nazivamo registrarima.

Primjer rekurzivnog DNS upita
Rekurzivni DNS upit za domenu mail.yahoo.com, izvor: http://en.wikibooks.org

 

Kao što ICAAN na vrhu hijerarhije upravlja logistikom nazivlja, tako (posredstvom operatora) upravlja i tehničkim implementacijama sustava koji nama i našim računalima omogućavaju put do odredišta. Ti sustavi se nazivaju root DNS serveri i svega ih je 13 u cijelome svijetu. No to ne znači da se u svijetu nalazi samo 13 fizičkih servera, već je svaki root DNS servis dizajniran tako da uvijek postoji redundancija u slučaju ispada neke od hardverskih ili softverskih komponenti pojedinog servera.

Iako nevidljivo u nazivu domene, npr. “avalon.hr”, na kraju naziva domene se uvijek nalazi točka, dakle “avalon.hr.” koja označava neki od tih 13 root servera koji uvijek znaju kome je delegiran .hr dio domene, odnosno na kojem DNS serveru se to nalazi, dok .hr DNS server zna gdje se nalazi domena avalon, odnosno na koje računalo (server) je ta domena usmjerena. Naravno, sve to ne bi funkcioniralo da se ne poštuju strogi tehnički propisi protokola koja opet propisuje krovna organizacija za dizajn protokola – IETF (engl. Internet Engineering Task Force) koji su objedinjeni u RFC 1034 memorandumu.

Nakon malo teorije krećemo u opisivanje kako to zapravo na našim računalima funkcionira.

A sad malo prakse

Svako računalo je opremljeno nekom vrstom operativnog sustava čiji je sastavni dio komadić softvera koji omogućuje da bi se proces rezolucije dogodio. Taj softver je zapravo servis (engl. DNS Client) koji koriste aplikacije, npr. Internet preglednik, da bi znale pronaći put do odredišta, dakle programer aplikacije to mora omogućiti. Računalo također mora imati mrežnu karticu (engl. Network Interface Card), i svoj pogonski softver (engl. driver) da bi mrežna kartica znala komunicirati sa TCP/IP stackom koji je implementiran unutar operativnog sustava. Dakle, vidimo koliko je to sve skupa povezano i zato se spomenuta pravila u svijetu tehnologije moraju poštivati.

Da bi računalo znalo komunicirati sa udaljenim računalima pomoću imena mora imati zadane DNS servere, kao što je ručno zadano na Slici 1 (primjer Windows okruženja). Parametri za DNS servere ne moraju nužno biti zadani ručno, već mogu biti dodijeljeni automatski putem DHCP protokola (engl. Dynamic Host Configuration Protocol) koji je konfiguriran na našim usmjerivačima (engl. router) ili je isti konfiguriran na lokalnim serverima od strane sistem administratora.

DNS postavke u Windowsima
TCP/IPv4 – konfiguracija DNS poslužitelja

 

Primjer konfiguracije DNS poslužitelja na Linux okruženju:

$ cat /etc/resolv.conf
nameserver 192.168.1.254
nameserver 8.8.8.8

Na gornjoj slici su upisane IP adrese DNS servera koje DNS klijent (naše računalo) zadanim redoslijedom kontaktira u slučaju da ne zna na kojoj IP adresi se nalazi traženo ime. Preferirani DNS server je zapravo lokalni server opskrbljen DNS servisom koji odrađuje većinu posla u procesu rezolucije. U slučaju nedostupnosti preferiranog DNS servera, DNS klijent se prebacuje na alternativni DNS server koji to isto odrađuje. Naravno, pod uvjetom da ostatak mrežnih protokola ispravno podešen i u funkciji. Alternativni DNS server ovdje je naveden Google-ov javni DNS poslužitelj, tzv. DNS Cache server koji odgovara na upite (engl. query) DNS klijenata i pohranjuje upite određeno vrijeme (engl. caching) kako bi ubrzao proces za svaki sljedeći isti upit.

Ukratko, ovaj primjer procesa rezolucije od klijenta do DNS poslužitelja naziva se rekurzivni upit (engl. recursive query) i dalje puno ovisi o samoj konfiguraciji DNS poslužitelja. Postoji i proces rezolucije zvan iteracija (engl. iteration) a on se događa većinom kada su na DNS poslužitelju onemogućeni rekurzivni upiti, odnosno kad DNS poslužitelj odgovara samo na upite o DNS zonama koje su smještene u njegovoj bazi podataka.

Za napomenuti je da DNS serveri na vašim računalima nisu nužno IP adrese navedene u ovom primjeru, već ako ste kućni korisnik ADSL paketa imate definirane DNS servere od vašeg Internet providera. U drugim slučajevima kontaktirajte vašeg sistem administratora ;)

E sad, prije gore definiranog procesa DNS rezolucije, računalo zapravo prvo ne gleda zadane DNS servere (kao u gornjem primjeru) nego gleda hosts datoteku u kojoj se nalazi popis (ručno) mapiranih IP adresa sa nazivima. HINT: Hosts datoteka se učitava u memoriju računala čim se računalo pokrene i može sadržavati oveći popis mapiranih imena, stoga pripazite na kojekakve anti-malware aplikacije koje prilikom imunizacije sustava preventivno (dobronamjerno) mapiraju štetne stranice na 127.0.0.1 ili localhost (adresa vašeg računala), i time povećavaju veličinu hosts datoteke a samim time i boot računala (vrijedi pripaziti na slabijim računalima).

Putanja do hosts datoteke na Windows operativnom sustavu:

c:\windows\system32\drivers\etc\hosts

Putanja do hosts datoteke na Linux operativnom sustavu:

/etc/hosts

Datoteka se može mijenjati tekstualnim editorom a primjer mapiranja može biti kako slijedi:

#########################
# 127.0.0.1 imedomene.tld
1.2.3.4 testna-domena.tld
#########################

Prva linija zbog “#” može poslužiti kao komentar, dakle ne primjenjuje se u procesu rezolucije ukoliko je mapiranje zakomentirano simbolom “#”. Druga linija će uputiti DNS klijenta u procesu rezolucije da se “testna-domena.tld” nalazi na navedenoj IP adresi.

Nadalje, ukoliko se u procesu DNS rezolucije u hosts datoteci ne nalazi mapirano odredište, proces se prebacuje na lokalni DNS cache koji je također učitan u memoriju računala. DNS klijent pohranjuje svako odredište koje uspješno resolva u memoriju računala tako da prilikom sljedećeg upita ne prolazi ispočetka cijeli proces rezolucije a time se naravno i ubrzava dolazak do odredišta.

Lokalni DNS cache možete i sami vidjeti i obrisati ga, a ovo su primjeri.

Windows:

Command Prompt > ipconfig /displaydns (prikaz cachea)

Command Prompt > ipconfig /flushdns (brisanje cachea)

Za troubleshootanje DNS-a možemo koristiti alate koji su većinom ugrađeni u operativni sustav a većinom se koriste putem komandnog sučelja (cmd ili shell). Npr. nslookup se koristi na Windowsima, dig se koristi na Linuxu.

Npr. ako želimo doznati na kojoj IP adresi se nalazi mail server od avalon.hr domene:

# nslookup
> set q=MX
> avalon.hr

Server:         cache.avalon.local
Address:        192.168.1.254

Non-authoritative answer:
avalon.hr       mail exchanger = 10 avalon.hr.

Dakle, u ovom primjeru vidljivo je da pitamo preferirani DNS poslužitelj koji je konfiguriran na TCP/IP-u i da je to bio rekurzivni upit jer taj DNS poslužitelj nema autoritet nad avalon.hr domenom (zonom), odnosno nema je u svojoj bazi podataka već daljnim procesima prema konfiguriranim pravilima pita druge DNS poslužitelje i tako nam vraća odgovor.

S obzirom da sam već spomenuo kako je ovo doista opširna tema koja preilazi gabarite blog posta, ako imate kakvih pitanja slobodno komentirajte članak, pa ćemo vam pokušati odgovoriti.

Način rada DNS sustava from CARNet DNS.

Avalon koristi Disqus