En esta entrada explicaré como configurar un IPsec VPN en OPNsense, con el objetivo de permitir que los usuarios tengan acceso a nuestra red local mediante el VPN integrado en Windows.
Suele occurir que el cliente necesita de un VPN para conectarse a su red y nosotros no queremos depender de programas externos (OpenVPN o similares). Ya que alguno de estos programas requiere de ser ejecutado con privilegios de administrador, cosa que no es posible en muchas organizaciones.

Requisitos

Para realizar esta configuración se requieren de unos conocimientos básicos tanto en redes, como en Firewalls y entornos Windows. Esta entrada está orientada a Administradores de sistemas que requieran de un IPsec VPN.
Este manual sirve tanto en OPNsense como en Pfsense, pero debido a que yo uso principalmente OPNsense lo redactaré orientado a esta plataforma.
Para esta entrada utilizaré la última versión de OPNsense disponible a fecha de hoy (21.1).

Panel de control de OPNSense (21.1.4)
Panel de control de OPNSense (21.1.4) [Abrir en una nueva pestaña para visualizarla mejor]

Configuración en OPNsense

En este apartado intentaré dividir los pasos en categorías para entender mejor los pasos que se están llevando a cabo. Intentaré ampliar las configuraciones con Screenshots para que se puedan replicar las configuraciones.
Un resumen de lo que haremos sería el siguiente:

  • Creación de certificados
  • Configuración de Clientes Móviles para IPSec
  • Configuración de túnel
  • Gestion de usuarios para la conexión VPN
  • Creación de reglas en el Firewall
  • Añadir el Plugin IPSec en el Dashboard del Firewall

Creación de certificados

El procedimiento es sencillo, se creará una CA (Autoridad Certificadora) y mediante esta autoridad certificadora crearemos un certificado de servidor. Este certificado será utilizado por el servidor IPSec para cifrar la comunicación.
También exportaremos el certificado de la CA para instalarlo más adelante en el cliente Windows.
Modificar los datos que no aparezcan en negrita a vuestro gusto, campos como la longitud de Clave (2048) o el algoritmo Digest (SHA256) los he configurado de tal modo que funcione con IPSec.

  • Sistema>Confianza>Autoridades>Añadir
    • Nombre descriptivo: IPSec-CA (Aquí podréis poner lo que os apetezca)
    • Método: Crear una Autoridad de Certificación interna
    • Key Type: RSA
    • Longitud de Clave (bits): 2048
    • Algoritmo Digest: SHA256
    • Tiempo de vida: 3650 (10 años)
    • Código del País: DE (en vuestro caso supongo que será ES)
    • Estado o Provincia: Bayern
    • Ciudad: Aschaffenburg
    • Organización: Mi blog en internet
    • Dirección de correo: blog@miblogeninternet.com
    • Nombre común: IPSec-CA
  • Sistema>Confianza>Certificados>Añadir
    • Método: Crear un Certificado interno
    • Nombre descriptivo: IPSec-SRV (Aquí podréis poner lo que os apetezca)
    • Autoridad de la certificación: IPSec-CA (La creada anteriormente)
    • Escribir: Certificado del Servidor
    • Key Type: RSA
    • Longitud de Clave (bits): 2048
    • Algoritmo Digest: SHA256
    • Tiempo de vida: 3650 (10 años)
    • Ubicación de la clave privada: Guardar en este cortafuegos
    • Código del País: DE (en vuestro caso supongo que será ES)
    • Estado o Provincia: Bayern
    • Ciudad: Aschaffenburg
    • Organización: Mi blog en internet
    • Dirección de correo: blog@miblogeninternet.com
    • Nombre común: OPNsense (Hostname de vuestro Firewall cuidando las mayusculas y minusculas)
    • Nombres alternativos:
      • DNS: OPNsense (Aqui poneis el Hostname)
      • DNS: OPNsense.miblog.localdomain (Aqui poneis el FQDN de vuestro Firewall)
      • IP: 192.168.76.194 (Aquí va la IP de la WAN)

Es muy importante en los últimos campos que se introduzcan los datos que se encuentran en la configuración general (Sistema>Ajustes>General).
Por último necesitaremos descargar el certificado de la CA que posteriormente instalaremos en el cliente Windows (Sistema>Confianza>Autoridades>Exportar Cert AC).

A continuación os dejo un GIF explicativo con todos los pasos:

Para una correcta visualización pulsa aquí

Configuración de IPSec en OPNsense

Quiero recordaros que esta es una simple configuración para conectarse a una red local desde internet. Si queremos enviar todo el tráfico a través del túnel tendremos que hacer modificaciones en la configuración. Puede que lo añada si alguien lo pide por los comentarios.
A continuación paso a mostraros mi configuración, solo escribiré los campos que han sido modificados:

