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.
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.
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.
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.
Da bih nešto pitao, morao bih nešto i znati 🙂
Jako mi se sviđa članak i volio bih da nastavite s tom serijom prosvjetljenja.
Slijedeće bi mogao bi htaccess.
Koristan članak, ali previše stručan, preskočio si vreme propagacije, kako se u praksi konfigurišu iz kontrolnog panela…
@mvarga Hvala! 😉
@Misha Kao što rekoh, opširna je tema pa su neki detalji izostavljeni, no moglo bi se uvrstiti u Part 2 😉
Super tehnicki clanak – ono sto fali je jednostavno neko objasnjenje gdje ce u pol ekrana Stefica(tm) skuziti sto to zapravo je. Svakako treba ukljucivati i obasnjenje pojma “domena” – sto je i zasto je vazna.
Tema je izuzetno opširna i o istoj se može knjiga napisati (kao što je već i učinjeno), svaka dublja analiza DNS-a zahtjeva ulazak u servise (usluge), te samo serversko okruženje (upravljanje, alate, operacijske sustave itd…). Sama ideja se čini zgodnom, ali treba joj laički pristupiti što je sistem inženjerima problem. Sam sustav odnosno algoritam traženja potrebe za prevođenje IP adresa u logička (ljudima razumljiva imena), odnosno rekurzivnim upitima bez dublje analize bi bio dovoljan.
Članak je vrlo dobar, samo me zanima kako bi se sa recimo wiresharkom moglo saznati o kojoj se vrsti rezolucije radi kad zatražimo neku adresu, dakle da li je iterativna ili rekurzivna rezolucija.
Dva su primjera rekurzivnih upita:
1. Gotovo uvijek su inicirani od strane DNS klijenta prema DNS resolveru
2. Kada je DNS resolver konfiguriran da koristi “forwardere” u slučaju da DNS upit od strane DNS klijenta ne pronađe u svojoj bazi DNS zona ili DNS cache-u.
Iterativni upit je gdje DNS klijent (u ovom slučaju DNS resolver koji se isto može smatrati DNS klijentom) omogućuje DNS poslužitelju da vrati najbolji odgovor koji može dati na temelju svog cachea ili baze DNS zona. Ako DNS poslužitelj nema informaciju, može odgovoriti s referencom na autoritativni server te tako DNS klijent (resolver) može postali upit DNS poslužitelju koji je autoritaivan za DNS zonu. Taj proces se nastavlja sve dok se ne pronađe DNS server koji je autoritativan za DNS zonu (ima zonu u svojoj bazi) a za koju je DNS klijent (resolver) tražio podatak, odnosno slao upit.
U Wiresharku ili bilo kojem drugom packet analyzeru, informacija o vrsti upita se pojavljuje u Domain Name System response paketu pod “Flagovima” a sadrži nešto slično ovome: “Recursion desired: Do query recursively” ili slično. Pogledajte pa nam javite 🙂
Trebam pomoc. Ne mogu da otvorim ruter. Adresa mu je 192.168.1.254 ali kad to ukucam u address bar otvori mi se http://www.1921681254.net/. Sto da cinim?
Poštovana Jadranka. Ne možemo sa sigurnošću dati neki konkretan odgovor jer to zaista ovisi o proizvođaču routera ali i o Vašem pružatelju internet usluga (ISP). Eventualno možete pokušati pristupiti preko telnet-a na router ako ste dični CLI sučelju, pa preko toga obaviti administraciju routera, no i to ovisi da li je ISP “pustio” telnet na routeru. Možda je najbolje rješenje direktno kontaktirati službu za korisnike Vašeg ISP-a.
E ako mi mozes pomoci puno bi mi znacilo 🙂
Uglavnom cesto mi se internet ”Crasha”
i pise DNS server isn’t responding ….
I ja sad odem na NSC (network and sharing center)
i stisnem onaj kao ” X ” xD
i tako malo sacekam i ono mi kaze ovo gore za DNS server ali se sa vremenom popravi (5 – 10 min)
Ali ne traje dugo pa opet se crasha i ja opet uradim tako nekoliko puta i ono se popravi PONOVO..
i to traje onako…1 sat il nekad 2 sata i OPET SE CRASHA!
Molim te pomozi mi ne mogu ovako vise nekad mi dodje da uzmem i komp i ekaran i sve povezano da bacim kroz prozor 😀
Pa ako mozes mi pomoci molim te pomozi..jer i sada gledam tamo na stranu oceli mi se internet crashat i gledao sam gluposti po YouTubeu kako da se popravi ali dosta toga nis ne pomaze jer je sve poprilicno isto…I usput u mene je Windows 7 sistem…