DNS (Domain Name System)

Az internet egyik legfontosabb szolgáltatása a DNS (Domain Name System) vagyis Tartomány Név Rendszer. A DNS rendszer egyik legfontosabb feladata a tartomány nevek átfordítása pontosabban “feloldása”, IP-címekké való átalakítása (forward lookup). Ez fordítva is lehetséges, vagyis az IP-címekhez tartozó domain nevek meghatározása (reverse lookup).
A DNS rendszer a teljes internetre kiterjedő hierarchikus adatbázis rendszer, ez DNS szerverek ezreit jelenti. Az egyes domain-ek vagyis tartományok ún. zónákra vannak felosztva. A zónák nem csak az interneten vannak jelen, hanem egy nagyobb cég belső hálózatán is definiálhatóak, így DNS szerver működtetésére is van lehetőség, függetlenül az internetes DNS szerverektől.
A DNS szervereket úgy képzelhetjük el mint egy telefonkönyvet, amely az előfizető neve (esetünkben a domain név) alapján megadja az előfizető telefonszámát (IP-címét). Például az “akarmi.com” domain névhez tartozhat egy 111.222.111.222 alakú IP-cím. Ezt az eljárást “forward lookup”-nak nevezi az angol szakirodalom. A lekérdezést meg is fordíthatjuk oly módon, hogy a DNS szervertől megkérdezzük milyen tartomány név tartozik a példánkban említett IP-címhez. Ez a revers lookup.
Az interneten nagyon lényeges, hogy a DNS szerverek állandóan szinkronizáltan tartsák az adatbázisaikat, hiszen előfordul, hogy egy tartomány névhez tartozó IP-cím megváltozik, például olyankor, ha egy weboldalt más tárhely szolgáltatóhoz költöztetnek.

A DNS rendszert 1983-ban fejlesztette ki Paul Mockapetris. A jelenleg érvényes specifikációk közlését az RFC-ken keresztül és a betartatásukat a World Wide Web Consortium (W3C) és az Internet Engineering Task Force (IETF) végzi. Régebben a DNS szerverek helyett statikus host fájlokat használtak, de a tartomány nevek exponenciális növekedésével ennek a jelentősége nagyon gyorsan megszűnt. Manapság már csak a kisebb lokális hálózatok esetében használják, pár tíz számítógép host nevének a nyilvántartásához.

A DNS rendszer legfőbb előnyei a decentralizált adminisztráció, az egyes névtartományok hierarchikus struktúrája, a domain nevek egyértelműsítése valamint a gyors bővíthetőség.

A DNS rendszer három fő részből tevődik össze. Ezek a domain név tartományok, a névszerverek és a resolverek.
A tartomány nevek struktúráját alkalmasint úgy képzelhetjük el, mint egy fát. A fa levelei a címkék (labels). Egy tartomány név címkék láncolatából áll. Maguk a címkék alfanumerikus (betűk és számok) karakterláncolatok amelyekben csak egyetlen speciális karakter lehet a “-” (kötőjel). A címkék hossza legalább egy, de legtöbb 63 karakter lehet, csak betűvel kezdődhet, de nem végződhet kötőjellel. A tartomány név címkéit minden esetben “.” (pont) választja el. Pont van a tartomány név végén is, bár ezt a gyakorlatban elhagyjuk, azonban a szabvány megköveteli a meglétét. A szabványban azt a tartomány nevet, amely ebben a formában van leírva hibátlan teljes domain névnek (Fully Qualified Domain Name – FQDN) neveznek. Egy teljes hibátlan domain név például a “www.akarmi.com.”, szigorúan ponttal a végén. Egy domain név legfeljebb 255 karakterből állhat beleértve a pontokat a címék között és a domain név végén levőt is.
A tartomány neveket mindig a jobbról balra olvassuk és eszerint végezzük az IP-címek feloldását is. Ez azt jelenti, hogy a struktúrában minél inkább jobbra található egy címke, annál magasabb szinten áll. Az utolsó címke mindig a TLD (Top Level Domain), vagyis a legmagasabb szintű tartomány. Lássunk erre egy konkrét példát. Egy sorban leírva az RFC szabvány szerint a például szolgáló tartomány név így néz ki: “gyufa.doboz.com”. Az domain névhez tartozó hierarchia így néz ki:

com. —> TLD, a legmagasabb szint
|
—> doboz. —> ez az SLD (Second Level Domain), vagyis a másodlagos tartomány név
|
—> gyufa. —> ez a láncolat utolsó számítógépének host neve, a legalacsonyabb szint, része a másodlagos tartománynak.

