WireGuard es una aplicación de software de red privada virtual (VPN) moderna y altamente eficiente que se centra en la simplicidad y la seguridad. Fue desarrollada por Jason A. Donenfeld y se lanzó inicialmente en 2016.

WireGuard se destaca en el mundo de las VPN por su simplicidad, seguridad robusta, alto rendimiento y facilidad de uso, haciéndolo una opción popular tanto para usuarios individuales como para organizaciones.

Para este tutorial también utilizaremos WireGuard-UI que es una interfaz de usuario (UI) gráfica para WireGuard, diseñada para facilitar la gestión y configuración de esta VPN. Mientras que WireGuard en sí es conocido por su simplicidad y eficiencia, la configuración inicial y la gestión pueden ser un poco técnicas, especialmente para usuarios que no están familiarizados con la línea de comandos o los aspectos más complejos de la configuración de redes. Aquí es donde WireGuard-UI se vuelve útil.

Requisitos previos

Para realizar este tutorial, es necesario cumplir con estos requisitos:

  • Un servidor con Debian 12.
  • Acceso a por SSH con privilegios de root o un usuario con permisos sudo.
  • Conexión a Internet en el servidor.

Instalación de WireGuard

Lo primero de todo será instalar WireGuard para ello actualizaremos repositorios:

apt update
apt upgrade

Luego instalaremos WireGuard que se encuentra en los repositorios de Debian:

apt install wireguard

Hay que crear un servicio para gestionar WireGuard cada vez que se actualice la info en WireGuard-UI. Primero creamos el fichero /etc/systemd/system/wgui.service:

[Unit]
Description=Restart WireGuard
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service

[Install]
RequiredBy=wgui.path

Y luego creamos /etc/systemd/system/wgui.path:

[Unit]
Description=Watch /etc/wireguard/wg0.conf for changes

[Path]
PathModified=/etc/wireguard/wg0.conf

[Install]
WantedBy=multi-user.target

Aplicamos los cambios con:

systemctl enable wgui.{path,service}
systemctl start wgui.{path,service}

Para que funcione correctamente NAT:

/sbin/sysctl -w net.ipv4.ip_forward=1

Instalación de WireGuard-UI

Lo siguiente será instalar la interfaz web para gestionar el servicio de VPN. Para ello nos descargaremos el binario desde el repositorio de Git.

wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz
💡
Para cuando se escribió este tutorial, la versión disponible de WireGuard-UI era la v0.6.2, revisa la página de releases para revisar si hay alguna actualización.

Descomprimimos y copiamos el binario en el directorio correspondiente:

tar zxf wireguard-ui-v0.6.2-linux-amd64.tar.gz
mkdir /opt/wireguard-ui
mv wireguard-ui /opt/wireguard-ui/

Configurar servicio para SystemD

Lo ideal es poder gestionar WireGuard-UI con systemD, para ello crearemos un servicio para su gestión:

nano /etc/systemd/system/wgui-web.service

Con el siguiente contenido:

[Unit]
Description=WireGuard UI Daemon
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
WorkingDirectory=/opt/wireguard-ui
ExecStart=/opt/wireguard-ui/wireguard-ui -bind-address "127.0.0.1:5000"

[Install]
WantedBy=multi-user.target

Y actualizamos los servicios y lo ponemos en marcha:

systemctl daemon-reload
systemctl start wgui-web.service

Configurar usuario de acceso

Por defecto el usuario de acceso de WireGuard-UI es admin con la misma contraseña. Para hacer que nuestro panel sea seguro, es recomendable hacer un cambio de contraseña.

El fichero que debéis de modificar se encuentra en /opt/wireguard-ui/db/users/admin.jsonf y debéis de cambiar tanto el username como el password:

{
        "username": "admin",
        "password": "contaseñasegura",
        "admin": true
}

Configura Nginx Proxy

El servicio de la interfaz web para WireGuard está escuchando en localhost por el puerto 5000. Accederemos a este servicio a través de Nginx, para ello deberemos de configurar el fichero del Nginx Proxy para que escuche por el puerto 5000.

Configurar Proxy Inverso con Nginx para que escuche a un puerto interno
En ocasiones tenemos servicios o aplicaciones web que escuchan directamente a un puerto interno. Para evitar acceder a dicha aplicación o servicio por la IP del servidor, una configuración que podemos hacer es acceder desde un Nginx Proxy.

Configurar SSL en el panel [Opcional]

Como algo opcional, también podemos configurar un certificado SSL para dar más seguridad en nuestra interfaz:

Cómo utilizar Certbot para configurar un SSL de Let’s Encrypt en GNU/Linux
Certbot es una maravillosa herramienta que puedes utilizar para generar un certificado SSL con Let’s Encrypt e instalarlo y configurar automáticamente en tu servidor web.

Configurando WireGuard-UI

Si has seguido todos los pasos anteriores, ya deberías de poder acceder por HTTPS a tu dominio e iniciar sesión con tu usuario.

Vamos al apartado de WireGuard Server y allí configuraremos nuestro servidor. La configuración que debemos de hacer es la siguiente:

  • Server Interface Addresses: Aquí deberemos de configurar la red del servidor, podemos dejar la que hay por defecto o añadir otra.
  • Listen Port: Este es el puerto del WireGuard, podemos dejarlo por defecto.
  • Post Up Script: El script que se ejecuta al levantar la interfaz, copiaremos el que hay a continuación.
  • Post Down Script: El script que se ejecuta al bajar la interfaz, copiaremos el que hay a continuación.
# Post Up Script:
iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Post Down Script:
iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Cuando tengamos esta configuración acabada, le damos a Save para guardar la configuración y luego a Apply Config para aplicar los cambios.

💡
¡¡No te olvides de Aplicar los cambios!!

Creación de cliente de WireGuard

En este momento lo que haremos será configurar un usuario para poder acceder por WireGuard. Accedemos a WireGuard Clients y configuramos los siguientes parámetros de la siguiente forma haciendo clic en New Client:

  • Name: Nombre de usuario
  • Email: El e-mail del usuario
  • IP Allocation: Por defecto debería de estar configurado.
  • Extra Allowed IPs: Aquí debemos de poner los rangos por los que saldremos, así que añadimos el rango de la IP interna de nuestro servidor. En mi caso la IP es del rango 10.20.10.0/24.

Y ya tendremos el cliente configurado:

Luego deberemos de hacer clic sobre el botón Apply Conf para aplicar los cambios de los clientes.

💡
¡¡No te olvides de Aplicar los cambios!!

Ahora ya podemos usar el fichero de configuración de WireGuard. Podemos instalarlo en nuestro ordenador o bien usar la APP de WireGuard de Android para configurar el fichero con un QR.

Cuando nos conectemos a la VPN deberemos de ver el usuario conectado en el apartado Status:

Y si desde el dispositivo vamos a iplocation.page para revisar con que IP salimos veremos la IP del servidor configurado.

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación