Para establecer una conexión con una VPN en un entorno GNU/Linux, podemos utilizar el gestor de conexiones Network Manager con su plugin PPTP, que ya aparece instalado por defecto en multitud de distribuciones.
En el caso concreto de la VPN de la UCLM, la configuración de una conexión VPN a través de Network Manager ya aparece aquí explicada para la distribución Fedora. Para el caso de una distribución Debian tan solo sería necesario cambiar la invocación del gestor de paquetes yum por apt/aptitude mediante la orden:
root@raptor:/home/j2sg# aptitude install pptp-linux network-manager network-manager-pptp
Sin embargo, es posible que usemos WICD como gestor de conexiones, el cual no dispone actualmente de soporte para conexiones VPN, o bien que directamente no usemos ningún gestor de conexiones configurándolas directamente a través del fichero /etc/network/interfaces. Si este es el caso, es posible configurar una conexión PPTP a una VPN en unos pocos pasos:
- Instalar el cliente PPTP:
root@raptor:/home/j2sg# aptitude install pptp-linux
- Editar del fichero /etc/ppp/options.pptp añadiendo y/o comentando las lineas necesarias para que su contenido sea el siguiente:
lock noauth refuse-pap refuse-eap refuse-chap refuse-mschap #nobsdcomp #nodeflate require-mppe-128 mppe-stateful
- Añadir la siguiente linea al fichero /etc/ppp/chap-secrets sustituyendo $USUARIO y $PASSWORD por el usuario(DNI) y contraseña correspondiente:
$USUARIO PPTP $PASSWORD *
- Modificar permisos de /etc/ppp/chap-secrets para lectura/escritura para el root:
root@raptor:/etc/ppp# chmod 0600 chap-secrets
- Crear el fichero /etc/ppp/peers/uclm con el contenido:
pty "pptp vpn.uclm.es --nolaunchpppd" name $USUARIO remotename PPTP file /etc/ppp/options.pptp ipparam uclm
- Cargar el modulo para soporte de cifrado MPPE:
root@raptor:/etc/ppp# modprobe ppp_mppe
- Añadir el modulo ppp_mppe al fichero /etc/modules para que sea cargado automáticamente el próximo arranque:
root@raptor:/etc/ppp# echo "ppp_mppe" >> /etc/modules
- Para iniciar el tunel VPN:
root@raptor:/etc/ppp# pon uclm root@raptor:/etc/ppp# route add default ppp0
Podemos comprobar que se ha creado una nueva interfaz de red y se han añadido nuevas entradas en la tabla de rutas:
root@raptor:/etc/ppp# ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:161.67.172.202 P-t-P:161.67.172.137 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:80 (80.0 B) TX bytes:80 (80.0 B) root@raptor:/etc/ppp# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 161.67.172.137 * 255.255.255.255 UH 0 0 0 ppp0 vpn.uclm.es 192.168.1.1 255.255.255.255 UGH 0 0 0 eth0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 default * 0.0.0.0 U 0 0 0 ppp0 default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
- Para pararlo:
root@raptor:/etc/ppp# poff uclm root@raptor:/etc/ppp# route del vpn.uclm.es
Llegado este punto, ya podemos establecer una conexión PPTP con la VPN, sin embargo podemos utilizar el siguiente script de shell por comodidad:
#!/bin/bash ## uclm.sh : Script de Shell para Bash. ## Inicia/Detiene conexion con VPN de la UCLM a traves de tunel PPTP. ## Autor: Juan Jose Salazar Garcia (jjslzgc@gmail.com) ## Fecha: 17/02/11 IFACE=ppp0 start() { echo -n "Iniciando conexion con UCLM ." if [ ! -z "`ifconfig -a |grep $IFACE`" ]; then echo " Error : Existe una conexion activa" exit 1 fi pon uclm for i in `seq 10`; do echo -n "." && sleep 1; done ip=`ifconfig -a | grep -A2 $IFACE | grep inet | awk {' print $2 '} | cut -b6-` if [ -z "$ip" ]; then echo " Error : Conexion fallida" exit 1 fi route add default $IFACE echo " OK" echo "IP Asignada : $ip" } stop() { echo -n "Cerrando conexion con UCLM ..." if [ -z "`ifconfig -a |grep $IFACE`" ]; then echo " Error : No existe una conexion activa" exit 1 fi poff uclm route del vpn.uclm.es echo " OK" } if [ ! $# -eq 1 ]; then echo "$0 [start|stop]" exit 1 fi case "$1" in start) start ;; stop) stop ;; *) echo "$0 {start|stop}" ;; esac exit 0
Para establecer conexión invocamos:
root@raptor:/home/j2sg# ./uclm.sh start Iniciando conexion con UCLM ........... OK IP Asignada : 161.67.172.148
Para finalizar la conexión invocamos:
root@raptor:/home/j2sg# ./uclm.sh stop Cerrando conexion con UCLM ... OK
Colocamos el script en un directorio que sea del $PATH del sistema:
root@raptor:/home/j2sg# cp uclm.sh /usr/local/bin
Y eso es todo amigos. 🙂
Fuentes:
Muy buena receta, congratulaitons.
Tengo un problemilla, al añadir la ruta la a iface ppp0 (root@mipc:/etc/ppp# route add default ppp0) el terminal me escupe lo siguiente:
SOCADDRT: La red no está activa.
Buscando he encontrado como solucionarlo, que es utilizar:
root@mipc:/etc/ppp# pppd call uclm
en lugar de:
root@mipc:/etc/ppp# pon uclm
y a continuación puedo ejecutar:
root@mipc:/etc/ppp# route add default ppp0
sin problemas
Solucionado está, pero no lo comprendo muy bien. ¿Alguna explicación?
Hola Manu.
Ese error se produce porqué cuando vas ha añadir la nueva entrada a la tabla de rutas, la interfaz ppp0 a la que haces referencia no existe, ya que cuando invocaste pon uclm para abrir el tunel se debio de producir algún error durante la fase de negociación/autenticación, con lo cual la interfaz se eliminó, algo que puedes ver invocando ifconfig -a
Lo que me sorprende es que con el demonio pppd te funcione, ya que cuando le pasas la opción call uclm se nutre de las mismas opciones de configuración descritas en el fichero /etc/ppp/peers/uclm leido por el comando pon.
Para averiguar el motivo lo mejor será que utilices el modo de depuración, el cual te imprimirá por la salida estándar todo lo relativo al tunel, para lo cual solamente tienes que añadir las opciones debug dump logfd 2 nodetach cuando invocas pon tal como se indica en [1].
Saludos y muchas gracias por tu comentario. 🙂
[1]: http://pptpclient.sourceforge.net/howto-diagnosis.phtml#debug