Configuración de Clientes Móviles para IPSec

  • VPN>IPsec>Clientes Móviles
    • Habilitar: Aceptar (Habilitar la compatibilidad con IPsec Mobile Client)
    • Backend para la autenticación: Base de datos local
    • Forzar grupo local: Ninguno
    • Virtual IPv4 Address Pool: 172.16.33.0/24 (aquí has de introducir una red que no esté en uso)
    • Virtual IPv6 Address Pool: Desactivado
    • Lista de Red: Activado
    • Servidor DNS: 10.20.30.1 (Vuestro DNS, en mi caso la interfaz local del Firewall)
    • Banner de acceso: Aquí puedes poner un mensaje

Configuración de túnel

  • VPN>IPsec>Configuración del Túnel>Añadir fase 1
    • Método de conexión: por defecto
    • Versión key exchange: V2
    • Protocolo de internet: IPv4
    • Interfaz: WAN
    • Descripción: Clientes Móviles Fase 1
    • Métodos de Autenticación: EAP-MSCHAPV2
    • Mi identificador
      • Nombre Distinguido
      • OPNsense (Aquí va el Hostname)
    • Algoritmo de encriptación: AES / 256
    • Algoritmo de Hash: SHA256
    • Grupo de clave DH: 14 (2048 bits)
    • Tiempo de vida: 28800
    • Instalar política: Aceptar
    • Detección de Par muerto: Activar
      • 30 Segundos
      • 10 Intentos
      • Por defecto
  • VPN>IPsec>Configuración del Túnel>Añadir fase 2 (para cada red que quieras hacer accessible)
    • Modo: Tunnel IPv4
    • Descripción: Fase 2 Clientes móviles
    • Escribir: Subred LAN (Aquí seleccionaremos la red que será accesible desde el VPN)
    • Protocolo: ESP
    • Algoritmos de encriptación:
      • AES 256 Bits
      • aes256gcm16
    • Algoritmos Hash:
      • SHA256
      • SHA384
      • SHA512
    • Tiempo de vida: 3600

Gestion de usuarios para la conexión VPN

  • VPN>IPsec>Claves Pre-Compartidas>Añadir
    • Identificador: Mibloguser (Usuario)
    • Clave Pre-compartida: M1bl0g3n1nt3rn3t (Contraseña)
    • Escribir: EAP

Reglas del Firewall y Dashboard Plugin

  • Cortafuegos>Reglas>WAN (Comprobar las reglas generadas automáticamente)
  • Cortafuegos>Reglas>IPSec
    • Nueva Regla de Any to Any (Posteriormente puede ser modificada para ser más especifica)
  • Lobby>Panel de Control>Añadir complemento>IPSec

Imágenes y Resumen

Con esta configuración estaría toda la parte del servidor configurada, hay ciertas cosas como las reglas del Firewall en IPSec que pueden ser más concretas. Pero eso ya lo dejo a gusto de cada uno, del mismo modo que antes os dejo el proceso en un GIF:

Para una correcta visualización pulsa aquí

Configuración en Windows

Para facilitar la configuración de la conexión VPN he decidido escribir un script en Powershell que nos ahorrará todo tipo de configuración manual. Los requisitos para que el script funcione son los siguientes:

  • El certificado de la CA que anteriormente descargamos
  • Ubicar tanto el certificado en el directorio C:\VPN (aunque esto se puede modificar en el script)
  • Ejecutarlo como administrador

A continuación os pongo el script y las aclaraciones del mismo:

Si abrimos el PowerShell ISE como Administrador, añadimos el script y lo ejecutamos (cambiando los parámetros necesarios). Se habrá configurado un VPN el cual al conectar nos pedirá las credenciales que generamos en el apartado de Claves Pre-Compartidas.


Una vez nos hayamos conectado, no nos volverá a pedir un usuario nunca más, con esta configuración podremos configurar un VPN IPSec en poco tiempo y de una forma “sencilla”.
Como se puede ver en la siguiente foto el VPN funciona de forma correcta.

Conexión al Firewall mediante IPSec desde Windows

Conclusión 

Este es un artículo basado en la guía del foro de pfSense. Debido al incremento de la demanda de nuestros clientes sobre una solución VPN que no requiera de usuarios con privilegios administrativos, ni la instalación de un servidor NAP de Windows (debido a los costes que esto conlleva). Me decanté por la solución con de OPNsense con IPSec, en un futuro próximo intentaré integrar el acceso con un AD y también intentaré probar Allways On VPN en OPNsense.

Espero que os haya servido de ayuda, de ser así me alegro, por el contrario si no os funciona algo, comentarlo.