En este post aprenderemos a utilizar el software Wireguard, el cual nos permitirá crear una sencilla VPN entre nuestro servidor NAS y cualquier cliente (dispositivo móvil con Android/iOS o PC con Linux/Windows/MacOS).

Cuando se habla del término de redes privadas virtuales para navegar por Internet, las primeras herramientas o protocolos que se nos vienen a la mente pueden ser OpenVPN o IPSec/IKEv2, las cuales son usadas por los diferentes proveedores de servicios más conocidos: NordVPN, Surfshark y un largo etc.

En nuestro caso, se ha optado por Wireguard por ser un protocolo VPN que ofrece diversas ventajas en nuestra implementación:

  • Una encriptación completamente actualizada. Al ser un software relativamente nobel (alrededor de 2018), esta herramienta usa unos protocolos bastante seguros actualmente, como pueden ser ChaCha20 para la encriptación simétrica o Poly1305 para autenticación.

  • Código abierto, simple y minimalista. Tiene alrededor de 4.000 líneas de código escritas en C, frente a las 600.000 o 400.000 líneas de sus competidores directos (OpenVPN y IPSec, respectivamente).

  • Un rendimiento muy por encima de sus competidores. Al tener un código mucho más simple, los protocolos de encriptación, establecimiento de comunicación (handsaking) o autentificación/almacenamiento de usuarios también lo son, permitiendo:

    • Velocidades de subida/bajada mucho más altas.
    • Afecta al rendimiento de las baterías (smartphones/tablets).
    • Mayor rapidez a la hora de establecer/reestablecer la conexión.
    • ...
  • Facilidad de uso y configuración, ya que se puede usar en plataformas cruzadas, y su interfaz en cliente y servidor es muy intuitiva. Además, nos permite tener un cliente casi en cualquier parte, al estar disponible en la mayoría de dispositivos.

Requisitos previos

Existen diferentes condiciones que tendremos que solucionar antes de crear nuestro túnel PtP. Estas son:

  1. Realizar un port-fordwarding en nuestro router. Tendremos que redireccionar un puerto concreto en nuestro router para que el tráfico entrante del exterior puede llegar a nuestra RPi. Para ello, debemos acceder a la configuración de nuestro router y "abrir" dicho puerto creando una nueva regla. Este ejemplo se realiza con un router de Movistar, donde debemos dirigirnos a Menú -> Puertos, y establecer una regla nueva como la de la imagen inferior. A la hora de elegir TCP/UDP, yo recomiendo escoger UDP, ya que ofrece una mayor velocidad para por ejemplo el streaming de video (y no se suelen experimentar problemas de pérdida de paquetes o fallos de conexión).

  1. Debemos saber en todo momento la IP pública de nuestro router para poder crear túneles privados y que estos se mantengan activos. Para ello podemos hacer uso del servicio Duck DNS. Esta página nos permite crear un DNS dinámico, es decir, dado un dominio, nos permite saber en todo momento cual la IP pública de un router asociada a un usuario concreto. Para ello, debemos registrarnos en la página, apuntarnos el token que nos dan y crear un nuevo dominio. Para una información más extendida, se puede visitar este tutorial.

  2. Utilizar la herramienta anterior para crear un script que refresque nuestra IP pública en sus servidores cada X tiempo (utilizando las tablas cron de Linux, por ejemplo). Para ello, podemos seguir su sencillo tutorial. Debemos utilizar nuestro par token-dominio creado anteriormente.

Instalación y configuración de Wireguard en nuestra RPi

Actualmente no se dispone de una imagen de contenedor disponible para Wireguard, por lo que no podremos desplegarla y gestionarla con Portainer (ver post anterior). Por lo tanto, tendremos que instalarlo en nuestra RPi directamente.

Para la instalación, se puede utilizar por ejemplo la herramienta PiVPN, la cual nos permite configurar de manera extremadamente sencilla una VPN tanto con Wireguard como con OpenVPN, en el caso de que en un futuro quisiésemos cambiar de protocolo. Desde aquí, los pasos a seguir son los siguientes:

  1. En nuestro terminal, introducimos los siguientes comandos para iniciar la descarga de dependencias y el asistente de configuración (puede tardar un tiempo):

    curl -L https://install.pivpn.io | bash

  2. Una vez llegamos al asistente de configuración (ver figura superior). Desde aquí nos manejaremos con el teclado. Pulsamos Intro dos veces.

  3. Al llegar al apartado de "Dirección IP estática" debemos comprobar que tanto las direcciones de la RPi como la de nuestra puerta de enlace (gateway), se corresponden con las mostradas. Pulsamos Intro.

  4. En la siguiente ventana (Conflico de IP), pulsamos nuevamente Intro. Es poco probable que nuestro router asigne a nuestra RPi una IP diferente a la que ya tiene (ya que se suele asociar por MAC). En caso de mayor seguridad, siempre podemos asignarle una IP estática a nuestra RPi.

  5. Cuando lleguemos a la ventana del Nombre DNS, debemos proporcionarle a la herramienta nuestro dominio personalizado de Duck DNS creado anteriormente.

  6. Las demás ventanas (incluyendo alguna intermedia a esta) son para selección de usuario (normalmente tendremos solo un usuario pi), gestión de actualizaciones, etc. Pulsamos en todas Intro.

Creación de usuarios y certificados

Una vez finalizado el proceso de instalación, podemos crear diferentes certificados de usuario para cada cliente. Para ello basta con utilizar el comando pivpn add e introducir un nombre de usuario. Los certificados se almacenan en la ruta /home/pi/configs. Es de vital importancia mantener estos archivos .conf a salvo, ya que con ellos podemos conectarnos directamente a nuestro servidor desde cualquier dispositivo.

Instalación y configuración de Wireguard en nuestro cliente

En este post, el ejemplo del cliente VPN se hará en un dispositivo Android. Aunque la configuración, al ser tan simple, es extrapolable a diferentes dispositivos (PC o tablet).

Para instalar Wireguard, basta con descargarlo directamente desde Play Store. Es una aplicación extraordinariamente liviana, además de consumir muy muy pocos recursos y batería una vez está en ejecución (a diferencia de OpenVPN, por ejemplo).

Una vez instalada, se han de seguir los siguientes pasos:

  1. Instalación de certificado de usuario. Al abrir la app pulsamos sobre + -> Instalar desde un archivo o fichero. Seleccionamos el certificado creado en el apartado anterior. Pulsamos en OK.

  2. Se nos creará un nuevo perfil, cuyo nombre es el mismo proporcionado por el certificado. Ahora podremos "levantar" el túnel pulsando en el botón de activación.

  3. Podemos comprobar si el enlace está activo observando:

    • El símbolo de VPN en barra notificaciones de Android.
    • Accediendo a OMV desde cualquier navegador con 192.168.1.xxx (estamos teniendo acceso a nuestra red local).
    • Accediendo a las carpetas compartidas desde el explorador CX.