Azok a programok és szoftverek, amelyek a tartomány nevek iránti kérésekre válaszolnak névszervereknek (name server) nevezzük. Köznapi nyelven a névszerver alatt fizikai számítógépet vagy kiszolgálót értünk, amelyen egy célszoftver fut, amely a tartomány nevek feloldását végzi. Minden egyes zónához egy vagy több névszerver tartozik, de legalább kettő: az elsődleges vagy autoritatív névszerver (primary name server) valamint a másodlagos névszerverek (secondary name server). Ezt a megoldást azért alkalmazzák, hogy biztosítsák a domain név rendszer redundanciáját, az adatbiztonságot és a terheléselosztást. A DNS szerverek között az adatszinkronizálás az ún. zonetransfer eljárással történik, ugyanis minkét szerveren ugyanannak a zónarekordnak kell léteznie. A másodlagos névszerverek nem autoritatívak, tehát nem tekinthetőek “biztonságosnak”.

A DNS szervereken fut egy szoftveres modul, amely a felhasználó és a DNS szerver program között áll. Valójában egy csatolófelületről van szó, amely a nem FQDN formátumban érkező kéréseket átalakítja szabványos FQDN formátummá és csak ezután küldi el a névszervernek. Ettől a ponttól kezdve különböztetjük meg a resolverek két üzemmódját: a rekurzívat és az iteratívat.
Rekurzív üzemmódban a resolver elküldi a névszervernek a kérést. Ha a kért bejegyzés megtalálható a névszerver adatbázisában, továbbítja az IP-címet a lekérdező kliensnek. Ha nem kap választ további autoritatív névszervereket kérdez le, amíg válasz nem kap. Ha nem létezik a hierarchiában egyetlen névszerveren sem a kért domain névhez tartozó IP-cím vagy maga a tartomány név, hibaüzenetet küld vissza a kliensnek.
Iteratív üzemmódban a resolver által küldött kérésre vagy a kért adat (resource record) érkezik, vagy egy link a következő névszerverhez és így tovább amíg a kért adat rendelkezésre nem áll.
Az operációs rendszerek is rendelkeznek resolverrel, de ezek csak rekurzívan képesek működni, ezért “stub-resolver”-nek is nevezik őket. A névszervereknek saját resolverjük van, amelyek iteratívan működnek.
Az operációs rendszerek resolverei lehetnek például Windows alatt az nslookup, vagy Linux/Unix környezetben a dig és a host.

A hagyományos DNS szervereken sok munkával jár az új bejegyzések készítése. A zónafájlokat sok esetben kézzel kell szerkeszteni és visszatölteni a szerverbe, így egy-egy bejegyzés érvényesítése akár több napot is igénybe vehet. Erre létezik egy megoldás a dinamikus DNS, amelynek segítségével időeltolódás nélkül megoldható az új bejegyzések érvényesítése, ám biztonsági kockázatnak tekintendő azért, mert bárki módosíthat egy bejegyzést, anélkül, hogy az előzetes ellenőrzésen menne át. A dinamikus DNS szolgáltatás minden esetben egy DHCP (Dynamic Host Configuration Protocol) szerveren keresztül történik, amely minden egyes IP-cím változtatást azonnal közöl a névszerverrel.

Ahhoz, hogy szerverünket az interneten tartomány névvel tudjuk regisztrálni, szükség van domain név regisztrátorra. A regisztrátor egy különleges engedéllyel rendelkező szolgáltató, ezt az engedélyt az IANA-tól (Internet Assigned Numbers Authority) vagy az ICANN-től (Internet Corporation for Assigned Names and Numbers) kapja meg. A regisztrátorok a domain név regisztráció előtt ellenőrzik a formai előírások betartását és ha azok megfelelnek akkor regisztrálják a kért tartomány nevet. Általában ez a szolgáltatás nem díjmentes.

Az első “ős” névszerver a BIND (Berkley Internet Name Domain) volt, amely a mai napig működik és az alapspecifikációk mindegyikét betartja. A DNSMasq kisebb hálózat névkiszolgálást oldja meg, a host fájl tartalma alapján. Ha a host fájl nem tartalmazza a kért bejegyzést, továbbküldi a kérést a névszervernek. Az NSD csakis autoritive válaszokat kezel és nagyon gyors. A Microsoft Windows DNS-t a Windows 2003 Szerver csomag tartalmazza. Kezeli a Dinamikus DNS-eket, a Zonetransfert. A zónafájlokat az Active Directory szolgáltás segítségével menteni és sokszorosítani is tudja.