Cómo configurar un servidor VPN WireGuard en Linux

Introducción

WireGuard es un protocolo VPN moderno y de alto rendimiento que es más sencillo de configurar que OpenVPN o IPSec. Esta guía cubre la configuración de un servidor WireGuard en Ubuntu/Debian y la conexión de un cliente.

Requisitos previos

  • Un VPS Linux con una dirección IP pública
  • Acceso root o sudo
  • Puerto UDP 51820 abierto en su firewall

Paso 1: Instalar WireGuard

sudo apt update
sudo apt install wireguard -y

Para AlmaLinux/RHEL:

sudo yum install epel-release -y
sudo yum install wireguard-tools -y

Paso 2: Generar las llaves del servidor

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

Ver las llaves:

cat /etc/wireguard/server_private.key
cat /etc/wireguard/server_public.key

Paso 3: Generar las llaves del cliente

wg genkey | tee /etc/wireguard/client1_private.key | wg pubkey > /etc/wireguard/client1_public.key

Paso 4: Configurar el servidor

Cree el archivo de configuración del servidor:

sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = LLAVE_PRIVADA_SERVIDOR
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# Cliente 1
PublicKey = LLAVE_PUBLICA_CLIENTE1
AllowedIPs = 10.0.0.2/32

Reemplace:

  • LLAVE_PRIVADA_SERVIDOR con el contenido de server_private.key
  • LLAVE_PUBLICA_CLIENTE1 con el contenido de client1_public.key
  • eth0 con el nombre de la interfaz de red principal de su servidor

Paso 5: Habilitar el reenvío de IP

echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Paso 6: Iniciar WireGuard

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

Verifique que la interfaz esté activa:

sudo wg show

Paso 7: Abrir el puerto en el firewall

sudo ufw allow 51820/udp

Paso 8: Configurar el cliente

Cree un archivo de configuración para el cliente (en la máquina del cliente o para importar en la aplicación WireGuard):

[Interface]
Address = 10.0.0.2/24
PrivateKey = LLAVE_PRIVADA_CLIENTE1
DNS = 8.8.8.8

[Peer]
PublicKey = LLAVE_PUBLICA_SERVIDOR
Endpoint = IP_DE_SU_SERVIDOR:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Reemplace:

  • LLAVE_PRIVADA_CLIENTE1 con el contenido de client1_private.key
  • LLAVE_PUBLICA_SERVIDOR con el contenido de server_public.key
  • IP_DE_SU_SERVIDOR con la dirección IP pública de su servidor

AllowedIPs = 0.0.0.0/0 enruta todo el tráfico a través de la VPN. Para enrutar solo el tráfico hacia la subred VPN, use AllowedIPs = 10.0.0.0/24.

Agregar más clientes

Para cada cliente adicional:

  1. Genere un nuevo par de llaves.
  2. Agregue una nueva sección [Peer] en /etc/wireguard/wg0.conf con un AllowedIPs único (ej.: 10.0.0.3/32).
  3. Recargue la configuración: sudo wg syncconf wg0 <(wg-quick strip wg0)

Comandos útiles

Comando Descripción
sudo wg show Mostrar el estado de la interfaz WireGuard y los pares conectados
sudo wg-quick up wg0 Iniciar la interfaz WireGuard
sudo wg-quick down wg0 Detener la interfaz WireGuard
sudo systemctl status wg-quick@wg0 Verificar el estado del servicio