IPv6-tunneli

Linux.fista
Siirry navigaatioon Siirry hakuun

IPv6 on jo kaksikymmentävuotias protokolla, joten ideaalitilanteessa palveluntarjoaja tarjoaa käyttäjilleen IPv6-yhteyden IPv4:n rinnalla. Näin ei kuitenkaan aina käy. Tällöin voidaan IPv6-yhteys rakentaa myös tunneloimalla IPv6-liikenne IPv4-verkkojen yli, eli siirtämällä IPv6-liikenne paketoituna IPv4-pakettien sisällä.

Tunnelit voivat olla joko kiinteästi määriteltyjä tai dynaamisia, jolloin tunneli muodostuu aina tarvittaessa automaattisesti. Kiinteät vaativat yleensä jonkinlaisen rekisteröinnin vastapuolen kanssa. Dynaamiset mekanismit taas perustuvat usein anycast-tekniikkaan, jolloin liikenne osoitetaan tunnettuun IPv4-osoitteeseen (esim. 192.88.99.1), joka on määritelty useampaan laitteeseen ympäri maailmaa, ja reitityksellä liikenne välitetään aina näistä lähimpään.

Eri tunnelointimekanismit eroavat toisistaan myös paketointimenetelmän suhteen. Yksinkertaisimmissa menetelmissä IPv6-paketti sijoitetaan suoraan IPv4-otsikon perään, mikä minimoi otsikkotietoihin hukkaantuvan datan määrän. Toisaalta nämä mekanismit toimivat vain rajoitetusti palomuurien ja erityisesti NAT:n lävitse. Siksi onkin kehitetty myös menetelmiä, joissa IPv6 paketoidaan UDP-paketin sisään.

Seuraavissa luvuissa on kuvattu tarkemmin yleisimpien tunnelointimekanismien käyttöä:

  • 6to4 (dynaaminen, IPv6-over-IPv4)
  • Teredo (dynaaminen, IPv6-over-UDP-over-IPv4)
  • Tunnel broker, esim. XS26 -tunneli (kiinteä, IPv6-over-IPv4)

Tämän lisäksi on myös muita tunnelointimenetelmiä, kuten L2TP (kiinteä, IPv6-over-UDP-over-IPv4) jne.

6to4[muokkaa]

6to4 on helppo ja suhteellisen varmatoiminen anycastiin perustuva tunnelointimekanismi. Rajoituksena se ei yleensä sovi tilanteisiin, joissa ei ole käytössä julkista IP-osoitetta (eli ollaan NAT:n takana), tai palomuuri ei päästä ns. protokolla 41:tä läpi.

6to4-osoite on muotoa 2002:aabb:ccdd:..., jos koneen IPv4-osoite on aa.bb.cc.dd. Käytännössä 6to4 toimii muodostamalla tunneli omasta koneesta osoitteeseen 192.88.99.1 (=oma lähin 6to4-reititin), ja reitittämällä ulospäin menevät IPv6-paketit tuohon tunneliin. Sisäänpäin tulevat paketit siirtyvät taas siten, että reitityksessä vastapään kannalta lähin 6to4-reititin muodostaa tunnelin osoitteeseen aa.bb.cc.dd ja reitittää paketit sinne. Tästä syystä reititys ei ole symmetrinen, minkä takia vikatilanteiden paikantaminen voi olla vaikeaa, mikäli verkosta löytyy väärin toimiva tai ylikuormitettu 6to4-reititin.

Lisätietoja löytyy Funetin ohjeista.

6to4 -tunnelin pystytys skriptillä[muokkaa]

Alla olevassa esimerkissä on skripti, joka ajetaan IPv4-yhteyden pystyttämisen jälkeen. Käytössä on iproute2-paketin ip-ohjelma sekä ipv6calc-ohjelma, jotka yleensä löytyvät nykyisistä Linux-jakeluista valmiiksi paketoituna.

Skriptissä käytetty $LOCALIP on verkkoyhteyden julkinen IP, ja $IPV6 on komennon "ipv6calc --ipv4_to_6to4addr $LOCALIP" tulos.

#!/bin/bash
LOCALIP="212.50.134.65"
IPV6=`ipv6calc --ipv4_to_6to4addr $LOCALIP`
/sbin/ip tunnel add tun6to4 mode sit ttl 64 remote any local $LOCALIP
/sbin/ip link set dev tun6to4 up
/sbin/ip -6 addr add ${IPV6}1/16 dev tun6to4
/sbin/ip -6 route add default via ::192.88.99.1 dev tun6to4 metric 1

