martes, febrero 25, 2014

Como conectar linux a VPN servida por windows o PPP desde linea de comandos

Estamos hablando de VPN que es por protocolo PPP

Para conectar ubuntu a una VPN de manera gráfica es muy sencillo ya que trae una GUI de manejo sencillo, al parecer más fácil que en el propio windows.


Sin embargo establecer la conexión requiere interacción manual de nuestra parte, y cuando requerimos la conexión de manera cotidiana resulta engorroso tener que estar conectándola a cada rato que se desconecta, por lo que una forma de hacerlo mediante un script es más adecuada. Otra ventaja es que podemos fijar las rutas manualmente y no sacar todo nuestro tráfico por la VPN.

Requerimos el comando pppd, el cual viene como parte del paquete ppp.

Si no lo tenemos instalado es tan sencillo como usar el comando.

sudo apt-get install ppp pptp-linux

Ahora si entremos en materia de como se hace:
nota: los parámetros se ponen mayúsculas

Primero el comando para levantar el cliente de VPN

pppd call VPN_NAME debug logfd 2 nodetach

El programa buscara los parámetros en el archivo
/etc/ppp/peers/VPN_NAME

cosa que nos damos cuenta cuando lo corremos y aún no tenemos el archivo ya que marca:

pppd: Can't open options file /etc/ppp/peers/VPN_NAME: No such file or directory

En dicho archivo tenemos que poner lo siguiente:

pty "pptp VPN_HOST --nolaunchpppd"
name USERNAME
# esto para que use la ultima versión ms-chap2 al no usar los otros métodos de autentificación
refuse-pap
refuse-eap
refuse-chap
# deshabilitar compresion bsd
nobsdcomp
# deshabilitar compresión deflate
nodeflate

Adicionalmente tenemos que especificar el password a usar en el archivo
/etc/ppp/chap-secrets

USERNAME SOMETHING PASSWORD *

curiosamente el parámetro SERVER podriamos pensar que corresponde al VPN_HOST pero no es así,   hemos puesto inicialmente el valor SOMETHING porque no sabemos que tenemos que poner

guardamos y corremos nuevamente el comando de conexión

pppd call VPN_NAME debug logfd 2 nodetach

a lo que obtendremos un mensaje de error entre lo que encontraremos lo siguiente:

No CHAP secret found for authenticating us to X

Ese X es lo que tenemos que poner en lugar de SOMETHING en el archivo chap-secrets.

Al hacerlo y volver a conectar a la vpn:

pppd call VPN_NAME debug logfd 2 nodetach

si el password es correcto podemos ver que se queda abierta la conexión y se queda corriendo el programa porque le hemos dicho nodetach, lo que nos facilita poner el comando dentro de un ciclo para que se mantenga abierta la vpn.

La parte truculenta de esto fue el SOMETHING ya que esto no aparece explicado por ninguna parte que he visto en internet ni en la documentación.

Si queremos ver un poco más de info de depuración podemos ver los mensajes de salida de pppd

tail -f /var/log/messages | grep pppd

Una vez que estamos conectados tenemos de dos sopas para que los IPs remotos sean accesibles, una es añadir como ruta default la interface ppp0, con el inconveniente de que si en la VPN no tenemos acceso a internet en nuestro equipo nos quedamos sin internet:

route add default dev ppp0

La segunda, es si ya conocemos los segmentos a los que tenemos acceso dentro de la VPN, añadimos estos segmentos

route add -net x.x.x.x/x dev ppp0

Si la info te ha sido de utilidad no olvides regalar un comentario.