Instalamos WireGuard:
sudo apt install wireguard
Verificamos la creación del directorio de configuración:
Al instalar WireGuard, se debería crear automáticamente el directorio /etc/wireguard. Si no existe, lo creamos manualmente y configuramos los permisos adecuados:
sudo mkdir -p /etc/wireguard
sudo chmod 700 /etc/wireguard # Solo accesible por el usuario root
Cambiamos al directorio de configuración:
cd /etc/wireguard
Establecemos la umask para restringir permisos de archivos:
Para garantizar que solo el usuario root pueda leer o escribir archivos creados en este proceso:
umask 077
Generamos las claves pública y privada para el servidor:
Ejecutamos los siguientes comandos para generar las claves del servidor:
wg genkey | tee Serverprivatekey | wg pubkey > Serverpublickey
(Opcional) Generamos las claves del cliente:
En caso de que el cliente no las genere por su cuenta, podemos hacerlo en el servidor:
wg genkey | tee Clientprivatekey | wg pubkey > Clientpublickey
Creamos y editamos el archivo de configuración del servidor (wg0.conf):
Editamos el archivo de configuración para establecer los parámetros de la VPN:
sudo nano /etc/wireguard/wg0.conf
Configuración básica del archivo wg0.conf del servidor:
A continuación, se muestra un ejemplo de cómo debe configurarse el archivo:
[Interface]
# Clave privada del servidor
PrivateKey = (coloca aquí la clave privada del servidor)
# IP interna que usará el servidor en la VPN
Address = 10.0.0.1/24
# Puerto de escucha de WireGuard
ListenPort = 51820
# Permitir reenvío de paquetes y salida a Internet para los clientes
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
# Guardar la configuración al apagar el servidor
SaveConfig = true

Nota: Asegúrate de reemplazar (coloca aquí la clave privada del servidor) por la clave privada generada previamente.
Habilitamos el reenvío de paquetes en el sistema:
Editamos el archivo /etc/sysctl.conf para permitir el reenvío de paquetes:
sudo nano /etc/sysctl.conf
Buscamos la línea:
#net.ipv4.ip_forward=1
Y la descomentamos, quedando así:
net.ipv4.ip_forward=1
Aplicamos los cambios:
sudo sysctl -p
Configuración del firewall:
Permitimos el tráfico en el puerto de WireGuard (51820/UDP) y el acceso SSH:
sudo ufw allow 51820/udp
sudo ufw allow OpenSSH
Luego, activamos el firewall:
sudo ufw enable
Para comprobar el estado del firewall:
sudo ufw status