6to4 käynnistysskripteissä[muokkaa]

Redhat-sukuiset jakelut (RHEL, CentOs, Fedora)[muokkaa]

6to4-yhteyden saa käynnistyksen yhteydessä lisäämällä alla mainittuihin skripteihin pari riviä:

/etc/sysconfig/network

 NETWORKING_IPV6=yes
 IPV6_GATEWAYDEV=tun6to4
 IPV6_DEFAULTDEV="tun6to4"

/etc/sysconfig/network-scripts/ifcfg-eth0 (korvaa eth0 käytössäsi olevalla verkkoyhteydellä)

 IPV6INIT=yes
 IPV6TO4INIT=yes

6to4-reititys[muokkaa]

Mikäli Linux-koneesi on verkkosi laidalla NAT-reitittimenä, voidaan muutkin lanissa olevat koneet yhdistää nyt verkkoon julkisilla IPv6-osoitteilla. Alla mainitun radvd:n käyttö ei ole pakollista, voit määrittää kaikille koneille myös käsin IPv6-osoitteet ja laittaa tunnelikoneen kautta reitityksen toimimaan, mutta käytettäessä radvd:tä kaikki sisäverkon koneet saavat automaattisesti IPv6-osoitteen.

radvd[muokkaa]

Jotta sisäverkon koneille saadaan reititettävät IPv6-osoitteet, pitää niille kertoa, missä IPv6-reititin on. Tätä varten tunnelikoneelle tarvitaan radvd palvelu. Radvd:n löydät täältä, tai oman jakelusi paketinhallinnasta.

Kun radvd on asennettu, täytyy /etc-kansiossa oleva radvd.conf-tiedosto luoda/päivittää. Prefix rivin tulee olla muotoa ::/64 vaikka saatkin /48-verkon. Oletetaan että laniin päin menevä verkkokortti on eth1, tällöin konfiguraatio olisi seuraavanlainen: (korvaa {$IPV6} heksamuodossa olevalla ip-osoitteellasi)

interface eth1
{
       AdvSendAdvert on;

       # Advertise at least every 30 seconds
       MaxRtrAdvInterval 30;

       prefix 2002:{$IPV6}::/64
       {
               AdvOnLink on;
               AdvAutonomous on;
               
               AdvValidLifetime 300;
               AdvPreferredLifetime 120;
       };
};

Nyt radvd on konfiguroitu. Tarkista vielä että sisäverkon verkkokortilla on ipv6 osoite:

/sbin/ifconfig eth1

Listauksessa pitäisi olla "inet6 addr: 2002:xxxx:xxxx" -muotoinen osoite. Mikäli verkkokortilla ei ole 2002:xxxx:xxxx ipv6 osoitetta, voit lisätä sen seuraavasti:

/sbin/ip -6 addr add ${IPV6}:2/128 dev eth1

Tarkista ipv6 reititys tunnelikoneella:

/sbin/ip -6 route

Mikäli reitityslistassa ei näy reititystä sisäverkkoon

2002:xxxx:xxxx::/64 dev eth1  metric 1 mtu 1500 advmss 1340

tyylisellä rivillä, lisää se seuraavasti:

/sbin/ip -6 route add 2002:xxxx:xxxx::/64 dev eth1 metric 1

Varmista, että tunnelikoneella on päällä ipv6 forwarding:

cat /proc/sys/net/ipv6/conf/all/forwarding

Arvon pitäisi olla 1, mikäli se on 0,

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

Käynnistä radvd

radvd -C /etc/radvd/radvd.conf

Tarkista radvdump ohjelmalla, että reititin mainostaa olemassaoloaan:

$ radvdump
Router advertisement from fe80::xx:xx:xx:0 (hoplimit 255)
Received by interface eth1
   ...

Suora IPv6 lähiverkossa[muokkaa]

Tarkista koneelta lähiverkossa, että sillä on IPv6-osoite

ifconfig eth0

Tarkista myös IPv6-reititys:

/sbin/ip -6 route

Reitityksessä pitäisi olla seuraavanlaista:

2002:xxxx:xxxx::/64 dev eth0 
2000::/3 via 2002:xxxx:xxxx::2  dev eth0
default via 2002:xxxx:xxxx::2  dev eth0
default via fe80:xx:xx:xx:0  dev eth0

