Cómo salir a internet a través de 2 vpns?

 

Recientemente tuve una amistad que me pidió ayuda. Él quiere conectar la PC de su casa a un servidor VPN (1), y que luego ese servidor se conecte a otro servidor VPN (2); siendo su objetivo final salir a internet con el IP público del servidor VPN 2.

La solución a su problema tiene nombre y es MULTI-HOP VPN. Pero que es MULTI-HOP VPN?

Como su nombre lo indica es una VPN de múltiples saltos que agrega una capa adicional de cifrado y un servidor adicional a su conexión VPN normal al «encadenar» o «conectar en cascada» dos o más servidores VPN juntos. El propósito es aumentar la seguridad y la privacidad proporcionadas por una conexión VPN estándar de un solo servidor.

Las VPN de múltiples saltos a veces se denominan VPN dobles, aunque se puede incluir cualquier cantidad de servidores VPN en la cadena. Esta guía le explicará todo lo que necesita saber sobre las VPN multisalto y como implementar una.

Así es como funciona una VPN típica de doble salto:

  • Sus datos se cifran en su dispositivo una vez, luego encriptada en su dispositivo por segunda vez (dos capas de encriptación).
  • Los datos cifrados se envían al primer servidor VPN. Se elimina la segunda capa de cifrado.
  • Los datos cifrados se envían al segundo servidor VPN.
  • Se elimina la primera capa de cifrado y los datos se descifran por completo.
  • Los datos descifrados se envían a su destino final.

Tenga en cuenta que cada capa de cifrado se elimina en el orden inverso al que se aplicó: el último en entrar, el primero en salir. La primera VPN en cifrar datos en el dispositivo será el último servidor de la cadena, y el último en cifrar datos será el primero de la cadena. Este túnel dentro de un túnel resuelve algunos de los problemas que pueden afectar a las conexiones VPN normales.

Este embrollo de palabras tal vez sea más fácil de entender en el siguiente esquema:

Pues bien, planteado el problema toca aplicar la solución.

  • La solución vpn a utilizar es el OpenVPN, pero puede utilizarse cualquier vpn (WireGuard, Outline…).
  • El cliente, por cuestiones de comodidad, será una VM con Ubuntu 22.04 corriendo localmente en mi propia laptop
  • El servidor VPN1 será una VM corriendo en un IaaS que ofrece buenos precios llamado Virtalus. Correrá Ubuntu 20.04. La misma tiene el IP público 144.168.40.133.
  • El servidor VPN2 será una instancia de EC2 en AWS. Correrá Ubuntu 20.04. La misma tiene el IP público 99.79.50.37.

NOTA: Recuerde siempre que cree alguna VM en algún Cloud Provider abrir los protocolos/puertos en los que va a ofrecer los servicios. En este caso específico son UDP/1194.

Debido a que los CloudProvider cobran por recursos utilizados y esto es un “home” lab, la RAM y CPU de cada VM son los mínimos (512 RAM y 1vCPU).

Comenzamos por la parte más fácil: instalar openvpn en cada una de nuestras VMs:

Configuración del VPN2

El siguiente paso es configurar el servidor OpenVPN en la instancia EC2 de AWS (VPN2). Para configurar servidores openvpn hay muchos artículos en línea, el presente tutorial no está enfocado en mejorar la velocidad ni la seguridad de la conexión, así que utilizo un script que me levanta un servidor openvpn en cuestión de segundos. El código del script no me pertenece, pero es libre de usar y está aquí.

Así que, entre a su VPN2 utilizando su cliente SSH de preferencia:

El script te hace algunas preguntas que te llevarán a configurar el servidor OpenVPN por ti, respóndalas a placer. Son preguntas simples y fáciles de responder y en todos los casos vienen con opciones pre-configuradas. Personalmente siempre dejo las opciones por defecto. Algo a tomar en cuenta es que en el caso específico de este script configura la vpn para utilizar la subred 10.8.0.0/24, detalle que será de importancia en la configuración del VPN1 (Virtalus).

En el proceso del propio script, en el penúltimo paso pregunta si quiere crear los criptomateriales para una conexión, basta con escribir un nombre cualquiera, por ejemplo “vpn1”, y en el paso final pregunta si quieres generarlos con contraseña, la opción por defecto es NO, pero es a gusto del consumidor si utilizar contraseña o no. Una vez termina el proceso sólo queda copiar los criptomateriales generados, si lee bien el output del script, los mismos estarán situados en /root/$nombre_que_introdujo. Hágale un cat, y cópielos en su editor de textos favorito.

