Configuración del servidor VPN WireGuard en pfSense 2.5.0

Configuración del servidor VPN WireGuard en pfSense 2.5.0

Sergio De Luz

WireGuard VPN es un nuevo protocolo robusto y muy rápido para crear redes privadas virtuales, en RedesZone hemos comprobado cómo es capaz de duplicar e incluso triplicar en velocidad a OpenVPN o a IPsec. Este nuevo protocolo de VPN es ideal para configuraciones de acceso remoto con clientes móviles, ya sean smartphones, tablets u ordenadores portátiles, ya que consume muy pocos recursos y la conexión es realmente rápida. El sistema operativo pfSense en su versión 2.5.0 ha incorporado de manera oficial esta nueva VPN, junto a IPsec, L2TP y también OpenVPN. Hoy os vamos a enseñar cómo configurar desde cero la VPN de WireGuard en pfSense 2.5.0 para conectaros remotamente.

Características de WireGuard VPN

WireGuard VPN es un software muy liviano que nos permitirá configurar de forma rápida y fácil un túnel VPN, por defecto, hace uso de la criptografía más moderna, sin necesidad de elegir diferentes algoritmos de cifrado asimétrico, asimétrico o de hash, de manera predeterminada tenemos una suite segura por defecto, a diferencia de otros protocolos VPN. El objetivo de WireGuard es convertirse en la mejor VPN, tanto para usuarios domésticos como para empresas, y lo está consiguiendo porque ya se ha integrado en el Kernel de Linux para proporcionarnos el mejor rendimiento posible.

En cuanto a la criptografía utilizada, tenemos ChaCha20 para el cifrado simétrico, autenticado con Poly1305, por lo que tenemos AEAD. También hace uso de Curve25519 para ECDH, BLAKE2 para el hashing, SipHash24 para las claves hashtable, y HKDF para la derivación de claves. Tal y como habéis visto, tenemos los algoritmos criptográficos más modernos usados por defecto, y no lo podremos cambiar por otros de momento, deben ser estos sí o sí.

Con esta nueva VPN no necesitaremos administrar las conexiones ni hacer difíciles configuraciones, solamente funciona en modo tunneling porque es una VPN L3, y utiliza el protocolo UDP como capa de transporte y no permite seleccionar TCP, lo que sí podremos hacer es modificar el puerto de escucha por el que nosotros queramos. Por supuesto, el servidor WireGuard puede estar detrás de la NAT sin problemas, solo habría que hacer una redirección de puertos. Otras características interesantes son que permite roaming entre redes de forma rápida y fácil, para estar conectados siempre desde cualquier red WiFi o 4G/LTE sin corte en la conexión. Además, también podremos habilitar el Kill-Switch para impedir filtraciones de datos si la VPN se cae.

Por último, esta nueva VPN es compatible con múltiples sistemas operativos como Windows, Linux, MacOS, FreeBSD, Android y también iOS. Ahora el equipo de desarrollo de pfSense 2.5.0 han incorporado WireGuard en su sistema de forma predeterminada, aunque anteriormente también podíamos instalarla, pero no teníamos soporte oficial.

Configuración del servidor VPN WireGuard

Antes de la salida de pfSense 2.5.0, si queríamos tener WireGuard en este completo firewall, teníamos que instalarlo manualmente en el sistema bajándonos unos paquetes compatibles con FreeBSD. Gracias al equipo de desarrollo de pfSense, a partir de la versión 2.5.0 ya está integrada en la interfaz gráfica de usuario de manera predeterminada.

Lo primero que debemos hacer es irnos a la sección de «VPN / WireGuard» para entrar en la configuración de este nuevo protocolo de VPN. En cuanto entremos en el menú, pinchamos en «Add Tunnel».

En la configuración del túnel, deberemos habilitar el túnel, darle una descripción y ponerlo lo siguiente:

  • Address: dirección IPv4 o IPv6 del servidor VPN para la interfaz del túnel.
  • Puerto: por defecto es el 51820 UDP, pero podremos cambiar a cualquier puerto UDP.

pfSense incorpora un generador de claves pública/privada para el servidor VPN con WireGuard, nuestra recomendación es que generéis unas claves para el cliente VPN, y que pinchemos nuevamente en «Generate» para que las segundas que se generen sean las del servidor VPN. Por ejemplo, las siguientes claves son las que usaremos posteriormente en el cliente VPN. Os podéis ayudar de un bloc de notas o Notepad++ para apuntar la configuración.

Para facilitarte la configuración de WireGuard con las claves públicas y privadas, también puedes hacer uso de la herramienta wireguardconfig que nos permitirá generar automáticamente tanto el servidor como los clientes, para posteriormente adaptarlo a pfSense.

Y las segundas generadas son las del propio servidor VPN con WireGuard.

Una vez que ya tenemos las claves, debemos pinchar en «Save» y ya habremos creado el servidor VPN con la configuración anterior:

Una vez que ya lo tengamos, ahora tenemos que dar de alta los «peers», es decir, los clientes VPN. Volvemos a acceder a la configuración del servidor WireGuard, y pinchamos en «Add Peer» que está en color verde. Aquí deberemos rellenar algunas configuraciones, pero no es necesario rellenar todas ellas.

Ahora os vamos a explicar para qué sirven cada una de las opciones:

  • Descripción: ponemos una descripción a este cliente, por ejemplo, nuestro nombre.
  • Endpoint: ponemos la dirección IP pública del cliente VPN.
  • Endpoint port: ponemos el puerto del cliente VPN.

Si vas a configurar un cliente VPN, donde la IP pública del cliente y el puerto cambie, entonces deberemos dejar las opciones de «Endpoint» y «Endpoint Port» vacías. Estas opciones se deben rellenar si vamos a configurar una VPN Site-to-Site, pero en acceso remoto (Roadwarrior) no es necesario rellenarlo.

  • Keep alive: un valor en segundos, cada cierto tiempo verifica que el túnel sigue levantado, por defecto está deshabilitado.

Ahora llegan las configuraciones más importantes:

  • Public Key: deberemos poner la clave pública del cliente VPN, anteriormente habéis visto cómo se genera para el cliente, pues aquí pondremos la public key.
  • Alloweds IPs: si queremos que haya redirección de Internet y acceso a todas las redes, ponemos 0.0.0.0/0. Lo más normal es que los clientes VPN de acceso remoto salgan a Internet por la propia VPN, pero aquí podremos configurar el acceso específico a diferentes redes.
  • Peer WireGuard Address: la dirección IP que tenga el peer dado de alta.
  • Pre-shared key: es opcional, se puede añadir una clave precompartida para mejorar aún más la seguridad.

En nuestro caso, no hemos puesto pre-shared key, pero si la pones, tanto en el pfSense como en el cliente VPN debe ser exactamente la misma, y deberemos generar dicha clave con el botón azul que viene en el pfSense. No podemos poner de clave precompartida «12345678» por ejemplo, debemos usar el generador de pfSense.

Una vez que ya hemos configurado correctamente el servidor VPN de WireGuard en pfSense 2.5.0, vamos a configurar la parte de firewall, porque por defecto se encuentra siempre en modo bloquear todo.

Configuración del firewall en WAN y WireGuard

Antes de conectar el primer cliente VPN, debemos irnos a «Firewall / Rules» y agregar una nueva regla en la interfaz WAN de Internet. Añadimos una nueva regla con la siguiente información:

  • Action: Pass
  • Interfaz: WAN
  • Address Family: IPv4, IPv6 o ambas
  • Protocol: UDP
  • Source: any (si vas a montar un Site-to-Site con WireGuard, aquí podrías poner la IP pública de origen para mejorar la seguridad).
  • Destination: WAN Address en el puerto 51820

Una vez configurado, pinchamos en «Save» para guardar esta regla, y aplicamos cambios, como siempre que añadimos una nueva regla al firewall.