Tässä 2002:xxxx:xxxx::2 pitäisi olla reititinkoneesi sisäverkossa kiinni olevan verkkokortin IPv6-osoite. Mikäli reittejä puuttuu, kokeile lisätä ne käsin:

/sbin/ip -6 route add 2000::/3 via 2002:xxxx:xxxx::2 dev eth0 metric 1
/sbin/ip -6 route add default via 2002:xxxx:xxxx::2 dev eth0 metric 1

Huomaa, että yhdyskäytäväkoneeseen on viitattava link-local -osoitteella, tai muuten yhteys toimii hyvin epävakaasti. Lisää tietoa: http://www.mail-archive.com/users@ipv6.org/msg02424.html . Link-local-osoitteen saa selville komennolla

ip -6 addr

6to4 reverset nimipalvelussa[muokkaa]

Jotta voisit käyttää reverse DNS:ää 6to4:n kanssa, pitää osoitealue ensin rekisteröidä, ja määrittää sille nimipalvelimet. Tämä onnistuu 6to4.nro.net:issä. Avaa sivu IPv6 yhteensopivalla selaimella, ja syötä tarvittavat nimipalvelin tiedot. Voit käyttää nimipalvelimina kohdan 1.4 mukaisesti afraid.org:ia.

Teredo[muokkaa]

Teredo on viimeinen toivo IPv6-yhteyden järjestämiseen, mikäli kiinteä yhteys tai 6to4 ei onnistu. Se muistuttaa 6to4-tekniikkaa siinä, että yhteyden luominen on varsin dynaaminen eli mitään rekisteröintiä tms. ei tarvita. Merkittävä ero kuitenkin on, että IPv6-paketit tunneloidaan UDP-protokollan päällä, minkä ansiosta yhteyden muodostaminen onnistuu varmemmin NATin tai palomuurin takaa. Teredo mahdollistaa esimerkiksi IPv6-yhteydet GPRS/3G-yhteyden yli, mutta ns. symmetrisen NAT:n läpi sekään ei välttämättä toimi. Esimerkiksi Soneran verkossa kannattaa kokeilla prointernet-yhteyttä tavallisen internet-APN:n sijasta. Miredo on Linuxissa toimiva Teredo-toteutus, joka on suhteellisen helppo asentaa, sillä se ei yleensä vaadi kernelin uudelleenkääntämistä. Lisäksi se löytyy valmiiksi paketoituna uusimista jakeluista.

Osoitteen valinta[muokkaa]

Aina kun jokin sovellus muodostaa esim. TCP-yhteyden jonnekin, täytyy valita käytettävät lähde- ja kohdeosoitteet. Käytännössä tehdään nimipalvelukysely, johon saadaan vastaukseksi joko IPv4- tai IPv6-osoite tai molemmat. RFC 3484 määrittelee perusperiaatteet, joiden mukaan tehdään valinta, jos mahdollisuuksia on useampi.

Yksi perusperiaatteista on, että jos käytössä on sekä tunneloitu että tunneloimaton yhteys, käytetään tunneloimatonta, koska sitä pidetään varmempitoimisena. Tästä syystä kone, jonka IPv6-yhteys on hoidettu esimerkiksi 6to4-tekniikalla, muodostaa oletuksena IPv4-yhteyden molempia protokollia tukevalle palvelimelle. Uudehkoissa Linux-jakeluissa tämä on mahdollista muuttaa muokkaamalla /etc/gai.conf -tiedostoa:

label ::1/128       0
label ::/0          1
label 2002::/16     2
label ::/96         3
label ::ffff:0:0/96 4
label fec0::/10     5
label fc00::/7      6
#label 2001:0::/32   7
precendence  ::1/128       50
precendence  ::/0          40
precendence  2002::/16     30
precendence ::/96          20
precendence ::ffff:0:0/96  10

Toisin sanottuna kommentoimalla pois "#label 2001:0::/32" -rivi varmistetaan että 6to4-osoitteita ei syrjitä muiden kustannuksella. Huom! gai.conf -tiedostoon tehdyt muutokset astuvat oletuksena voimaan vain käynnistämällä kone uudelleen.

Kiinteä XS26:n tunneli[muokkaa]

Vaatimukset[muokkaa]

Sinulla on oltava GNU/Linux kone, jolla on suhteellisen pysyvä (mieluusti kiinteä) ip-osoite (aina kun ip-osoite vaihtuu, on sinun säädettävä tunnelia). Tämän lisäksi kernelissä on oltava tuki IPv6:lle (yleensä moduulina).