Configuración del VPN1

Ahora vamos con la configuración del VPN1 (Virtalus). Primeramente, dentro de la VM, pegue en algún archivo de texto el contenido que copió previamente de /root/$nombre_que_introdujo del VPN2. Puede utilizar su editor de preferencia (nano rules!!!).  O:

NOTA: Lo anterior es sólo un ejemplo de cómo se vería un archivo de criptomateriales de openvpn

Para probar el servidor OpenVPN corriendo en el VPN1 intente realizar una conexión:

Una vez dentro de la sesión de tmux:

NOTA: Lo más seguro es que en este punto pierda la conexión con el VPN1, esto ocurre a que al conectarse a un servidor OpenVPN, este le configura las rutas por defecto para salir al internet usando la conexión del VPN2. En este caso solamente tiene que abrir una consola a esa VM desde el servicio web que contrató para instanciarla, en el caso de Virtalus el proceso es sencillo. Les dejo los links para los casos de AWS, Linode y Azure. Una vez dentro de la consola virtual abre la sesión de tmux llamada (en mi caso) vpn y solamente envía Ctrl+C, esto detendrá la conexión y podrá volver a conectarse a su VPN1 usando el cliente SSH de preferencia.

Probada que la conexión fue satisfactoria ahora queda configurar el servidor OpenVPN en VPN1, para ello hacemos la misma operación que en el caso del VPN2:

Recuerde que el script genera un archivo con el nombre que usted le escriba, en dicho archivo están los criptomateriales para la conexión openvpn. Cópielos en algún editor de texto y téngalo a mano!

Ahora, aquí deberemos de hacer un pequeño arreglo en la configuración del servidor OpenVPN, así que detenga el servicio y abra el archivo de configuración:

En este archivo tenemos que buscar la línea siguiente:

Y cambiar la subred 10.8.0.0, por alguna otra de su preferencia. En mi caso en particular utilicé la 10.10.0.0. Hecho este cambio puede proceder a iniciar el servicio que detuvo:

NOTA: El cambio es requerido hacerlo debido a que ambos servidores vpn (VPN1 y VPN2 como servidor ambos) van a estar en el mismo segmento de red, y eso creará errores de configuraciones.

Aún falta por hacer algunos pequeños cambios. Si escribimos ip a veremos que nuestro servidor VPN1 tiene una interfaz de red llamada tun0:

Bien, esa interfaz hace referencia a la creada por el servidor OpenVPN. Cuando nos conectemos de VPN1 a VPN2 se creará otra interfaz de red llamada (usualmente) tun1, tenemos que hacer que nuestro servidor VPN1 enrute todo el tráfico que le entra por la interfaz tun0 hacia la tun1. Esto lo hacemos utilizando iptables de la siguiente forma:

Lo siguiente debería de hacerlo automáticamente el script, pero nunca está de más comprobar:

Y listo! Ahora que tiene configurado el servidor VPN1 correctamente sólo resta conectarse como cliente al VPN2, para ello abra la sesión de tmux que dejó en segundo plano, y reconecte la vpn que utilizó de prueba anteriormente. Perderá la conexión hacia el VPN1 si está utilizando algún cliente SSH (PuTTY, XShell, MobA…) como se explicó anteriormente.

NOTA: Antes de conectar el cliente, recuerde haber obtenido y copiado en algún lugar los criptomateriales generados por el servidor OpenVPN de VPN1!!!

Configuración del Cliente

La configuración del cliente es la más sencilla. Si ya instaló el paquete de openvpn solamente queda pegar en algún archivo los criptomateriales generados por VPN1 y conectar el cliente (en mi caso llamé el archivo de texto vpn1.ovpn):

Para comprobar que, en efecto, estamos saliendo a internet a través de VPN2 y no de VPN1, basta con, desde el cli de nuestro cliente, ejecutar algo como:

public ip

Y listo todo!!!

El tutorial es muy básico, puede mejorarse en muchos aspectos, sobre todo de seguridad, pero ofrece un punto de inicio para los que deseen hacer algo similar.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Autores:

  • Frank Morales
  • Franco Díaz

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 5 / 5. Recuento de votos: 8

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.