Mikä on nimipalvelu, mihin sitä tarvitaan?
Nimipalvelun perustehtävä on muuntaa nimet osoitteiksi ja osoitteet nimiksi. Tämä voidaan tehdä monella tavalla. Yksi mahdollisuus on käyttää jokaisessa laitteessa määrittelytiedostoa jossa kerrotaan mikä osoite vastaa mitäkin nimeä. (Itse asiassa näin voidaan tehdä edelleenkin tietyissä erikoistapauksissa, esim. unix-järjestelmää käynnistettäessä. Aikoinaan ennen DNS:ää nimitieto välitettiin juuri tällä tavoin). Ongelmaksi muodostuu kuitenkin ylläpito: kuinka välittää muutokset kaikkialle muualle Internetissä?
Nimipalvelun peruskäsitteet
Nimipalvelun englanninkielinen lyhenne DNS tulee sanoista Domain Name Service. Nimipalvelu muodostuu käsitteellisesti yhdestä hajautetusta ja varmennetusta puumaisesta (hierarkisesta) tietokannasta. Nimipalvelua on kutsuttu 'maailman suurimmaksi hajautetuksi tietokannaksi'.
Oheisessa kuvassa on esitetty DNS-puun osa. Ylinpänä on juuri (nimetön tai '.'), ja sen alapuolella ensin päätaso sitten 2-taso. Käsitteellä alue (domain) tarkoitetaan hierarkian alipuuta, kts. kuva. Alueen nimi, siis aluenimi (domain name, kuvassa esimerkkinä in-addr.arpa.) saadaan seuraamalla polkua alipuun alkukohdasta juureen. Kun halutaan olla tarkkoja, käytetään aluenimestä pisteeseen (joka siis tarkoittaa juurta) päättyvää versiota, josta käytetään lyhennettä FQDN (Fully Qualified Domain Name). Näin voidaan varmistua siitä, ettei mikään (esim. resolveri tai nimipalvelinohjelmisto) enää liitä nimen loppuun oletusnimeä. Suomenkielien termi 'verkkotunnus' on sikäli harhaanjohtava, että tunnus aluenimi ei sinänsä liity mihinkään verkkoon, vaan jako on (tai voi olla) hallinnollinen.
Käsite vyöhyke (zone) liittyy nimipalvelun ylläpidon jakamiseen. Kuvassa on esitetty vyöhyke in-addr.arpa. Kaikkia samaan vyöhykkeeseen kuuluvia tietoja ylläpidetään yhdessä ja samassa paikassa (yleensä yhdessä tiedostossa, ns. master file). Vyöhykkeen ylläpitäjä voi halutessaan delegoida osia alueesta muiden ylläpidettäväksi. Koska aina ylemmällä tasolla kerrotaan, mistä alemmat tasot löytyvät, täytyy kaikista määritysten muutoksista (nimipalvelinten IP-osoitteiden ja nimien muutokset, lisäykset ja poistot) ilmoittaa asianmukaisella tavalla ylemmälle tasolle. Esim. jos jokin vyöhykkeen funet.fi nimipalvelimista sattuisi muuttamaan toiseen osoitteeseen, täytyy siitä kertoa fi-vyöhykkeen ylläpidolle.
Nimet osoitteiksi ja päinvastoin
Nimipalvelun päätehtävänä on muuntaa aluenimet (verkotunnukset) IP-osoitteiksi (forward DNS) ja IP-osoitteet tunnuksiksi (käänteisnimipalvelu, reverse DNS). Muunnokset suoritetaan käsitteellisesti siten, että juuresta lähtien etsitään puun oikea kohta josta haettu tieto sitten joko löytyy tai ei löydy (ellei ko. tietoa ole määritelty).
Esimerkiksi nimen www.funet.fi muuntaminen osoitteeksi tapahtuu siten, että lähtien juuresta edetään DNS-puussa ensin fi-alueeseen, josta sitten funet.fi-haaraan, josta www.funet.fi-kohdasta haluttu osoite löytyy.
Muunnettaessa osoitetta nimeksi on lähtökohtana IP-osoitteen pistenotaatio. Esim. haluttaessa tietää osoitetta 128.214.1.1 vastaava nimi, muodostetaan puusta etsittävä kohta laittamalla osoitteen tavut takaperin ja liittämällä loppuun verkotunnus in-addr.arpa. Tässä tapauksessa etsitään siis DNS-puusta kohta 1.1.214.128.in-addr.arpa, josta (toivon mukaan) löytyy osoitetta vastaava nimi.
Haettaessa tietoa dns-puusta haku aloitetaan siis juuresta. Juuripalvelin kertoo mistä seuraavan tason auktoritatiiviset nimipalvelimet löytyvät. Näiltä puolestaan löytyy tieto seuraavan tason palvelimista ja niin edelleen kunnes tullaan halutun vyöhykkeen auktoritatiiviseen palvelimeen. Tämä palvelin osaa kertoa halutun tiedon (tai sen ettei kyseistä tietoa löydy).
'Varsinainen' ja käänteisnimipalvelut ovat siis toisistaan erillisiä, ja tästä syytä käänteisnimipalvelu jää turhan usein päivittämättä tai tekemättä kokonaan, koska kaikkien palvelujen toiminta ei välttämättä edellytä aina sitä. Käänteisnimipalvelu on kuitenkin syytä pitää kunnossa, koska esim. useat Internetin posti- ja www-palvelimet edellyttävät sitä. Myös verkonvalvonta helpottuu. Lisäksi osoitteita Euroopassa jakava RIPE edellyttää käänteisnimipalvelun olemassaoloa.
Nimipalvelujärjestelmän komponentit
Jos lähdetään katsomaan nimipalvelujärjestälmää loppukäyttäjän näkökulmasta, ensimmäisenä tulee vastaan resolveri, joka löytyy muodossa tai toisessa kaikista Internetiin kytketyistä tietokoneista. Se on käyttöjärjestelmän osa, joka osaa välittää sovellusohjelman nimipalvelukyselyt lähimmälle resolvoivalle nimipalvelimelle. Unix-käyttöjärjestelmissä resolveri konfiguroidaan tiedoston /etc/resolv.conf avulla. PC-laitteissa verkkoasetuksissa on yleensä kohta 'Name Server', johon tulee siis lähimmän resolvoivan nimipalvelimen osoite. Toiseksi (varapalvelimeksi) voidaan määritellä jokin hiukan kauempanakin oleva resolvoiva nimipalvelin.
Termillä "nimipalvelin" tarkoitetaan oikeastaan kahta asiaa. Ensiksi nimipalvelin tarkoittaa resolvoivaa nimipalvelinta, jolta esimerkiksi samassa lähiverkossa tai organisaatiossa olevat laitteet voivat kysellä mitä tahansa nimipalvelukysymyksiä. Resolvoiva nimipalvelin tuntee dns-puun rakenteen ja osaa selvittää vastaukset kysymyksiin. Selvitettyään vastauksen kysymykseen resolvoiva palvelin tallettaa vastauksen välimuistiinsa, jolloin myöhemmin toistuviin kysymyksiin osataan vastata suoraan hakematta tietoja ympäri maailmaa.
Oheisessa kuvassa, resolvoivia palvelimia voisivat olla esim. ns.ali.a.fi, ns.a.fi, server.osa.a.fi ja ns.b.fi.
Toiminnaltaan toisentyypinen on auktoritatiivinen nimipalvelin, joka sisältää vähintään yhden vyöhykkeen tiedot ja josta resolvoivat palvelimet voivat kysyä tuohon vyöhykkeeseen liittyviä tietoja. Koska jokaisella vyöhykkeellä on oltava vähintään kaksi auktoritatiivista nimipalvelinta, saadaan nimipalvelutietokanta varmistettua. Äskeisessä kuvassa auktoritatiivisia nimipalvelimia ovat esim. ns.ali.a.fi, ns.a.fi, ns.b.fi, ns-secondary.funet.fi, hydra.helsinki.fi ja a.root-servers.net.
Auktoritatiivinen nimipalvelin (kuvassa ns.ali.a.fi, ns.a.fi ja ns.b.fi) voi toimia myös resolvoivana nimipalvelimena, mutta mikään ei pakota siihen. Esim. juurinimipalvelimet eivät toimi resolvoivina palvelimina. (Tämä on helppo todeta esim. dig:llä).
Auktoritatiivisista nimipalvelimista voidaan ajatella muodostuvan varmennettu puu, jonka huipulla ovat ns. juurinimipalvelimet (root name servers). Ne ovat auktoritatiivisia juurelle. Juurinimipalvelimet löytyvät root-servers.net-alueesta.
Auktoritatiiviset nimipalvelimet voidaan jakaa primaari- ja sekundaaripalvelimiin. Tällä jaolla on merkitystä vain ylläpidon kannalta. Usein sama nimipalvelin toimii primaarinimipalvelimena (kuvassa tummalla kirjoitettu a-verkkotunnus palvelimien vieressä) jollekin vyöhykkeelle ja sekundaaripalvelimena (kuvassa vaaleampi teksti) jollekin toiselle. Nimipalvelun käyttäjän kannalta ei ole eroa sillä, onko jokin auktoritatiivinen palvelin primaari- vai sekundaaripalvelin, koska niissä on normaalitilanteessa täsmälleen samat tiedot. Erona on se, että tietoja ylläpidetään vain primaaripalvelimessa, josta sekundaaripalvelimen nimipalvelinohjelmisto kopioi muuttuneet tiedot automaattisesti itselleen. Tästä operaatiostä käytetään englanninkielistä termiä zone transfer.
Nimipalvelujärjestelmän suunnittelu
Jokaisessa lähiverkossa tai toimipisteessä olisi syytä olla oma resolvoiva nimipalvelin. Tällöin verkkohäiriöt aiheuttavat mahdollisimman vähän häiriötä nimipalvelun toimintaan. On myös syytä määritellä kuhunkin laitteeseen vähintään kahden resolvoivan nimipalvelimen osoitteet. Sanomattakin on selvää että esim. resolvoivan nimipalvelimen osoitteen muuttuessa on syytä olla tarkkana.
On syytä huolehtia siitä että kunkin vyöhykkeen auktoritatiiviset palvelimet ovat mahdollisimman hyvin tavoitettavissa myös verkon vikatilanteissa. Kaikkia palvelimia ei koskaan saisi sijoittaa samaan aliverkkoon, esim. samaan ethernet-kytkimeen. On hyvä jos osa palvelimista voi olla hiukan kauempana, esim. jonkin toisen organisaation verkossa. Tästä syystä Funet-organisaatiolle on tarjolla ns-secondary.funet.fi -palvelua.
hostmaster@funet.fi