Tunnelin rekisteröinti[muokkaa]

Huomautus! xs26:n sivut ovat uudistuneet, eivätkä tämän artikkelin ohjeet toimi suoraan, vaan joudut soveltamaan niitä!

Ensimmäinen vaihe on rekisteröidä IPv6-tunneli (tässä tapauksessa) osoitteessa www.xs26.net seuraavalla tavalla:

Luo itsellesi tunneli kohdassa Tunnels. Tarvitset vain koneesi IP:n. Anna myös sijaintisi ja koneesi käyttöjärjestelmä (Linux) Valitse aukeavasta listasta yksi (tai useampi) palvelin pingin perusteella, ja ota sen IP talteen. Kun tunneli on valmis, on aika luoda itsellesi alue Zones-kohdasta. Luo zone valisemalla Tunnel objectiksi juuri luomasi tunneli (eli koneesi IP-osoite). Kuvaukseksi kirjoita mitä haluat. Kun zone on luotu, tulee Zones-kohtaan lähes tämäntyyppinen Zone: 3ffe:80ee:2e17::/48 (luultavasti vain 2e17 poikkeaa hieman). Nyt on sitten aika laittaa tunneli toimimaan. Kopioi Help-kohdasta tunnelin käynnistysskripti, ja tee siihen seuraavat muutokset:

  1. Laita kohtaan MYIPv4 palvelimesi/koneesi IP-osoite
  2. Kohtaan XSIPv4 laita aiemmin tunnelia luodessasi valitsemasi palvelimen IP
  3. Kohtaan MYIPv6 laita haluamasi IPv6-osoite, jonka pitää kuulua rekisteröimääsi zoneen. Mikäli zonesi alue on 3ffe:80ee:2e17::/48, voit käyttää osoitteita 3ffe:80ee:2e17::1/128, 3ffe:80ee:2e17::2ab3/128 jne. IPv6 osoite koostuu heksa-merkistön merkeistä (1,2,3,4,5,6,7,8,9,0,a,b,c,d,e,f), joita yhdessä osassa voi olla korkeintaan 4. Neljän merkin osia IPv6-osoitteesa on 8. Samalla tavalla voit lisätä myös muita IPv6-osoitteita osoittamaan koneellesi (kohdat IP0, IP1 jne). Näitä kannattaa laittaa muutama IRC:n vhosteja varten.
  4. Poista kommenttimerkki (#) riveiltä "ifconfig $TUNLIF add $IPX" sen mukaan, montako lisä-IPv6-osoitetta laitoit (IP0, IP1, IP2 jne).

Tunnelin käynnistys[muokkaa]

Anna skriptille suoritusoikeudet (chmod +x skriptinnimi) ja aja se komennolla ./skriptinnimi start. Katso sitten /sbin/ifconfig:in tulostetta, siitä pitäisi löytyä kutakuinkin seuraavanlainen tuloste:

xs26-0 Link encap:IPv6-in-IPv4
inet6 addr: 3ffe:80ee:2eda::b2/128 Scope:Global
inet6 addr: 3ffe:80ee:2eda::a1/128 Scope:Global
inet6 addr: fe80::51c5:38a7/128 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1480 Metric:1
RX packets:8691 errors:0 dropped:0 overruns:0 frame:0
TX packets:7353 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6347901 (6.0 MiB) TX bytes:719143 (702.2 KiB)

Sitten voitkin kokeilla tunnelin toimintaa käytännössä vaikkapa komennolla ping6 eu.irc6.net.

DNS ja reverset[muokkaa]

Nyt sinulla onkin jo toimiva IPv6-tunneli, ja seuraavat vaiheet vaikuttavat lähinnä IRCiin. Seuraava vaihe on saattaa DNS toimintaan, jotta esim. vhostit toimisivat. Tämä onnistuu kätevästi afraid.org:issa seuraavalla tavalla:

  1. Luo itsellesi tunnus
  2. Kohdassa Subdomains valitse tyypiksi AAAA. Kohtaan subdomain kirjoita mitä haluat, ja kohdasta Domain valitse jokin public-merkitty domain. Address-kohtaan kirjoita jokin IPv6-osoitteesi pakkaamattomassa muodossa. Pakkaamattomaan muotoon saat muutettua osoitteesta http://grox.net/utils/ipv6.php löytyvällä ohjelmalla (valitse Address to full uncompressed. Huomaa kuitenkin että et tee ns. dnsspammia. Tarkista hostisi kelpaavuus ja lue lisää dnsspammista osoitteessa dnsspam.nl.
  3. Voit samalla luoda eri subdomainin muillekkin valitsemillesi IPv6-osoitteille.
  4. Seuraavaksi mene kohtaan IPv6 Reverse ja paina Add IPv6 Subnet. Lisää subnetiksi XS26:een rekisteröimäsi Zone (jotain tyyliin 3ffe:80ee:2e17::/48). Seuraavaksi paina lisäämäsi subnetin kohdalla add record, ja lisää taas täysin pakkaamattomassa muodossa IPv6-osoitteesi (huomaa että alkuosa on valmiiksi). Hostnameksi pistä Subdomains-kohdassa samalle IPv6-osoitteelle rekisteröimäsi subdomain.

Nimipalvelimet[muokkaa]

Jotta reverset toimisivat, sinun on lisättävä nimipalvelimet tunneliin. Mene XS26:n sivuille, ja Zones-kohdassa paina tunnelisi kohdalta nappia DNS settings. Käytä nimipalvelimina:

ns1.afraid.org 
ns2.afraid.org 

(voit halutessasi vielä lisätä ns3.afraid.org:in ja ns4.afraid.org:in)

Tämän jälkeen joudut odottamaan nimipalvelimien päivittymistä. Afraid.org:in palvelimet päivittyvät noin 5 minuutin välein, mutta jos käytät omalla koneellasi operaattorisi nimipalvelimia, voi kestää jopa 48 tuntia ennenkuin tiedot päivittyvät niille asti.

Valmis[muokkaa]

Nyt pitäisi vhostien toimia, voit testata niitä vaikka irssillä: Käynnistä irssi ja aseta vhosti komennolla /set hostname rekisteroimasi.subdomain.jonka.olet.lisännyt.myös.ipv6.reverseksi. Sitten yhdistä vaikka EFNettiin komennolla /server -6 irc6.choopa.net. Jos yhdistys onnistuu, toimivat vhostit luultavasti. Tarkista vielä komennolla /whois nickisi, jolloin tulisi näkyä nickisi[~jotain@vhostisi].

Mikäli käytät jotain toista clienttiä, missä ei vielä ole IPv6 tukea, voit käyttää 6tunnel ohjelmaa. Oletusosoitteelle:

6tunnel 1030 eu.irc6.net 6667

Mikäli koneella on useampi vhost:

6tunnel -s haluamasi.vhost 1031 eu.irc6.net 6667

Lisää IRC-yhteyksiä[muokkaa]

Sitten haluat varmaan lisää yhteyksiä IRC-verkkoihin? No, EFNettiin tuo irc6.choopa.net hyväksyy aika monta yhteyttä (en ole jaksanut testata loppuun asti). IRCNettiin yksi hyvä palvelin on eu.irc6.net, johon saa i-linet osoitteessa www.irc6.net (tarvitset IPv6-tunnelin katsoaksesi tuota sivua). Ks. serveriltä saat tosin tuosta vaan vain yhden I-linen (tämä vaatii NIC handlen, katso seuraava kohta). 5 yhteyttä saat osoitteeseen irc6.starman.ee. Lisää servereitä voit etsiä googlella, ja yhteyksien määrää saat kasvatettua hakemalla lisää i-linejä palvelimille. XS26:n käyttäjät saavat myös 5 yhteyttä IRCNettiin serveriltä irc.xs26.net. IRCnettiin irc.cc.tut.fi päästää sisään ilman i-line pyyntöjä .fi-reverseillä (ilmankin reverseä pääsee) 2 yhteyttä samasta ipv6 osoitteesta (korjatkaa jos löytyy tarkempaa tietoa) (Nykyään irc.cc.tut.fi ei hyväksy ilman i-lineä .fi-reversellä eikä ilmankaan)

NIC-handle[muokkaa]

Joissain tapauksissa tarvitset NIC handlen. Tämän voit rekisteröidä lähettämällä sähköpostin 6bone:een, viestin generaattori&ohjeet viestin lähettämiseen osoitteessa http://www.sixxs.net/signup/6bone/.


Virheitä[muokkaa]

Jos saat XS26:n skriptiä käynnistäessä virheen että puskuritila ei riitä, katso komennolla iptunnel mitä tunneleita sinulla on käytössä ja poista niistä kaikki mahdolliset komennolla iptunnel del nimi. Tämän jälkeen yritä ajaa skripti uudelleen.

Aiheesta muualla[muokkaa]