Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 1253

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>VPN HOWTO: Client</TITLE>
 <LINK HREF="VPN-HOWTO-5.html" REL=next>
 <LINK HREF="VPN-HOWTO-3.html" REL=previous>
 <LINK HREF="VPN-HOWTO.html#toc4" REL=contents>
</HEAD>
<BODY>
<A HREF="VPN-HOWTO-5.html">Avanti</A>
<A HREF="VPN-HOWTO-3.html">Indietro</A>
<A HREF="VPN-HOWTO.html#toc4">Indice</A>
<HR>
<H2><A NAME="s4">4. Client</A>                </H2>

<P>Ora esamineremo il lato client. In pratica, quando &egrave; usata per permettere 
l'accesso ad una rete remota, questa linuxbox pu&ograve; facilmente servire come un 
server Samba (networking con Windows), server DHCP, e anche come server web 
interno. La cosa importante da ricordare &egrave; che questa linuxbox deve essere pi&ugrave; 
sicura possibile, poich&egrave; serve tutta la rete remota.
<H2><A NAME="ss4.1">4.1 Il Kernel</A>
                        </H2>

<P>Per prima cosa, tu devi avere il ppp compilato nel tuo kernel. Se si vuole 
permettere a molte macchine di usare il tunnel, allora si ha bisogno di un 
servizio di firewall e di fowarding. Se il client si indirizza verso una sola 
macchina, ppp &egrave; sufficiente. 
<H2><A NAME="ss4.2">4.2 Creare il collegamento                         </A>
</H2>

<P>Il collegamento &egrave; creato lanciando <CODE>pppd</CODE> attraverso un pseudo terminale 
creato da <CODE>pty-redir</CODE> e connesso a <CODE>ssh</CODE>. Questo &egrave; fatto con una 
sequenza di comandi simile a questa:
<P>
<PRE>
# /usr/sbin/pty-redir /usr/bin/ssh -t -e none -o 'Batchmode yes' -c 
blowfish -i /root/.ssh/identity.vpn -l joe > /tmp/vpn-device
# sleep 10

# /usr/sbin/pppd `cat /tmp/vpn-device`
# sleep 15

# /sbin/route add -net 172.16.0.0 gw vpn-internal.mycompany.com netmask 
255.240.0.0
# /sbin/route add -net 192.168.0.0 gw vpn-internal.mycompany.com netmask 
255.255.0.0
</PRE>
<P>Semplicemente, quello che fa &egrave; far girare ssh, redirezionare il suo imput 
e l'output su pppd. L'opzione passata a ssh lo configura per girare senza 
caratteri escape (-e), usando il blowfish crypto algorithm (-c), usando la 
specificazione dell'identit&agrave; del file (-i), in terminal mode (-t), e con le 
opzioni 'Batchmode yes' (-o). I comandi di sleep  sono usati per estendere 
l'esecuzione dei comandi cos&igrave; che ogni processo possa completare il suo setup 
prima che il successivo parta.
<H2><A NAME="ss4.3">4.3 scripting</A>
                        </H2>

<P>Naturalmente non vuoi dover digitare i comandi sopra riportati ogni volta 
che vuoi che il tunnel si attivi. Ho scritto un set di script bash che tengono 
il tunnel attivo e funzionante. Puoi scaricare il package da 
<A HREF="http://www.shinythings.com/vpnd/vpnd.tar.gz">qui</A>. Devi solamente scaricarlo e decomprimerlo in /usr/local/vpn. 
All'interno troverai tre files:
<P>
<UL>
<LI>vpnd: Script che controlla la connessione del tunnel.</LI>
<LI>check-vpnd: Uno script da far girare tramite cron che controlla che vpnd 
sia attivo.                             </LI>
<LI>pty-redir: un piccolo eseguibile richiesto per inizializzare il 
tunnel..</LI>
</UL>
<P>Avrai bisogno di editare lo script <CODE>vpnd</CODE> per settare cose come 
l'username dei client e il nome dei server. Avrai anche bisogno di modificare 
la sezione starttunnel dello script per specificare quale rete stai usando. 
Sotto c'&egrave; una copia dello script. Noterai che potresti mettere lo script in 
una directory differente, hai solamente bisogno di cambiare la variabile 
VPN_DIR.
<P>
<A NAME="vpnd-script"></A> <PRE>

#! /bin/bash
#
# vpnd: Monitor the tunnel, bring it up and down as necessary
#

USERNAME=vpn-username
IDENTITY=/root/.ssh/identity.vpn

