jedg_logo

Instalación y configuración de WireGuard en Ubuntu

WireGuard es una tecnología moderna de VPN que ofrece una conexión cifrada, rápida y muy sencilla de configurar en comparación con soluciones tradicionales como OpenVPN o IPSec. Utiliza criptografía de última generación y está integrado directamente en el kernel de Linux, lo que le otorga un rendimiento excepcional. En esta guía se explica cómo instalar y configurar un servidor WireGuard en Ubuntu paso a paso, entendiendo la lógica detrás de cada acción.

La función principal de WireGuard es permitir que varios equipos, ubicados en distintas redes, se conecten de forma segura como si estuvieran en la misma red local. Para lograrlo, cada dispositivo o nodo tiene una clave pública y privada que identifica su identidad dentro del túnel cifrado.

Instalación del servidor

El primer paso es instalar los paquetes necesarios desde los repositorios oficiales de Ubuntu. WireGuard está disponible a partir de Ubuntu 20.04 en adelante, por lo que la instalación es directa con el gestor de paquetes apt.

sudo apt update
sudo apt install wireguard -y

Una vez instalado, el sistema incorpora el módulo del kernel de WireGuard y la herramienta wg para gestionar las interfaces y pares (peers). No es necesario compilar ni configurar dependencias adicionales.

Generación de claves

Cada dispositivo en la red WireGuard necesita un par de claves: una privada y una pública. La clave privada nunca debe compartirse, mientras que la pública se usa para identificar y autenticar a cada nodo. En el servidor, generamos ambas claves con los siguientes comandos:

wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key

Se recomienda ajustar los permisos para proteger la clave privada de accesos no autorizados.

chmod 600 /etc/wireguard/server_private.key

Estas claves son el núcleo de la autenticación entre los dispositivos. El servidor usará su clave privada para descifrar el tráfico y las públicas de los clientes para validar las conexiones entrantes.

Configuración del servidor

La configuración principal de WireGuard se encuentra en el archivo /etc/wireguard/wg0.conf. Este archivo define la interfaz VPN, su dirección IP interna, las claves de autenticación y la configuración de red. Un ejemplo básico de configuración para un servidor con IP privada 10.0.0.1 sería el siguiente:

[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = <contenido de server_private.key>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

La sección [Interface] define la interfaz del servidor.
El parámetro Address indica la red interna que gestionará WireGuard.
SaveConfig permite que los cambios dinámicos se guarden automáticamente al detener el servicio.
ListenPort es el puerto UDP por donde escuchará las conexiones.
Las líneas PostUp y PostDown configuran las reglas de cortafuegos necesarias para enrutar correctamente el tráfico entre la VPN y la red física.

Habilitar reenvío de paquetes

Para que el servidor pueda enrutar el tráfico entre los clientes y otras redes, es necesario activar el reenvío de paquetes IP. Esto se realiza editando el archivo /etc/sysctl.conf y descomentando o añadiendo la siguiente línea:

net.ipv4.ip_forward=1

Luego se aplica el cambio sin reiniciar con:

sudo sysctl -p

Esto permite que el servidor actúe como pasarela entre la VPN y la red externa.

Arrancar y habilitar WireGuard

Con la configuración completa, se puede iniciar la interfaz VPN y hacer que se ejecute automáticamente al arrancar el sistema.

sudo systemctl start wg-quick@wg0
sudo systemctl enable wg-quick@wg0

El comando wg-quick es una herramienta que simplifica la activación de interfaces WireGuard usando los archivos .conf que se encuentran en /etc/wireguard/.

Para verificar que la interfaz esté activa y funcionando correctamente, se usa:

sudo wg

Esto mostrará información en tiempo real de la conexión, incluyendo la clave pública del servidor, el puerto de escucha y los pares conectados.

Configuración de un cliente

Cada cliente también debe tener su par de claves. Desde el equipo cliente, se generan de forma similar:

wg genkey | tee client_private.key | wg pubkey > client_public.key

Después, se crea el archivo de configuración del cliente, por ejemplo client.conf, con el siguiente contenido:

[Interface]
Address = 10.0.0.2/24
PrivateKey = <clave privada del cliente>
DNS = 1.1.1.1

[Peer]
PublicKey = <clave pública del servidor>
Endpoint = servidor.dominio.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

El cliente utiliza la clave pública del servidor para autenticar la conexión y el campo AllowedIPs define qué tráfico se enviará por la VPN. Si se establece 0.0.0.0/0, todo el tráfico se enruta a través de WireGuard. Si solo se quiere acceder a una subred concreta, se puede limitar este valor a esa red.

En el servidor, hay que añadir la información del cliente en el archivo de configuración del servidor, dentro de una nueva sección [Peer]:

[Peer]
PublicKey = <clave pública del cliente>
AllowedIPs = 10.0.0.2/32

Esto autoriza al servidor a aceptar tráfico proveniente del cliente identificado por esa clave pública.

Conexión y prueba

Una vez configurados ambos extremos, se puede levantar la interfaz en el cliente:

sudo wg-quick up client

En este punto, el cliente debería poder comunicarse con el servidor usando la red interna de WireGuard. Se puede probar con un simple ping:

ping 10.0.0.1

Si la respuesta es satisfactoria, la conexión está establecida correctamente. Desde este momento, todo el tráfico configurado será cifrado y enviado a través del túnel VPN.

Documentación generada con Inteligencia Artificial