SSH TUNNELING II

Problema: quiero acceder desde casa a mi pc del curro que esta detrás de un firewall y por tanto no puedo conectar de ninguna manera. ¿comorl?

Primero intente crear en mi pc de casa un servidor openvpn y el pc del curro que fuera un cliente de la vpn, de manera que si dejo el pc de casa abierto, el del curro se conecta y ya tengo la vpn. Funcionó bien hasta que por algun motivo el openvpn no se reconectaba....

Solución más fácil: SSH
  1. en el sshd_config activar la directiva PermitTunnel yes (el las 2 maquinas)
  2. crear claves para poder acceder por ssh sin contraseña
  3. acceder desde el curro a casa: ssh -w 0:1 root@micasa -N &. Esto hace que en el curro tenga la interfaz tun0 y en casa la tun1 que permita crear un tunnel
  4. configurar las interfaces. En el curro: ifconfig tun0 10.0.0.1 netmask 255.255.255.252 y en casa (desde el curro): ssh root@micasa 'ifconfig tun1 10.0.0.2 netmask 255.255.255.252' 
  5. en ssh_config activar la directiva ServerAliveInterval 15ServerAliveCountMax 4 para mantener la conexión viva
Ahora gracias  al tunel creado via ssh ya puedo acceder desde una maquina a la otra de forma bidireccional. Ahora solo queda automatizar-lo para que la maquina del curro vaya intentando conectar a mi casa para hacer el tunnel (la idea es que si veo que necesitaré acceder, dejaré la del curro encendida y cuando llegue a casa encendere mi pc. Entonces, la del curro cuando lo vea, monté el tunnel):


#!/bin/bash

HOST=micasa.com
PIDFILE=/var/run/vpn.pid
TMP=/tmp/vpn.log

# Funcion para mirar si hay connectividad al ssh de casa
function homeReachable()
{
   nc -w 2 $HOST 22
  
   if [ $? -eq 0 ]; then
        echo "Conectividad.... OK" >> $TMP
        REACH=0
   else
        echo "Conectividad.... FALLA" >> $TMP
        REACH=1
   fi
}


# Funcio para mirar si existe tunnel o ha muerto
function is_there_a_tunnel()
{
   local exist=$(ps ax | grep $HOST | wc -l)
   if [ $exist -le 1 ]; then
        echo "Tunnel.... DOWN" >> $TMP
        rm -f $PIDFILE     
   else
        echo "Tunnel.... UP" >> $TMP
   fi
}

echo "---- START ----------------" >> $TMP
## Primero miramos si tenemos algun tunel levantado
## y si es que no eliminamos el pidfile
is_there_a_tunnel

## Ahora miramos si tenemos connectividad
## Si hay y tenemos tunel = nothing
## Si hay y no temeos tunel = crear tunnel y config
## Si no hay = matar proceso i eliminar pidfile 

homeReachable
if [ $REACH -eq 0 ]; then

        if [ -e $PIDFILE ]; then
                echo "funcionando..." >> $TMP
        else
                # creamos el tunel
                nohup ssh -w 0:1 root@$HOST &
                echo $! > $PIDFILE 
                sleep 5
                # configuramos el tunnel a los 2 extremos
                ssh root@$HOST 'ifconfig tun1 10.0.0.2 netmask 255.255.255.252'
                /sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.252

                echo " Tunel creado" >> $TMP
        fi
else
        if [ -e $PIDFILE ]; then
           kill -9 `cat $PIDFILE`
           rm -f $PIDFILE
        fi
fi

echo "------ END ----------------" >> $TMP
echo "" >> $TMP

.

Comentarios