Wireguard: La nueva VPN

La nueva VPN, más rápida y segura que la veterana OpenVPN, ya está aquí

Wireguard: La nueva VPN

En esta entrada hablamos de cómo configurar una VPN en nuestra Raspberry Pi de una manera sencilla y sin dolor... En aquella ocasión, os hablamos de OpenVPN, la cual es un clásico entre las distintas maneras de implementar una VPN privada para el usuario doméstico.

Hoy os voy a hablar de otro tipo de VPN, la implementada por WireGuard. Este proyecto se puso como objetivo ser más rápido, más simple, más ágil y más útil que IPsec, sin ser tan enrevesado, y tiene la intención de tener un rendimiento considerablemente mayor que OpenVPN. Además, está diseñado como una VPN de propósito general para ejecutarse en interfaces integradas y supercomputadoras por igual, aptas para muchas circunstancias diferentes... Pero eso nos interesa menos de cara al día a día en nuestras pequeñas y modestas LAN privadas.

Recientemente he migrado mis servidores de VPN de OpenVPN a WireGuard. Es más fácil de instalar y configurar que otras VPN, pero en esta entrada lo haremos aún mucho más sencillo: Volveremos a usar la magia de PiVPN, como hicimos con OpenVPN. Comenzaremos instalando la herramienta mediante el comando:

curl -L https://install.pivpn.io | bash
Comando para ejecutar el instalador de PiVPN

Seguiremos los pasos que nos indican, seleccionando WireGuard como protocolo a instalar y un puerto a nuestro placer (recordad cuál ponéis, ya que deberemos abrirlo en el router, habilitándolo en concreto para el protocolo UDP).

Los comandos para gestionar la VPN son idénticos a los mencionados en la entrada para OpenVPN, pero destacaremos uno más: el comando pivpn -qr, el cual nos permitirá generar un código QR en la pantalla que podremos escanear desde nuestra aplicación de WireGuard en los dispositivos móviles, de tal manera que no necesitaremos enviarnos el fichero del perfil del cliente, facilitando mucho las cosas.

Cosas a tener en cuenta si lo instalas en un VPS

El objetivo principal de esta entrada no es describir cómo instalar y configurar WireGuard con PiVPN, ya que se parece muchísimo a la guía de PiVPN con OpenVPN y es tontería repetirlo. Si hago esta entrada es porque hay un par de detalles a tener en cuenta si decides utilizarlo en un VPS, y que te pueden librar de un par de dolores de cabeza curiosos...

Antes de nada, el instalador de PiVPN es perfectamente compatible con UFW y Pi-Hole, con lo que se nos integrará con ambas herramientas sin problema ninguno si ya las tenemos instaladas en nuestro sistema.

Lo primero que debes saber es que se puede instalar en cualquier sistema Linux, pero deberás tener instalados los linux-headers-[i386/amd64/armhf]... En las raspberry PiVPN es capaz de instalarlos, pero en otros sistemas a veces no... Y a la hora de levantar el servicio no podrá hacerlo porque no será capaz de crear la interfaz wg0 en la que se basa WireGuard... Lo digo porque, en mi caso, tengo el VPS desplegado en la plataforma de OVH, y en ella dichos headers tienen el nombre de linux-headers-cloud-amd64, con lo que un simple comando soluciona este problema:

sudo apt install linux-headers-cloud-amd64
Comando para instalar las linux headers en plataformas cloud como OVH

Por otro lado, al ser un VPS no tiene un gateway o puerta de enlace definido, sino que accede directamente a Internet, de manera que, si tenemos desplegado un servicio de DNS como Pi-Hole, y en la instalación hemos seleccionado la opción de que se integre con él, deberemos hacer un pequeño cambio...

En el fichero /etc/pivpn/wireguard/setupVars.conf deberemos añadir o modificar las siguientes líneas:

pivpnDNS1=10.6.0.1
pivpnDNS2=127.0.0.1
Líneas a añadir o modificar en el fichero setupVars.conf de WireGuard

Como veis, definimos dos IP para los DNS: La primera apunta a lo que sería la puerta donde tendríamos nuestro Pi-Hole en el VPS, y la segunda apuntaría a localhost. Esto es porque, a la hora de generar los clientes VPN, éstos intentarán conectarse contra la IP 10.6.0.1, pero el servicio de WireGuard como tal, no era capaz de encontrar el servicio de DNS como tal, por lo que poniendo la segunda IP éste funcionará perfectamente. Parece una tontería, pero fue un quebradero de cabeza el que me dio esto...

Además, os aconsejo meter la regla que permita acceder a la subred de la VPN a todos los puertos, cosa que podéis hacer (si usáis UFW) con el comando:

sudo ufw allow from 10.6.0.0/24
Comando en UFW para permitir el acceso a todos los puertos desde la subred de WireGuard

¡Ese comando anterior no lo hagáis si vuestra VPN es usada también por clientes que no deberían tener acceso a los recursos del sistema o de vuestra LAN!

¡Y nada más! No quiero profundizar mucho en esta entrada, que ya hay una dedicada a cómo crear una VPN fácilmente... pero sí tened en cuenta estos puntos si vais a usar WireGuard en lugar de OpenVPN en vuestros servidores.

Si te ha gustado la entrada, o te ha sido útil y quieres ayudarme a pagar los gastos que conlleva el servidor y mantener así el blog libre completamente de anuncios, puedes hacer una donación en Bitcoin en la siguiente dirección:

Donar