Acceso Privado a Internet con OpenVPN (I)

OpenVPNHacía tiempo que no escribía nada nuevo fundamentalmente porque estoy empleando otros medios para documentar las ñapas que voy haciendo. Sin embargo, me parece interesante compartir la experiencia que acabo de completar así que voy a hacer una serie de posts sobre ello.

La idea que me rondaba la cabeza era cómo configurar una salida más privada a Internet. La solución era, por supuesto, emplear una Red Privada Virtual (VPN). Teniendo esto en cuenta se me planteaban dos opciones:

  • Contratar un servicio VPN.
  • Contratar un servidor virtual privado (VPS) y montar yo la VPN.

Teniendo en cuenta los antecedentes, me decidí por la segunda opción. Para montarla contraté un VPS con DigitalOcean. Me consta que hay otras opciones y, probablemente, mejores pero no quería darle más vueltas. Las características del servidor contratado son:

  • Memoria RAM: 1 GB
  • Número de procesadores/cores: 1/1
  • Disco: 25 GB

Para los propósitos de la descripción que voy a hacer, asumimos que la dirección IP pública del servidor es: 125.125.125.125 y que el gateway por defecto 125.125.125.1.

El sistema operativo configurado es Ubuntu 18.04 LTS que es una distribución con la que me siento bastante cómodo.

En el lado de mi casa, creé, en el entorno virtual ESXi, una red para pruebas (TEST1) con un rango de direccionamiento 10.2.1.0/24 y configuré un gateway empleando una máquina virtual con VyOS con dos interfaces de red:

  • Una conectada a la red de estaciones de trabajo del entorno ESXi con dirección IP: 10.1.3.64.
  • Otra conectada a la red TEST1 con dirección IP: 10.2.1.1

Cree una máquina virtual con sistema operativo Lubuntu en la red TEST1 y le asigné la dirección IP: 10.2.1.2 para poder hacer las pruebas de conectividad.

Realicé la configuración del gateway para tener salida a Internet y que desde los clientes de la red TEST1 se tuviera acceso a las distintas redes domésticas y del entorno virtual. El esquema general de conexión queda de la siguiente forma:

ovpn01

Con este esquema, el camino que sigue un paquete IP que viaje desde el cliente del entorno de prueba hasta internet sería:

  1. El paquete sale del cliente
  2. El paquete llega al gateway de la red TEST1 que lo encamina al gateway del entorno virtual.
  3. El gateway del entorno virtual encamina el paquete al router doméstico que conecta con el ISP haciendo un primer NAT de origen.
  4. El router de conexión con el ISP encamina el paquete hacia hacia el ISP haciendo un segundo NAT.
  5. El ISP encamina el paquete a su destino haciendo algunos NAT más.

El camino de vuelta de la respuesta es similar.

La idea es crear una VPN basada en tecnología OpenVPN que permita:

  • Conectar clientes, por ejemplo teléfonos móviles, para una navegación segura por internet cuando estos estén conectados a redes inseguras (por ejemplo WiFis de hoteles).
  • Establecer un túnel VPN entre el gateway de la red TEST1 y el servidor VPS que permita la salida privada a internet de las máquinas de la red TEST1.

Voy a empezar por esta última configuración. El esquema final de la red sería algo parecido a esto:

ovpn02

El direccionamiento de la VPN va a ser  172.17.17.0/24. El servidor VPS, que va a enrutar el tráfico de la VPN hacia internet tendrá la dirección 172.17.17.1 y el gateway de la red TEST1 tendrá la dirección  172.17.17.2. El resto de los clientes (vg. teléfonos móviles) recibirán direcciones dinámicamente.

La autenticación de los clientes se va a llevar a cabo mediante certificados emitidos por una CA privada, basada en OpenSSL.

En los siguientes posts iré describiendo cómo configurar los distintos elementos.