Sisällysluettelo |
Tinc on VPN-ohjelmisto jonka avulla voidaan luoda toimivia ja vakaita privaattiverkkoja normaalin internetin tai yritysverkon päälle. Kaiken lisäksi tinc perustuu avoimeen lähdekoodiin, joten kyseisen ohjelmiston käytöstä ei tarvitse maksaa. Tarkemmat tiedot ohjelmistosta löytyy osoitteen http://www.tinc-vpn.org/ takaa.
TINC on käytössä koska se helpottaa Pelitalon työntekijöiden elämää. Koska koneet ovat omassa VPN verkossaan meidän ei tarvitse pyytää kaupungin ATK-yksiköltä esim. DHCP-optioita tai muitakaan vastaavia juttuja mitä pelitalon järjestelmät vaativat toimiakseen.
Luomme siis tinc:illä tähän kaupungin nuorisoverkon päälle oman pienen "internettimme" missä saamme ajaa juuri niitä palveluita ja asioita joita tarvimme. Meillä on täysin kaupungin verkosta eristetyt private-verkon osoitteet, ja täten emme edes tuhlaa nuorisoverkon ip-osotteitakaan kun sen yhden kappaleen per. nuorisotalo.
VPN-osoitteet
tinc0-happi: 172.16.1.1
tinc0-pelitalo: 172.16.1.2
tinc0-arabia: 172.16.1.3
tinc0-pasila: 172.16.1.4
tinc0-maltsu: 172.16.1.5
tinc0-viikki: 172.16.1.6
tinc0-viikki: 172.16.1.7
Alla on kerrottu perus tinc-verkon pystyttämisestä. Verkkoon kuuluu yksi pääpiste ja tarvittava määrä etäpisteitä. Verkon keski/pääpiste on tässä tapauksessa tinc0-happi ja verkon etäpisteitä nuorisotalot joissa tätä meidän verkkoa tarvitaan.
Asennetaan Debian palvelimeen, tästä tulee koko verkon keskipiste, jonka läpi kaikki meidän verkon liikennekkin myös kuljetetaan. Suoritetaan asennus mahdollisimman perusparametreillä, eikä asenneta siihen mitään turhaa. Annetaan palvelimelle nimeksi tinc0-happi. Asennusvaiheessa pitää muistaa vain antaa palvelimelle oikea kiinteä ip, jotta sitä ei tarvitse jälkeen päin konfiguroida. Tämäkin on mahdollista mutta helpoimmalla pääsee kun sen määrittää heti alkuun oikein.
Kun perus Debian on asennettu, on aika käynnistää uusi järjestelmä, jonka jälkeen asennamme sihen pari tarvittavaa pakettia. Paketit ovat openssh-server, tinc ja pdns-server, Ne asennetaan komennolla alla olevalla komennolla.
apt-get install openssh-server tinc pdns-server pimd
Tämän jälkeen pystytetään tincin master-node. Ensimmäiseksi luomme vaaditun hakemistorakenteen. Kuvitellaan että VPN-verkkomme nimi on "gamenet". Tällöin luomme hakemistot /etc/tinc/gamenet ja /etc/tinc/gamenet/hosts. Luomme ne alla olevin komennoin.
mkdir /etc/tinc/gamenet mkdir /etc/tinc/gamenet/hosts
Tämän jälkeen luomme tinc:in vaatimat konfiguraatiot. Ensimmäiseksi luomme tiedoston /etc/tinc/gamenet/tinc.conf. Kyseiseen tiedostoon kirjoitetaan alla olevat rivit.
Name = happi Mode = switch
Name tarkoittaa tässä tapauksessa master noden nimeä. Mode tarkoittaa missä tilassa VPN-daemoni toimii.
Tämän jälkeen generoimme RSA-avaimet tuota verkkoa varten. Se tapahtuu komennolla...
tincd -n gamenet -K
Kyseisen komennon suorittamisen jälkeen se kysyy pari kertaa mihin tiedostot tallennetaan, niihin vastataan yksinkertaisesti entterillä.
Sitten muokkaamme vasta luotua avainta joka sijaitsee /etc/tinc/gamenet/hosts/happi. Lisäämme tiedoston alkuun, ennen RSA-avainta, alla olevat rivit.
Name = happi Address = x.x.x.x Subnet = 172.16.1.0/24 PMTU = 1280
Tämän jälkeen luomme /etc/tinc/gamenet/tinc-up nimisen tiedoston johon pistämme alla olevat rivit.
ifconfig gamenet 172.16.1.1 netmask 2555.255.255.0 ip route add blackhole 172.16.0.0/16 ip route add 172.16.2.0/24 via 172.16.1.2 dev gamenet src 172.16.1.1 ip route add 172.16.3.0/24 via 172.16.1.3 dev gamenet src 172.16.1.1 ip route add 172.16.4.0/24 via 172.16.1.4 dev gamenet src 172.16.1.1 ip route add 172.16.5.0/24 via 172.16.1.5 dev gamenet src 172.16.1.1 ip route add 172.16.6.0/24 via 172.16.1.6 dev gamenet src 172.16.1.1 ip route add 172.16.7.0/24 via 172.16.1.7 dev gamenet src 172.16.1.1
Sitten vielä muokkaamme tiedostoa /etc/tinc/nets.boot, lisäämme sinne tiedot että "gamenet" verkko käynnistyy bootissa sekä init.d:n skriptien avulla. Lisäämme kyseiseen tiedostoon seuraavan rivin:
gamenet
Sitten on aika pystyttää tuohon VPN:ään se toinen pää, se pää jonka perään tulee sitten tässä pelitalon järjestelmässä olevat pelikoneet.
Homma alkaa kutakuinkin samoin, tosin tässä tapauksessa meillä on jo valmiiksi asennettu Debian-purnukka joka toimii fog-kloonausjärjestelmän storage-nodena. Nyt asennamme siihen vain tinc:in sekä tarvittavat työkalut VPN-verkon pystytykseen.
Heti ensimmäiseksi asennamme palvelimeen toisen 1Gbit/s nopeudella toimivan verkkokortin. Homma tarvitsee siis kaksi verkkokorttia. Toiseen tulee kaupungin verkkoa jonka läpi VPN-yhteys muodostetaan ja toisesta lähtee ulos sitten VPN:än läpi menevää, meidän omaa leikkiverkkoa.
Tämän jälkeen asennamme itse tinc:in alla olevalla komentosarjalla. Samalla asennamme multicastin toimivuuden kannalta tärkeän pimd:in.
apt-get install tinc pimd
Tämän jälkeen rakennetaan sama hakemistorakenne kuin master-nodelle. Tällöin luomme hakemistot /etc/tinc/gamenet ja /etc/tinc/gamenet/hosts. Luomme ne alla olevin komennoin.
mkdir /etc/tinc/gamenet mkdir /etc/tinc/gamenet/hosts
Sitten luomme taas /etc/tinc/gamenet/tinc.conf tiedoston johon laitamme alla olevat rivit.
Name = pelitalo ConnectTo = happi Mode = switch
Sitten luodaan vielä avaimet tällekkin komennolla
tincd -n gamenet -K
Kyseisen komennon suorittamisen jälkeen se kysyy pari kertaa mihin tiedostot tallennetaan, niihin vastataan yksinkertaisesti entterillä.
Sitten kopioidaan vasta luotu avain tuonne tinc0-happi palvelimelle seuraavalla komennolla
scp /etc/tinc/gamenet/hosts/pelitalo root@tinc0-happi:/etc/tinc/gamenet/hosts/
Sitten napataan tuolta tinc0-happi palvelimelta kyseisen palvelimen RSA-avain komennolla
scp root@tinc0-happi:/etc/tinc/gamenet/hosts/happi /etc/tinc/gamenet/hosts/
Tämän jälkeen luodaan vielä tinc0-pelitalo palvelimelle /etc/tinc/gamenet/tinc-up tiedosto johon seuraavat rivit
ifconfig gamenet 172.16.1.2 netmask 255.255.255.0 ip route add 172.16.1.0/24 proto kernel dev gamenet src 172.16.2.1 table TINC ip route add default via 172.16.1.1 dev gamenet table TINC ifconfig gamenet mtu 1280
Sitten vielä lisätään tuo verkko taas bootissa nousevaksi eli muokkaamme tiedostoa /etc/tinc/nets.boot, lisäämme sinne rivin "gamenet".
gamenet
Eikä tässä vielä kaikki. Jotta bitti reitittyisi oikein, pitää luoda vähän hienompia reititystauluja. Alla vielä ohjeet miten.
Tiedostoon /etc/iproute2/rt_tables lisätään seuraava rivi.
2 TINC
Loput tuohon liittyen säädetäänkin sitten rc.localissa, sinne laitetaan seuraavat kolme riviä
ip rule add from 0.0.0.0/0 dev eth1 lookup TINC ip rule add from 0.0.0.0/0 dev gamenet lookup TINC iptables -t mangle -I FORWARD -i eth1 -o gamenet -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Sitten /etc/network/interfaces konfiguraatioon pitää eth1 liitännälle määrittää vielä yksi toiminto, kun interfacea nostetaan ylös, se määritellään näin
auto eth1
iface eth1 inet static
address 172.16.2.1
netmask 255.255.255.0
up ip route add 172.16.2.0/24 proto kernel dev eth1 src 172.16.2.1 table TINC
Sitten vielä dhcp-relay.
apt-get install dhcp-relay
Jonka jälkeen konfiguroidaan se näin tiedostoon /etc/default/dhcp3-relay
# Defaults for dhcp3-relay initscript # sourced by /etc/init.d/dhcp3-relay # installed at /etc/default/dhcp3-relay by the maintainer scripts # # This is a POSIX shell fragment # # What servers should the DHCP relay forward requests to? SERVERS="172.16.1.1" # On what interfaces should the DHCP relay (dhrelay) serve DHCP requests? INTERFACES="eth1 gamenet" # Additional options that are passed to the DHCP relay daemon? OPTIONS=""
Sitten on aika pystyttää tuohon VPN:ään se toinen pää, se pää jonka pärään tulee sitten tässä pelitalon järjestelmässä olevat pelikoneet.
Homma alkaa kutakuinkin samoin, tosin tässä tapauksessa meillä on jo valmiiksi asennettu Debian-purnukka joka toimii fog-kloonausjärjestelmän storage-nodena. Nyt asennamme siihen vain tinc:in sekä tarvittavat työkalut VPN-verkon pystytykseen.
Heti ensimmäiseksi asennamme palvelimeen toisen 1Gbit/s nopeudella toimivan verkkokortin. Homma tarvitsee siis kaksi verkkokorttia. Toiseen tulee kaupungin verkkoa jonka läpi VPN-yhteys muodostetaan ja toisesta lähtee ulos sitten VPN:än läpi menevää, meidän omaa leikkiverkkoa.
Tämän jälkeen asennamme itse tinc:in alla olevalla komentosarjalla. Samalla asennamme multicastin toimivuuden kannalta tärkeän pimd:in.
apt-get install tinc pimd
Tämän jälkeen rakennetaan sama hakemistorakenne kuin master-nodelle. Tällöin luomme hakemistot /etc/tinc/gamenet ja /etc/tinc/gamenet/hosts. Luomme ne alla olevin komennoin.
mkdir /etc/tinc/gamenet mkdir /etc/tinc/gamenet/hosts
Sitten luomme taas /etc/tinc/gamenet/tinc.conf tiedoston johon laitamme alla olevat rivit.
Name = pasila ConnectTo = happi Mode = switch
Sitten luodaan vielä avaimet tällekkin komennolla
tincd -n gamenet -K
Kyseisen komennon suorittamisen jälkeen se kysyy pari kertaa mihin tiedostot tallennetaan, niihin vastataan yksinkertaisesti entterillä.
Sitten kopioidaan vasta luotu avain tuonne tinc0-happi palvelimelle seuraavalla komennolla
scp /etc/tinc/gamenet/hosts/pasila root@tinc0-happi:/etc/tinc/gamenet/hosts/
Sitten napataan tuolta tinc0-happi palvelimelta kyseisen palvelimen RSA-avain komennolla
scp root@tinc0-happi:/etc/tinc/gamenet/hosts/happi /etc/tinc/gamenet/hosts/
Tämän jälkeen luodaan vielä tinc0-pelitalo palvelimelle /etc/tinc/gamenet/tinc-up tiedosto johon seuraavat rivit
ifconfig gamenet 172.16.1.4 netmask 255.255.255.0 ip route add 172.16.1.0/24 proto kernel dev gamenet src 172.16.4.1 table TINC ip route add default via 172.16.1.1 dev gamenet table TINC ifconfig gamenet mtu 1280
Sitten vielä lisätään tuo verkko taas bootissa nousevaksi eli muokkaamme tiedostoa /etc/tinc/nets.boot, lisäämme sinne rivin "gamenet".
gamenet
Eikä tässä vielä kaikki. Jotta bitti reitittyisi varmasti oikein, pitää luoda vähän hienompia reititystauluja. Alla vielä ohjeet miten.
Tiedostoon /etc/iproute2/rt_tables lisätään seuraava rivi.
2 TINC
Loput tuohon liittyen säädetäänkin sitten rc.localissa, sinne laitetaan seuraavat kolme riviä
ip rule add from 0.0.0.0/0 dev eth1 lookup TINC ip rule add from 0.0.0.0/0 dev gamenet lookup TINC iptables -t mangle -I FORWARD -i eth1 -o gamenet -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Sitten /etc/network/interfaces konfiguraatioon pitää eth1 liitännälle määrittää vielä yksi toiminto, kun interfacea nostetaan ylös, se määritellään näin
auto eth1
iface eth1 inet static
address 172.16.4.1
netmask 255.255.255.0
up ip route add 172.16.4.0/24 proto kernel dev eth1 src 172.16.4.1 table TINC
Sitten vielä dhcp-relay.
apt-get install dhcp-relay
Jonka jälkeen konfiguroidaan se näin tiedostoon /etc/default/dhcp3-relay
# Defaults for dhcp3-relay initscript # sourced by /etc/init.d/dhcp3-relay # installed at /etc/default/dhcp3-relay by the maintainer scripts # # This is a POSIX shell fragment # # What servers should the DHCP relay forward requests to? SERVERS="172.16.1.1" # On what interfaces should the DHCP relay (dhrelay) serve DHCP requests? INTERFACES="eth1 gamenet" # Additional options that are passed to the DHCP relay daemon? OPTIONS=""
Jotta bitti menisi kivasti intternettiin ja vielä samalla toimisi kaupungin verkon palvelutkin, pitää vähän säätää tuolla verkon keskipisteessä iptablesilla. Alla suora c&p iptables-savesta.
# Generated by iptables-save v1.4.2 on Thu Sep 30 12:14:28 2010 *nat :PREROUTING ACCEPT [289:25016] :POSTROUTING ACCEPT [86:6092] :OUTPUT ACCEPT [175:13988] -A POSTROUTING -s 172.16.0.0/16 -d 172.16.0.0/16 -j ACCEPT #-A POSTROUTING -d 10.41.0.0/16 -j ACCEPT -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 10.41.41.35 COMMIT # Completed on Thu Sep 30 12:14:28 2010 # Generated by iptables-save v1.4.2 on Thu Sep 30 12:14:28 2010 *filter :INPUT ACCEPT [7840:741102] :FORWARD DROP [0:0] :OUTPUT ACCEPT [6551:1904220] -A FORWARD -s 172.16.0.0/16 -i gamenet -o eth0 -j ACCEPT -A FORWARD -d 172.16.0.0/16 -i eth0 -o gamenet -j ACCEPT -A FORWARD -i gamenet -o gamenet -j ACCEPT -A FORWARD -i lo -j ACCEPT COMMIT # Completed on Thu Sep 30 12:14:28 2010
Jotta tuolla meidän omissa leikkiverkoissa jotka siis mahtuvat tuonne 172.16.0.0/16 blokkiin, toimisi DNS, tarvitaan DNS-proxy. Alla lyhyet ohjeet sen toimintakuntoon saattamiseksi.
apt-get install pdns-server
Kun paketti on iloisesti asentunut, on aika puskea sinne recursorin vaatima konfiguraatio sisään, alla siistitty esimerkki miten se pitäisi tehdä. Kyseinen data majailee tiedostossa /etc/powerdns/pdns.conf
allow-recursion=127.0.0.1, 172.16.0.0/16, ::1 config-dir=/etc/powerdns daemon=yes disable-axfr=yes guardian=yes lazy-recursion=yes local-address=172.16.1.1,127.0.0.1 local-ipv6=::1 local-port=53 module-dir=/usr/lib/powerdns query-local-address=<koneen_nuorisoverkon_ip> recursor=<nimipalvelin_miltä_kysellään> setgid=pdns setuid=pdns socket-dir=/var/run version-string=powerdns include=/etc/powerdns/pdns.d
Tämän jälkeen lisätään konffiin /etc/powerdns/pdns.d/pdns.local konffiksen seuraava rivi.
launch=bind
Kun kaikki on asennettu yllä olevin kikkarein, pitäisi homman lähteä toimimaan kun polkee vaan softaa käyntiin. Jos näin ei kuitenkaan ole niin tinc logittaa /var/log/daemon.log-tiedostoon. Voit myös ajaa tinc:iä käsin debugataksesi vikaa komennolla tincd -n gamenet -d5, tällöin samaiseen lokitiedostoon tulee tarkempia ilmoituksia tincin toiminnasta.
Jos joku ei jostain syystä toimi, luultavasti vika on reitityksissä, katsele "ip route"-komennolla näyttävätkö routet oikealta ja tarvittaessa samaisella komennolla muokkaa reittejä niin että bitti virtaa oikeaan paikkaan.
Sitten kun uusia toimipisteitä liittyy verkkoon, niin käytännössä kopioidaan jostain toiselta toimipisteeltä konffit, muokataan nimet oikein ja generoidaan avaimet. Tämän jälkeen suoritetaan RSA-avainten kopiointi ristiin tinc0-happi ja uuden toimipisteen välillä jonka jälkeen käynnistellään daemonit uudestaan ja tunnelin pitäisi muodostua.