InicioLinuxConfigurar VPN sin perder Internet (Parte 2)

Configurar VPN sin perder Internet (Parte 2)

Linux9/28/2013
¿otra vez vas a hablar de lo mismo?

Sip... devuelta a lo mismo. Si leyeron hace algunos días la "solución" que propuse para conectarnos a una vpn sin perder la salida a internet , quizas no lo notaron, pero esa solucion puede ser un tanto tediosa si hay que utilizarla tras cada reinicio, tras cada reconexion (sobre todo con DHCP).

Configurar VPN sin perder Internet (Parte 2)

Despues de dos semanas utilizando el sistema ya descripto, tuve la necesidad de automatizar el proceso, de modo que escribi un script en bash (al que llame vpn.sh) que detecta cuando estamos conectados, y cuando, estando conectados, no tenemos acceso a la VPN y a internet al mismo tiempo, y ejecuta el comando route para permitirnos navegar libremente mientras estamos dentro de la vpn.

#!/bin/bash

log='/home/usuario/logVPN.txt'
VPNACTIVA=`route | grep -c ppp0`
HORA=`date`

if [ $VPNACTIVA = "0" ]; then
    echo 'no hay vpn' > $log
    echo 'IP = 011.110.110.110' >> $log
    echo 'Ultima Ejecucion: ' $HORA >> $log    
    exit
else
IPACTIVA=`ifconfig ppp0 | grep 192.168.0. | cut -c14-26`
IP=`cat $log |grep IP | cut -c6-20`
fi

if [[ $IPACTIVA != $IP ]]; then
    IP=`ifconfig ppp0 | grep 192.168.0. | cut -c14-26`
    route add -net 192.168.0.0 netmask 255.255.255.0 gw $IP dev ppp0
    echo 'IP =' $IP > $log
    echo 'Ultima Ejecucion '$HORA >> $log    
    exit
else
    echo 'comprobado: '$HORA >> $log
    exit    
fi


Pero aún teniendo este script seria tedioso ejecutarlo cada vez que necesitmos ver si la conexión esta correctamente configurada, de modo que decidi agregarla al crontab de root para que corra automaticamente cada 3 minutos. De esta manera, cuando haya alguna interrupción de la conexión con la vpn, cuando el script se vuelva a ejecutar, estaremos correctamente conectados nuevamente.

Para agregar el script a crontab nos logeamos como root y ejecutamos:

crontab -e

Eso nos va a abrir el archivo crontab para que lo editemos, o en caso de que no lo tengamos, creara uno nuevo. Dentro del archivo crontab escribimos lo siguiente:


SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
*/3 * * * * sh /home/usuario/vpn.sh


Bien, hasta ahi una explicación corta de como automatizar el proceso, ahora hago una explicación mas "detallada" para quienes quieran entender un poco mejor lo que hice.


Yapa
Explicación del script

Comienzo estableciendo 3 variables:


#!/bin/bash
log='/home/usuario/logVPN.txt'
VPNACTIVA=`route | grep -c ppp0`
HORA=`date`


log='/home/usuario/logVPN.txt': Indico el archivo donde voy a ir guardando los Log de las distintas corridas del script.

VPNACTIVA=`route | grep -c ppp0`: El valor de VPNACTIVA sera 0 solo si no existe interface ppp0, osea, cuando no estemos conectados a la VPN. Si no recuerdan por que es ppp0 visiten el anterior post y sabran ver que interface les corresponde ingresar a ustedes en su lugar.

HORA=`date`: Guardo la hora actual del sistema para saber cual fue la ultima corrida del script.


if [ $VPNACTIVA = "0" ]; then
    echo 'no hay vpn' > $log
    echo 'IP = 011.110.110.110' >> $log
    echo 'Ultima Ejecucion: ' $HORA >> $log    
    exit
else
IPACTIVA=`ifconfig ppp0 | grep 192.168.0. | cut -c14-26`
IP=`cat $log |grep IP | cut -c6-20`
fi


Luego comparo el valor de VPNACTIVA, si es 0, significa que no tenemos conexión a la VPN, reemplazo el archivos de log introduciendo una IP falsa que luego voy a usar para otras comparaciones.

Si VPNACTIVA es distinto de 0, significa que tenemos conexión a la VPN, le damos a la variable IPACTIVA el valor de la IP que nos dío la VPN y a IP el valor de IP que tengamos en nuestro archivo de log.


if [[ $IPACTIVA != $IP ]]; then
    IP=`ifconfig ppp0 | grep 192.168.0. | cut -c14-26`
    route add -net 192.168.0.0 netmask 255.255.255.0 gw $IP dev ppp0
    echo 'IP =' $IP > $log
    echo 'Ultima Ejecucion '$HORA >> $log    
    exit
else
    echo 'comprobado: '$HORA >> $log
    exit    
fi


En el siguiente paso comparamos la IPACTIVA con la IP. Si son distintas corre el comando route con la IP que tenemos en ese momento y la guarda en el archivo de log.

Esto es asi por que si IPACTIVA y IP son distintas puede significar dos cosas:

1) Que en la corrida anterior la VPN este desactivada y la ip que figura en el log sea la ip falsa que forzamos.

2) Que haya habido una reconexión a la VPN y el servidor nos haya cambiado nuestra IP, siendo necesario actualizar esta información en el route.

Si por el contrario las dos ip son iguales, simplemente agrega la hora de comprobación en el archivo de log.
crontab

Del crontab solo dire lo siguiente: cuando ejecuten crontab -e se abrira el editor predetarminado, generalmente es vi y para los queno estan acostumbrados es un tanto complicado. Para todos ellos recomiendo definir como editor a nano de la siguiente manera:

EDITOR=nano

export EDITOR

No entrare mas en detalle con respecto a este tema por que les recomiendo que le den una leidita a la wiki de cron .
Datos archivados del Taringa! original
110puntos
514visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
0visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

No hay comentarios nuevos todavía

Autor del Post

M
Maclu🇦🇷
Usuario
Puntos0
Posts6
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.