OpenVPN es una solución de conectividad basada en software libre: SSL (Secure Sockets Layer) VPN Virtual Private Network (red virtual privada), OpenVPN ofrece conectividad punto-a-punto con validación jerárquica de usuarios y host conectados remotamente, resulta una muy buena opción en tecnologías Wi-Fi y soporta una amplia configuración, entre ellas balanceo de cargas. Está publicado bajo la licencia GPL, de software libre.

 

Esquema de red

Una actuará como servidor vpn, mientras que la otra actuará como cliente:

Recomiendo hacer dicho escenario con KVM o virtualbox, modificando el fichero /etc/network/interfaces

Una vez tengamos definido el esquema vamos a proceder a configurar OpenVPN.

Instalar OpenVPN

Vamos a instalar los paquetes apt install openvpn openssl en la maquina que va a actuar de servidor «Server», una vez instalado creamos un directorio que se llamara easy-rsa en /etc/openvpn

OpenVPN nos ofrece una serie de scripts para la creación de certificados autofirmados para identificar a nuestro servidor tanto como a los clientes, la ubicación de estos scripts es el directorio /usr/share/easy-rsa, ahora copiaremos esta serie de scripts al directorio easy-rsa creado previamente.

Para la creación de los certificados es necesario exportar una serie de variables para definir los datos en la creación de los certificados que vamos a crear. Esto lo realizamos editando el fichero vars.

Eliminamos todos los comentarios y dejamos las siguientes lineas:

Ejecutamos el script modificado

Una de las lineas que podemos observar en el script es la que podemos ver anteriormente, es decir, nos solicitara la ejecución del script para eliminar posibles claves:

Con esto tenemos todas las configuraciones previas a la creación de certificados.

Creación llave diffies hellman

Es un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro, y de manera anónima (no autentificada). Se emplea generalmente como medio para acordar claves simétricas que serán empleadas para el cifrado de una sesión (establecer clave de sesión). Siendo no autenticado, sin embargo, provee las bases para varios protocolos autenticados.

Para ello ejecutamos el script build-dh:

Creación certificado Autoridad certificadora

Podemos observar como crear un certificado raiz y como firmar peticiones de certificados en el siguiente post

Ahora solo vamos ejecutar el script que realiza esta opción build-ca:

Info! Si nos devuelve un error bastara con editar el fichero el cual nos de el error, en mi caso, ha sido openssl-1.0.0.conf y comentamos las lineas que dan error, para ver la linea nano -c [Nombre_fichero]

Creación Clave y certificado raíz

Para el correcto funcionamiento de OpenVPN también se requiere de un certificado y una key en el servidor, para ello vamos a utilizar el script build-key-server [nombre].

Servidor

Host

Igual que hemos realizado en el paso anterior vamos a crear un certificado y una clave privada para la maquina host ./build-key [Nombre], pero en este caso al no tratarse del servidor ejecutaremos un script distinto.

Ya tendremos todas las claves y certificados en el directorio /etc/openvpn/easy-rsa/keys:

Info! Por defecto OpenVPN genera tanto los certificados como las keys con sus correctos permisos.

Configuración túnel en las dos maquinas

Vamos a modificar tanto en Server como en el cliente host

Server

En el servidor tenemos instalado openvpn, por lo tanto vamos a crear un fichero que se llamara servidor.conf.

Creamos fichero servidor.conf

Una vez creado y guardado el fichero reiniciamos el servicio systemctl restart openvpn.service && reboot, al volver a arrancar la maquina realizamos un ip a y observamos ya tenemos nuestro tunel:

El ultimo paso en el servidor es permitir el enrutamiento para ello modificamos la siguiente linea en /etc/sysctl.conf:

Host

Esta maquina actuara como cliente y no tenemos instalado el paquete apt install openvpn, una vez instalado, vamos a adquirir los certificados creados en nuestro servidor, para ello vamos a utilizar el comando scp

Creamos el directorio mkdir /etc/openvpn/keys y copiamos a /etc/openvpn/keys, los ficheros transferidos por scp

Creamos fichero host.conf

Creamos en /etc/openvpn el fichero host.conf y lo rellenamos con lo siguiente:

Guardamos la configuración, reiniciamos el servicio y reiniciamos la maquina systemctl restart openvpn && reboot

Comprobaciones tunel

Vamos a realizar diferentes comprobaciones como por ejemplo:

Ping y traceroute de una maquina cliente a otra

Cliente1-Cliente2

Cliente2-Cliente1

Conexion ssh de una maquina cliente a otra

Cliente1-Cliente2

Cliente2-Cliente1