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