Una vez hecho esto, debemos irnos ahora a la interfaz «WireGuard» que se ha creado automáticamente en la sección de «Firewall / Rules«, aquí tendremos que permitir todas las comunicaciones una vez que se haya conectado, o solamente lo que nosotros queramos, tal y como ocurre con OpenVPN o con IPsec.

En la configuración siguiente, podéis ver que tenemos una regla con la siguiente configuración:

  • Action: Pass
  • Interfaz: WireGuard
  • Address Family: IPv4, IPv6 o ambas
  • Protocol: Any
  • Source: any
  • Destination: any

Pinchamos en «Save» y en aplicar cambios, como suele ser habitual. En estos instantes ya estamos preparados para configurar los clientes VPN con WireGuard.

Configuración de los clientes VPN WireGuard y conexión a pfSense

La configuración de los clientes VPN con WireGuard es igual en todas las plataformas, necesitaremos exactamente la misma información. En nuestro caso, hemos utilizado un smartphone con Android, podéis descargar la app oficial de WireGuard para Android y iOS a continuación:

Pero también lo tenemos para otros sistemas operativos como Windows, directamente desde la web oficial de este protocolo de VPN. Una vez que lo hayamos instalado, vamos a poder configurar el cliente fácilmente.

Tal y como os hemos dicho anteriormente, nuestra recomendación es que, al generar las claves en el pfSense, copiéis estas claves en un bloc de notas, tanto la clave pública como la clave privada. Además, también tenéis que copiar la clave pública del servidor. Una vez hecho esto, abrimos WireGuard y procedemos a añadir un nuevo túnel VPN, tenemos tres opciones:

  • Importar desde archivo toda la configuración, si vais a configurar varios clientes como Windows, Linux etc, lo normal es tener una plantilla con las diferentes configuraciones.
  • Escanear desde código QR: si usamos la herramienta WireGuardConfig podremos hacerlo fácilmente.
  • Crear desde cero: esta es la opción que hemos elegido.

Al añadir una nueva VPN, deberemos rellenar todos o casi todos los datos que nos pregunta, es el cliente VPN:

  • Nombre: pondremos una descripción al túnel VPN, un nombre descriptivo por si tenemos varios.
  • Clave privada: ponemos la clave privada que hemos copiado anteriormente del bloc de notas.
  • Clave pública: al introducir la clave privada, la genera automáticamente
  • Direcciones: la IPv4 o IPv6 del cliente, en este caso, hemos configurado anteriormente 10.9.0.2/32, ponemos esta.
  • Puerto: lo dejamos en blanco
  • Servidores DNS: podemos poner un servidor DNS en concreto, o directamente que resuelva el túnel.
  • MTU: lo dejamos en blanco.

Ahora pinchamos en añadir par, y se nos desplegará más configuraciones, estas configuraciones son las del servidor VPN.

  • Pares: la clave pública del servidor VPN.
  • Clave precompartida: si no hemos configurado, lo dejamos en blanco, si hemos configurado la copiamos exactamente igual.
  • Mantenimiento persistente: el keep alive, recomendable dejarlo en blanco.
  • Punto final: debemos poner sintaxis «IP:puerto», por tanto, podemos poner: «vpn.redeszone.net:51820».
  • IPs permitidas: si queremos poner todas, ponemos 0.0.0.0/0. También tenemos un botón para excluir las IPs privadas.

Una vez que lo hayamos hecho, pinchamos en guardar, y podremos ver todas las configuraciones realizadas.

Una vez añadido y verificado que todo está correcto, procedemos a conectarnos y veremos que hay intercambio de tráfico y que la VPN está funcionando perfectamente.

Si no tenemos paquetes recibidos, eso significa que hay algo mal y que el túnel de la VPN WireGuard no se ha establecido correctamente. Si te ocurre esto, deberás repasar toda la configuración realizada, y revisar los logs del pfSense para ver qué está ocurriendo.

Esperamos que con este tutorial hayáis podido configurar el servidor VPN de WireGuard en vuestro magnífico pfSense 2.5.0