Ero sivun ”SSH-tunneli” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
(selittelyä tarkemmin, mistä kyse)
Rivi 1: Rivi 1:
Tunnelointiin on Linuxissa lukuisia tapoja. Tässä keskitytään kaikkein helpoimpaan, eli tun-tunneliin SSH:n välityksellä. Ratkaisulla saavutetaan seuraavat edut:
Tunnelointiin on Linuxissa lukuisia tapoja. Kaikkein helpoiten tunnelointi onnistuu [[SSH#Tunneli|SSH:n porttiohjauksella]], joka tarvitsee ainoastaan käyttäjäoikeudet kumpaankin järjestelmään.
 
Tässä ohjeessa sen sijaan keskitytään IP-liikenteen tunnelointiin. Se onnistuu helpoiten tun-tunnelin ja SSH:n välityksellä. IP-tason tunnelointi on tarpeen esimerkiksi, kun on tarvetta tunneloida UDP-liikenteelle tai silloin, kun TCP-yhteys ei saa katketa, vaikka IP-osoite vaihtuisikin. Käyttökohde voi olla esimerkiksi irssi-proxyyn yhdistäminen tunnelin välityksellä, jolloin IRC-yhteys ei katkea, vaikka nettiyhteyden IP-osoite vaihtuisi. Tästä on hyötyä esimerkiksi epäluotettavien "mobiililaajakaistojen" kanssa.
 
SSH-välitteisellä IP-tunnelilla saavutetaan seuraavat edut:


* Helposti asetettavissa
* Helposti asetettavissa
Rivi 45: Rivi 49:
         echo Tunneli asetettu palvelimelle
         echo Tunneli asetettu palvelimelle
  fi
  fi
Mikäli haluat reitittää tunneloitavia paketteja myös lähiverkon tai Internetin välillä, lisää seuraava rivi iptablesiin:
iptables -t nat -A POSTROUTING -s 192.168.24.2/32 -o eth0 -j MASQUERADE
Korvaa esimerkissä oleva ''eth0'' käyttämäsi verkkolaitteen nimellä.


==Asiakkaan asettaminen==
==Asiakkaan asettaminen==

Versio 12. helmikuuta 2009 kello 00.23

Tunnelointiin on Linuxissa lukuisia tapoja. Kaikkein helpoiten tunnelointi onnistuu SSH:n porttiohjauksella, joka tarvitsee ainoastaan käyttäjäoikeudet kumpaankin järjestelmään.

Tässä ohjeessa sen sijaan keskitytään IP-liikenteen tunnelointiin. Se onnistuu helpoiten tun-tunnelin ja SSH:n välityksellä. IP-tason tunnelointi on tarpeen esimerkiksi, kun on tarvetta tunneloida UDP-liikenteelle tai silloin, kun TCP-yhteys ei saa katketa, vaikka IP-osoite vaihtuisikin. Käyttökohde voi olla esimerkiksi irssi-proxyyn yhdistäminen tunnelin välityksellä, jolloin IRC-yhteys ei katkea, vaikka nettiyhteyden IP-osoite vaihtuisi. Tästä on hyötyä esimerkiksi epäluotettavien "mobiililaajakaistojen" kanssa.

SSH-välitteisellä IP-tunnelilla saavutetaan seuraavat edut:

  • Helposti asetettavissa
  • Toimii kaikkien palomuurien kanssa, jotka läpäisevät tavallisen SSH-liikenteen
  • Ei tarvitse asentaa ohjelmia

Ratkaisulla on myös muutamia haittapuolia:

  • Tarvitsee root-oikeudet molemmista koneista (kuten useimmat muutkin tunneloinnit)
  • Ei ole verkkoliikenteen kannalta optimaalinen, koska tunneli toimii TCP-yhteyden välityksellä

Tässä artikkelissa esitellään SSH-tunnelin asettelu siten, että se on otettavissa vaivatta käyttöön esimerkiksi kannettavalla.

Esiasettelu

Luo ssh-avaimet tarvittaessa. Tätä tarkoitusta varten voit myös luoda omat avaimet. Tässä esimerkissä käytetään samoja avaimia kuin tavallisella käyttäjällä.

Valitse IPv4-osoitteet, jotka eivät ole käytössä tunnelia varten. Tässä esimerkissä käytetään osoitetta 192.168.24.1 palvelimelle ja 192.168.24.2 asiakkaalle. Esimerkin osoitteet on valittu umpimähkäisesti sisäverkkojen osoitealueesta. Valitse osoitteet, joita ei ole lähiverkossasi käytössä.

Valitse myös käyttämäsi tunnelinumero. Se voi olla oikeastaan mitä tahansa nollasta ylöspäin, jos käytössä ei ole muita tunneleita. Tässä esimerkissä käytetään onnennumeroa 3, jolloin verkkolaitteen nimeksi tulee tun3. Se saa eri palvelimella ja asiakkaalla.

Palvelimen asettaminen

Muokkaa tiedostoa ~root/.ssh/authorized_keys. Lisää sinne rivi

command="/root/tunnelip.sh",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding AVAIMESI TIEDOT

Komento antaa oikeudet suorittaa vain komennon /root/tunnelip.sh palvelimella.

Muokkaa tiedostoa /etc/ssh/sshd_config ja lisää sinne rivi

PermitTunnel yes

Luo uusi tiedosto ~root/tunnelip.sh, jonne seuraava sisältö:

#!/bin/bash
# muodostaa ssh-tunnelin ja tuhoaa aiemman tarvittaessa
CONNECTED=$(ip addr show dev tun3 to 192.168.24.1)

if [ "$CONNECTED" ]; then
        RAWSSHPID=$(lsof -F p /dev/net/tun)
        SSHPID=${RAWSSHPID:1}
        echo Tunneli oli päällä, komento oli $(</proc/$SSHPID/cmdline)
        kill "$SSHPID"
else
        ifconfig tun3 192.168.24.1 pointopoint 192.168.24.2 &&
        echo Tunneli asetettu palvelimelle
fi

Mikäli haluat reitittää tunneloitavia paketteja myös lähiverkon tai Internetin välillä, lisää seuraava rivi iptablesiin:

iptables -t nat -A POSTROUTING -s 192.168.24.2/32 -o eth0 -j MASQUERADE

Korvaa esimerkissä oleva eth0 käyttämäsi verkkolaitteen nimellä.

Asiakkaan asettaminen

Asiakaskoneena voi toimia esimerkiksi kannettava tietokone, jolta haluat päästä lähiverkkoon. Linux-käyttöjärjestelmässä on tuki tunneloinnille mukana. Tuen tunneloinnille voi asentaa erikseen myös Mac OS X:lle. Paketti on ladattavissa osoitteesta http://tuntaposx.sourceforge.net/ .

Luo uusi tiedosto ~root/tunnelconnect.sh, jonne sisällöksi:

#!/bin/bash
ifconfig tun3 192.168.24.2 192.168.24.1 &&
echo Tunneli asetettu paikallisesti

# elamaa helpottavat reitit
xargs -n 1 -I '{}' route add -host '{}' 192.168.24.1 <<END
        svn.cc.jyu.fi
        trac.cc.jyu.fi
        mot.kielikone.fi
END

Esimerkissä olevat kolme palvelimen nimeä, esimerkiksi svn.cc.jyu.fi, voidaan korvata niillä osoitteilla, jotka halutaan tunneloitavan osoitteen 192.168.24.1 lisäksi. Tämän avulla voidaan yksittäiseen IP-osoitteeseen menevä liikenne tunneloida samalla, kun muu liikenne kulkee normaalisti lyhintä reittiään. Ratkaisu on tarpeen palveluissa, joiden rajoitus perustuu IP-osoitteiden tarkistamiseen.

Muokkaa tiedostoa ~root/.ssh/config ja lisää sen loppuun rivi

host tunnel
        User root
        Hostname tieto.kone.fi
        IdentityFile /home/jaska/.ssh/id_dsa
        Tunnel point-to-point
        TunnelDevice 3:3
        PermitLocalCommand yes
        LocalCommand /root/tunnelconnect.sh

Muuta IdentityFile ja Hostname vastaamaan käyttämääsi ssh-avainta ja palvelimen osoitetta.

Näillä asetuksilla tarvisit rootin oikeudet joka kerta, kun haluat avata yhteyden. Tämän välttämiseksi asetetaan sudo-komento hyväksymään tunnelin avaaminen tavallisena käyttäjänä. Komenna visudo ja lisää tiedoston loppuun seuraava rivi:

jaska   ALL = NOPASSWD: /usr/bin/ssh -T tunnel

Korvaa tässä esimerkissä jaska asiakaskoneen käyttäjänimelläsi.

Lopuksi voit luopua pääkäyttäjän oikeuksista ja muokata tiedostoa ~jaska/.bash_profile. Lisää sinne rivi

alias tunneli="sudo /usr/bin/ssh -T tunnel"

Yhdistäminen

Komenna komentorivillä tunneli. Tunneli avautuu. Tunneli voidaan lopettaa Control-C -näppäinyhdistelmällä. Mikäli tunneli on katkennut yllättäen, ensimmäinen suorituskerta katkaisee aiemman tunnelin ja toisella kertaa yhteys muodostuu.