IPv6 DNS-palvelin_is - papaya.ictlab.kyamk.fi serveri (alias www
Transcription
IPv6 DNS-palvelin_is - papaya.ictlab.kyamk.fi serveri (alias www
KYMENLAAKSON AMMATTIKORKEAKOULU Tietotekniikka / Tietoverkkotekniikka Simo Suurnäkki IPv6 DNS-palvelin Simunetissä Projektiopinnot TI07TIVE Kevät 2011 SISÄLLYS 1 HARJOITUSTYÖN TAVOITE 3 2 DNS 3 2.1 Yleisesti 3 2.2 BIND 4 3 TYÖN VAIHEET 3.1 Aloitus 5 3.2 Palvelimen asentaminen 6 3.3 BIND:in asentaminen 7 3.4 Hyödyllisiä komentoja 10 3.5 IP-asetukset 10 4 DNS-PALVELIMEN TOIMIVUUS JA TULEVAISUUS LÄHTEET 5 14 177 3 1 HARJOITUSTYÖN TAVOITE Tavoitteena oli tutkia ja testata IPv6-pohjaisen DNS-palvelun tuottamista Simunetverkon laitteilla. Simunet-verkko oli ennen tämän työn aloittamista saatettu tilaan, jossa sen runko pystyy siirtämään sekä IPv4- että IPv6-liikennettä. Simunet-verkon tarkoitus on jäljitellä operaattorin runkoverkkoa ja tästä syystä myös tietyt palvelut pitää saada toimimaan verkon käyttäjille. Näistä ehdottomasti tärkeimmät ja käytetyimmät ovat DNS- ja DHCP-palvelut. Operaattorin pitää pystyä tarjoamaan asiakkailleen vähintään nämä kaksi palvelua. Lähtökohtana tälle työlle oli saada aikaan toimiva DNSpalvelin, joka tarjoaa osoitteenmuunnoksen Simunetin IPv6-asiakkaille. 2 2.1 DNS Yleisesti DNS (Domain Name System) on nimipalvelujärjestelmä jonka tarkoituksena on etsiä verkkotunnukselle numeerinen IP-osoite. Koska IP-osoitteet ovat ihmiselle vaikeita muistaa johtuen niiden 32- tai 64-bittisestä numeerisestä muodosta, on kehitetty DNSpalvelu joka mahdollistaa selkeiden nimien käyttämisen tiettyä palvelinta haettaessa. Käyttäjän ei tarvitse yleensä tietää palvelimen numeerista IP-osoitetta, vaan ainoastaan sen verkkotunnus, esim. www.kyamk.fi. DNS on hierarkinen järjestelmä, jossa on paljon hajautettuja palvelimia jotka tekevät yhteistyötä. Kaikkein korkeimmalla tässä järjestelmässä ovat ns. juurinimipalvelimet (root nameserver). Juurinimipalvelimet tietävät kaikkien seuraavan tason palvelimien osoitteet ja muodostavat DNSpalvelimien verkon rungon. Juuritaso on ns. ”nimetön” eli sen erottaa osoitteen perässä olevasta pelkästä pisteestä, joskin sitä ei tarvitse erikseen kirjoittaa osoitteen perään. Juurinimipalvelimien alla sijaitsevat ylätason palvelimet (Top-Level Domain, TLD), jotka ovat käyttäjille tunnetuimmat ja ne hallinnoivat verkkotunnuksien loppuosaa, esim. .com, .fi, .org. Näitä palvelimia on kahta eri tyyppistä. Toiset niistä omaavat tunnukset jotka kuvastavat tiettyä maata tai maantieteellistä aluetta, esim. .fi ja toiset taas maantieteellisestä sijainnista riippumattomia, esim. .com. 4 Verkkotunnus koostuu ylätason palvelimen päätteestä ja esimerkiksi tietyn organisaation rekisteröimästä domain-nimestä. Osoitteessa www.kyamk.fi ylätason palvelin on .fi, joka kuvastaa maatuksena Suomea ja kyamk Kymenlaakson ammattikorkeakoulun osoitetta. Tälläiseen domain-nimeen voidaan liittää myös ns. alidomaineja, esim. moodle.kyamk.fi. Koska järjestelmä on hierarkinen, sillä voidaan muodostaa helposti esimerkiksi alueellisia verkko-osoitteita. 2.2 BIND BIND (Berkeley Internet Name Domain) on DNS-palvelinohjelmisto. Se on hyvin laajalti käytössä ympäri maailmaa ja vuonna 2004 se oli käytetyin DNSpalvelinohjelmisto. Lähes kaikki Unix-pohjaiset käyttöjärjestelmät käyttävät oletuksena tätä ohjelmaa. Sen kehittivät alunperin neljä Kalifornian yliopiston opiskelijaa 1980-luvulla. BIND:n lähdekoodi on avointa. Siitä on käytössä vielä useaa versiota. BIND 8 joka julkaistiin 1997 on vielä laajalti käytössä, sillä se on kevyempi kuin uusi versio 9. BIND 9 tukee jo täysin IPv6-liikennettä ja siinä on myös graafinen käyttöliittymä jonka voi asentaa haluttaessa erillisenä pakettina. Muita tärkeitä lisäominaisuuksia 9-versiossa on mm. DNSSEC-tuki, eli mahdollisuus käyttää DNS-palvelimien välillä suojattua liikennettä DNS-palvelimiin kohdistuven hyökkäyksien estämiseksi. BIND 9:n voi asentaa helposti. Se löytyy suoraan lähes kaikkien Unix-pohjaisten käyttöjärjestelmien paketinhallinnasta ja siitä on myös Windows-käyttöjärjestelmille soveltuva versio. BIND tunnetaan myös joissain käyttöjärjestelmissä nimellä Named. 5 3 3.1 TYÖN VAIHEET Aloitus Työn alussa päätettiin DNS-palvelimen sijoitus Simunetin sisällä. Luonnollinen paikka palvelimelle löytyi Simunetin serverifarmista, jonne on sijoitettu muutkin verkossa tarvittavat palvelimet. Nämä palvelimet ovat virtuaalipalvelimia ja toimivat varmennetulla palvelinalustalla joka käyttää VMware ESX-palvelinohjelmistoa. Virtuaalipalvelimia voidaan täten luoda ja muuttaa helposti. DNS-palvelimen ohjelmistoksi valittiin BIND sen ollessa selvästi käytetyin DNS-palvelinohjelmisto. Tämä rajasi palvelimen käyttöjärjestelmäksi lähinnä UNIX-pohjaiset käyttöjärjestelmät, sillä BIND on kehitetty toimimaan alunperin juurikin UNIX-pohjaisena ja se löytyy monista käyttöjärjestelmistä jo valmiina. Käyttöjärjestelmäksi valittiin aluksi Fedora 14, sillä sen aiempaa versiota oli käytetty jo monessa Simunetin virtuaalipalvelimessa aiemmin. Fedoran uusin versio ei kuitenkaan toiminut VMwaren kanssa kovinkaan hyvin ja aiheutti ongelmia kuten hiiren klikkauksen toimimattomuus. Palvelinta yritettiin käyttää tällä käyttöjärjestelmällä ja etsiä ratkaisu ongelmaan, mutta sellaista ei löytynyt. Vaihtoehtona olisi ollut myös asentaa Fedoran vanhempi versio, mutta uusimmassa versiossa oli tarpeellisia IPv6ominaisuuksia joita ei vanhemmassa Fedorassa ollut ja tästä syystä päädyttiin vaihtamaan käyttöjärjestelmää. Uudeksi käyttöjärjestelmäksi valittiin Centos 5, joka pohjautuu samaan kerneliin kuin Fedora 15 ja siinä on yhtäläiset IPv6-ominaisuudet. Centosin kanssa hiiriongelmat katosivat ja työtä voitiin jatkaa eteenpäin. Centosin asennus jouduttiin kuitenkin tekemään muutamaan kertaan uusiksi, koska tuntemattomasta syystä sen tiedostorakenne oli korruptoitunut ja aiheutti vikoja käyttöjärjestelmän toiminnassa. Ongelmat virtuaalipalvelimen asennuksessa ja vikaantumisissa hidastivat työn etenemistä huomattavasti. 6 3.2 Palvelimen asentaminen DNS-palvelin asennettiin Simunetin serverifarmiin johon voi muodostaa yhteyden VMware vSphere-ohjelman kautta. Serverifarmin hallintaosoite on vcenter.ictlab.kyamk.fi. Käyttäjätunnuksina tulee käyttää ICTLAB-tilan koneiden henkilökohtaisia tunnuksia. Palvelin valittiin asennettavaksi Simunet-SRV1:lle ja levyasemana käytettiin ulkoista iSCSI-levytilaa joka on molempien serverikoneiden yhteinen tallennusmedia. Asennus käynnistettiin klikkaamalla hiiren oikealla napilla haluttua serveriä (SRV1) ja valitsemalla kohta New Virtual Machine. Tämän jälkeen vSphere kyseli koneelle annettavia resursseja ja muita tietoja. Kun vSpheren resurssimäärittelyt oli tehty, käynnistettiin Centosin asennus. Centosin levyimage oli jo aiemmin ladattu valmiiksi Centosin omilta palvelimilta. vSpheren listalta löytyvä uusi palvelin käynnistettiin ja sen virtuaaliseen levyasemaan valittiin Centos-image. Tämän jälkeen palvelin käynnistettiin uudelleen ja asennusohjelma käynnistyi. Asennuksen aikana määriteltiin perusasetukset. Kohdassa jossa kyseltiin valinnaisia lisäpaketteja asennettavaksi, valittiin listalta kaikki DNS- ja DHCPpalvelimia koskevat paketit. Asennuksen jälkeen palvelin tuntui toimivan hyvin ja sillä oli yhteys IPv4 Internettiin aiemmin valitun VM-verkkokortin (tuotantoverkko) kautta. 7 3.3 BIND:in asentaminen BIND:in asentaminen oli käytännössä melko yksinkertaista. Asennus tehtiin komentoriviltä. Asennuksessa käytettiin alla olevia komentoja. yum install bind yum install system-config-bind Ylempi rivi asentaa BIND:in perustiedostot ja alempi rivi valinnaisen graafisen työkalun DNS-asetusten säätämistä varten. Asennuksen jälkeen BIND käynnistettiin komennolla service named start. Linuxin käynnistykseen lisättiin myös kohta, jolla BIND:in tulisi käynnistyä myös automaattisesti kun palvelinkone käynnistetään uudelleen. BIND:in asetuksiin tehtiin graafisen ja komentorivin puolelta useita muutoksia etsittäessä syytä sen toimimattomuuteen. Viaksi selvisi kuitenkin myöhemmin testauksessa tehty virhe, joten näillä muutoksilla ei ollut vaikutusta DNS-palvelimen toimintaan. En tässä dokumentissa luettele tehtyjä muutoksia, sillä niistä ei ollut hyötyä ja ne palautettiin oletusasetuksiin, eikä niiden vaikutusta testattu. Itse BIND:in asetuksiin ei jouduttu tekemään kuin muutama olennainen muutos. BIND asetettiin kuuntelemaan kaikista porteista tulevia DNS-pyyntöjä ja käyttämään porttia 53 liikennöintiin. Toimimattomuusongelmia tutkiessa huomattiin Wiresharkilla, että jostain syystä palvelimelle tulevat IPv6 DNS-kyselyt tulivatkin porttiin 5353, eikä IPv4-liikenteessä oletuksena käytettävään 53-porttiin. Syytä tähän ei löydetty. BIND käyttää liikennöintiin muihin DNS-palvelimiin oletuksena satunnaisia portteja, tämä haluttiin kuitenkin palomuureja ajatellen muuttaa yhdeksi vakioportiksi, jotta palomuurien lävitse kulkevassa liikenteessä ei tule ongelmia. 8 Kuva 1. named.conf-tiedosto Kuvassa 1. on otos named.conf-tiedostoa. Muutoksia tähän on tehty poistamalla kohdan port 53; edestä //-merkit ja näin pakotettu DNS-palvelin käyttämään vain yhtä porttia. Lisäksi tiedostoon on lisätty rivi listen-on-v6 {any;};, jolla on saatu DNSpalvelin kuuntelemaan IPv6-kyselyitä kaikista porteista. Named.conf-tiedosto löytyy polusta /var/named/chroot/etc/named.conf. Tässä tiedostossa on myös domainalueiden määrittelyä koskevia kohtia, joita tulee muokata kun Simunetin domainmäärityksiä tehdään. Domain-alueet on tämän työn jäljiltä oletusasetuksilla. 9 Kuva 2. named.root-tiedosto Named.root tiedostossa (Kuva 2.) on listattu kaikkien root-tason palvelimien IPv4- ja IPv6-osoitteet. Tähän tiedostoon ei tarvitse eikä kannata tehdä muutoksia. Tiedostosta näkee kuitenkin helposti IPv6-osoitteet, joilla voi kokeilla yhteyden toimivuutta rootpalvelimiin esim. ping6-komennolla. 10 3.4 Hyödyllisiä komentoja Hyödyllisiä komentoja DNS-serverin hallintaan komentoriviltä. su - (antaa admin-oikeudet käyttäjälle) service named restart (käynnistää BIND-prosessin uusiksi) system-config-bind (käynnistää BIND-graafisen työkalun) ifconfig (näyttää serverin verkkokorttien asetukset) service network restart (hakee verkkokorttien asetukset uusiksi) nslookup (DNS-haku) nslookup –type=AAAA (DNS-haku IPv6-osotteille) 3.5 ping6 <IPv6 address> (Ping-komento IPv6-osotteille) nano <tiedosto / polku> (Käynnistää tekstieditorin) IP-asetukset Palvelimelle piti määrittää Eth0-verkkokorttiin staattinen IPv6-osoite. Tämä osottautui haastavaksi, sillä Linuxin IPv6-osoitemäärityksissä tuntuu olevan paljon eroja eri käyttöjärjestelmien välillä ja ilmeisesti kehitystyö tältä osin on vielä kesken. Ensiksi yritin määrittää osoitteen graafisella työkalulla, mutta se ei toiminut. Vaikka osoitteen sai asetettua, se ei kuitenkaan tullut käyttöön eikä näkynyt ifconfig-komennolla verkkokortin asetuksissa. Centos tuntuu suosivan pelkkää autoconfig-tilaa IPv6määrityksissä. Koska kyse on palvelinkoneesta, on kuitenkin tärkeää, että koneella on kiinteä osoite. Seuraavaksi ratkaisua lähdettiin hakemaan verkkoasetusten skriptitiedostoista. Internetistä löytyi tähän useita ohjeita, joista monikaan ei suostunut toimimaan halutulla tavalla. Todennäköidesti tulevaisuudessa nämäkään ohjeet eivät tule pätemään, jos Centosin lähdekoodiin tulee muutoksia IPv6-konfiguroinnissa. 11 Kuva 3. network-skripti Kuvassa 3. on network-tiedosto, joka löytyy polusta /etc/sysconfig/network. Tiedosto sisältää Linuxin perusasetukset jotka koskevat kaikkia verkkokortteja. Tiedostoon tuli asettaa kuvassa 3. näkyvät komennot. Myöhemmin huomattiin, että rivi IPV6_AUTOCONF=no ei poista täysin verkkokorttien IPv6-asetusten automaattista konfigurointia käytöstä. NETWORKING_IPV6=yes rivi mahdollistaa verkkokorteille IPv6-asetusten määrittämisen. Kuva 4. ifcfg-eth0-tiedosto 12 Verkkokorttien IP-asetukset määritellään ifcfg-eth( )-tiedostoissa. Tiedostot löytyvät poluista /etc/sysconfig/network-scripts/ifcfg-eth( ). Kuvassa 4. näkyy ifcfg0tiedoston sisältö. #-merkillä alkavat rivit on kommentoitu pois käytöstä. Tähän tiedostoon tehtiin IPv6-määritykset eth0-verkkokortille, jota käytetään Simunetin puoleiseen liikennöintiin. Tiedostossa oli myös IPv4-asetukset, joita käytettiin päästäkseen kiinni tuotantoverkkoon ja lataamaan asennuspaketteja palvelimen asennusvaiheessa. Myöhemmin käyttöön otettiin toinen verkkokortti eth1, joka on pelkästään IPv4 liikennettä varten ja on nyt myös jatkuvasti käytössä. Tärkeitä kohtia ifcfg-eth0 tiedostossa on BOOTPROTO=static, jonka ”pitäisi” määrittää IP-osoite staattiseksi, eli osoitetta ei haeta DHCP-palvelimelta. Alempana näkyvät IPv6-osoitteen määritykset. Tärkeää on huomata, että IPv6-osoite tulee kirjoittaa kokonaisessa muodossa, ei lyhennettynä. Centos ei ymmärtänyt lyhennettyä osoitetta ja määritys ei toiminut. Osoitteen perässä on määritelty maski /64. Kokeilin myös asettaa oletusreitin tähän tiedostoon, sillä monissa ohjeissa näin oli tehty. Tämä ominaisuus ei kuitenkaan suostunut toimimaan, vaan käyttöjärjestelmä halusi hakea oletusreitin automaattisesti. Eth0-verkkokortti on VMwaren puolelta määritelty käyttämään VLAN100 tai VLAN101-verkkoa. VLAN101 on palomuurit ohittava verkko, jota käytettiin testaamiseen. Kuva 5. sysctl.conf 13 IPv6-osoitteen määritykset olivat tämän jälkeen muuten toiminnalliset, mutta eth0verkkokorttiin ilmestyi automaattisesti myös toinen IPv6-osoite, jonka Centos generoi itse käyttäen samaa alkuosaa kuin mikä oli määritelty manuaalisesti. Tähän etsittiin internetistä ratkaisua ja vain yksi ohje tuntui toimivan. Tiedostoon sysctl.conf lisättiin rivi net.ipv6.conf.all.autoconf=0. Tämä rivi estää IPv6-osoitteiden generoimisen automaattisesti palvelimen kaikissa verkkokorteissa. Ongelmana Linuxin IPv6asetuksissa on ilmeisesti skripti-tiedostojen päällekkäiset komennot, osa skripteistä ajetaan väärässä järjestyksessä verkkokorttia otettaessa käyttöön. Asia ei täysin selvinnyt työtä tehdessä ja ajanpuutteen vuoksi jouduin luopumaan asian tutkimisesta ja siirtymään itse DNS-palvelun testaamiseen. Kuva 6. ifconfig 14 Myös Eth1-verkkokortti otettiin käyttöön VMwaren määrityksistä ja se asetettiin VMverkon puolelle. Käytännössä tämä tarkoittaa palvelimelle pääsyä IPv4-yhteyden kautta tuotantoverkkoon ja sitä kautta internettiin. Verkkokortti otettiin käyttöön koska huomattiin, ettei natiivilla IPv6-yhteydellä voida vielä tässä vaiheessa yhdistää kuin murto-osaan maailmalla olevista DNS-palvelimista. Kuvassa 6. Näkyy kaikkien nimipalvelimen verkkokorttien asetukset. Tärkeää on myös huomata fe80-alkuiset osoitteet, jotka ovat ns. link local IPv6-osoitteita. Käyttöjärjestelmä generoi ne automaattisesti, niitä ei voi poistaa eikä niihin voi vaikuttaa ja niillä liikennöidään vain sisäverkossa. Näistä osotteista ei tässä tapauksessa tarvitse kuitenkaan välittää. 4 DNS-PALVELIMEN TOIMIVUUS JA TULEVAISUUS Työn lähtökohtana oli muodostaa nimipalvelin, joka tarjoaa natiiveille IPv6asiakkaille verkko-osoitemuunnokset. Työtä suorittaessa huomattiin, että tälläisen palvelimen tekeminen on mahdollista, mutta alkuperäisestä suunnitelmasta käyttää Simunetin ulkopuoliseen liikenteeseen pelkkää IPv6-liikennettä jouduttiin luopumaan. Tähän johti DNS-palvelinjärjestelmän rakenne ja IPv6-tekniikan tukeutuminen IPv4järjestelmiin. DNS-kyselyt jotka lähtivät Simunetistä IPv6-liikenteellä rootpalvelimille ja TLD-palvelimille onnistuivat, mutta tästä eteenpäin ”puussa” mentäessä hyvin suuri osa DNS-palvelimista ei vielä tue IPv6-liikennettä. Yllätyksenä tuli esim. Googlen ja monen muun suuren IT-alan toimijan IPv6-tuen puute heidän DNSpalvelimistaan. Selvästikin operaattorit ja suuret yritykset tulevat käyttämään vielä pitkään IPv4-liikenteellä suoritettavia kyselyitä ja siirtymien IPv6-pohjaisiin kyselyihin tulee viemään aikaa. Tätä raporttia kirjoitettaessa root-palvelimet on kaikki siirtyneet jo tukemaan IPv6-kyselyitä ja TLD-tason palvelimistakin 84% tukee IPv6kyselyitä. Käytännössä tämä järjestely ei kuitenkaan tuota ongelmia verkko-operaattoreille eikä myöskään Simunetissä, jonka on tarkoitus kuvastaa verkko-operaattoria. Operaattorien aloittaessa natiivien IPv6-liittymien tarjoamisen asiakkaille, tulee niiden kuitenkin päivittää DNS-palvelimensa tukemaan myös IPv6-liikenteellä tulevia kyselyitä. Simunetin DNS-palvelin on juuri tämän kaltainen ja kuten kuvasta 7. voidaan nähdä sillä on yhteys molempiin verkkoihin. Tällainen palvelin toimii ns. Dual Stack-tilassa. 15 Kuva 7. Simunetin rakenne Palvelinta testattiin nslookup-komennoilla työn edetessä. Loppuvaiheessa palvelinta kokeiltiin myös liittämällä samaan verkkoon asiakaskone, jolla oli natiivi IPv6-yhteys. Asiakaskoneelle määriteltiin käsin IP-asetukset, sekä DNS-palvelimen osoite, koska minkäänlaista DHCP-palvelua ei Simunetissä ollut käytettävissä tätä työtä tehdessä. Testauksessa huomattiin, että Simunetin ASA-palomuureihin täytyi luoda DNSliikenteelle pääsylistat ja sallia liikenne. Myös Kalaverkon ja Simunetin väliseen palomuuriin täytyi tehdä vastaava konfigurointi. Muutoksista palomuureihin vastasi Riku Leinonen, sillä niiden hallinnointi kuului hänen opinnäytetyöhönsä. Testauksista asiakaskoneella voitiin päätellä, että DNS-palvelin toimii halutulla tavalla Simunetissä. 16 Työtä tehdessä ilmeni useita ongelmia ja ohjelmistovikoja joiden ratkaiseminen vei aikaa ja DNS-palvelimen asentaminen jäi osittain kesken. Palvelimeen tulisi jatkossa luoda Simunetille omat domain-alueet ja sen IPv6-osoitteen jakelu asiakaskoneille tulisi ratkaista esim. DHCP-serverin avulla. Tulevaisuudessa TLD-tason alla olevien DNS-palvelimien IPv6-tuet tulevat maailmalla lisääntymään, mutta niin kauan kuin osa niistä toimii vain IPv4-osotteilla, ei mielestäni ole järkevää siirtyä käyttämään natiivia IPv6-yhteyttä DNS-palvelimen ulkopuoliseen liikenteeseen muuten kuin testauksen kannalta. Tätä työtä tehdessä sai taas paremman kuvan siitä missä vaiheessa IPv6-teknologian käyttöönotto tällähetkellä on. Työssä tuli myös uutena asiana minulle DNS-järjestelmän rakenne ja sen haasteet. 17 LÄHTEET Domain Name System (DNS) eli Internetin aluenimijärjestelmä http://www.pcuf.fi/~lappim/eta20DNS.html Mircosoft TechNet : How DNS Works http://technet.microsoft.com/en-us/library/cc772774%28WS.10%29.aspx BIND (Berkeley Internet Name Daemon) http://linux.about.com/cs/linux101/g/bindlparberkele.htm BIND | Internet Systems Consortium https://www.isc.org/software/bind BIND DNS-ohjelmiston manuaali http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html Disable IPv6 on specific interfaces http://www.centos.org/modules/newbb/viewtopic.php?topic_id=30890&forum=40 Global IPv6 Deployment Progress Report http://bgp.he.net/ipv6-progress-report.cgi