VPN_DIR=/usr/local/vpn
LOCK_DIR=/var/run
VPN_EXTERNAL=vpn.mycompany.com
VPN_INTERNAL=vpn-internal.mycompany.com
PTY_REDIR=${VPN_DIR}/pty-redir
SSH=${VPN_DIR}/${VPN_EXTERNAL}
PPPD=/usr/sbin/pppd
ROUTE=/sbin/route
CRYPTO=blowfish
PPP_OPTIONS="noipdefault ipcp-accept-local ipcp-accept-remote local noauth 
nocrtscts lock nodefaultroute"
ORIG_SSH=/usr/bin/ssh


starttunnel () {
   $PTY_REDIR $SSH -t -e none -o 'Batchmode yes' -c $CRYPTO -i $IDENTITY -l 
$USERNAME > /tmp/vpn-device
   sleep 15

   $PPPD `cat /tmp/vpn-device` $PPP_OPTIONS
   sleep 15

   # Add routes (modify these lines as necessary)
   /sbin/route add -net 10.0.0.0 gw $VPN_INTERNAL netmask 255.0.0.0
   /sbin/route add -net 172.16.0.0 gw $VPN_INTERNAL netmask 255.240.0.0
   /sbin/route add -net 192.168.0.0 gw $VPN_INTERNAL netmask 255.255.0.0
}

stoptunnel () {
   kill `ps ax | grep $SSH | grep -v grep | awk '{print $1}'`
}

resettunnel () {
   echo "reseting tunnel."
   date >> ${VPN_DIR}/restart.log
   eval stoptunnel
   sleep 5
   eval starttunnel
}

checktunnel () {
   ping -c 4 $VPN_EXTERNAL 2>/dev/null 1>/dev/null

   if [ $? -eq 0 ]; then
      ping -c 4 $VPN_INTERNAL 2>/dev/null 1>/dev/null
      if [ $? -ne 0 ]; then
         eval resettunnel
      fi
   fi
}

settraps () {
   trap "eval stoptunnel; exit 0" INT TERM
   trap "eval resettunnel" HUP
   trap "eval checktunnel" USR1
}

runchecks () {
   if [ -f ${LOCK_DIR}/tunnel.pid ]; then
      OLD_PID=`cat ${LOCK_DIR}/vpnd.pid`
      if [ -d /proc/${OLD_PID} ]; then
         echo "vpnd is already running on process ${OLD_PID}."
         exit 1
      else
         echo "removing stale pid file."
         rm -rf ${LOCK_DIR}/vpnd.pid
         echo $$ > ${LOCK_DIR}/vpnd.pid
         echo "checking tunnel state."
         eval checktunnel
      fi
   else
      echo $$ > ${LOCK_DIR}/vpnd.pid
      eval starttunnel
   fi
}

case $1 in
    check)  if [ -d /proc/`cat ${LOCK_DIR}/vpnd.pid` ]; then
               kill -USR1 `cat ${LOCK_DIR}/vpnd.pid`
               exit 0
            else
               echo "vpnd is not running."
               exit 1
            fi ;;

    reset)  if [ -d /proc/`cat ${LOCK_DIR}/vpnd.pid` ]; then
               kill -HUP `cat ${LOCK_DIR}/vpnd.pid`
               exit 0
            else
               echo "vpnd is not running."
               exit 1
            fi ;;

   --help | -h)
            echo "Usage: vpnd [ check | reset ]"
            echo "Options:"
            echo "     check    Sends running vpnd a USR1 signal, telling it 
to check"
            echo "              the tunnel state, and restart if neccesary."
            echo "     reset    Sends running vpnd a HUP signal, telling it to 
reset"
            echo "              it's tunnel connection." ;; 
esac

ln -sf $ORIG_SSH $SSH
settraps
runchecks

while true; do
   i=0
   while [ $i -lt 600 ]; do
      i=((i+1))
      sleep 1
   done
   eval checktunnel
done
</PRE>
<H2><A NAME="ss4.4">4.4 LRP - Linux Router Project</A>
                        </H2>

<P>Io attualmente faccio girare questa configurazione su un Pentium 90 con 
una distribuzione LRP di Linux. LRP &egrave; una distribuzione di Linux che st&agrave; in un 
solo floppy disk. Puoi saperne di pi&ugrave; a 
<A HREF="http://www.linuxrouter.org/">http://www.linuxrouter.org/</A>. 
Puoi scaricare il mio package LRP per il client VPN da 
<A HREF="http://www.shinythings.com/vpnd/vpnd.lrp">qui</A>. Avrai bisogno 
pure dei pacchetti ppp che ssh che puoi trovare nel sito di LRP.
<HR>
<A HREF="VPN-HOWTO-5.html">Avanti</A>
<A HREF="VPN-HOWTO-3.html">Indietro</A>
<A HREF="VPN-HOWTO.html#toc4">Indice</A>
</BODY>
</HTML>