Seguridad

Servidor WireGuard: guía de instalación y configuración para Linux y Windows

12 de mayo de 2026·7 min lectura

¿Qué es WireGuard?

WireGuard es un protocolo VPN de código abierto integrado en el kernel de Linux desde la versión 5.6 (también disponible en Windows, macOS, Android e iOS). Su diseño es minimalista: menos de 4 000 líneas de código, criptografía moderna (Curve25519, ChaCha20-Poly1305, BLAKE2s) y configuración reproducible basada en pares de claves. A diferencia de OpenVPN o IPsec, no requiere infraestructura de certificados y el handshake tarda milisegundos en lugar de segundos.

¿Por qué usarlo en IoT?

Los gateways IoT desplegados en campo se conectan desde redes de operador con NAT o CGNAT — no tienen IP pública fija ni son directamente alcanzables. Con WireGuard, cada dispositivo establece un túnel cifrado hacia un servidor central con IP estática. El sistema central ve a todos los gateways como si estuvieran en la misma red local, sin abrir puertos al exterior ni gestionar VPNs complejas.

WireGuard permite establecer túneles VPN cifrados con un footprint mínimo y configuración reproducible. Esta guía cubre la instalación y configuración de un servidor WireGuard en Linux (Ubuntu/Debian) y Windows 10/11: generación de claves, archivo wg0.conf, activación del servicio y verificación del handshake con el peer. El mismo servidor admite múltiples peers simultáneos sin degradación de rendimiento.

Visualización · Handshake WireGuard — servidor ↔ peer cliente

Arquitectura del túnel

El túnel WireGuard es punto-a-punto: un servidor central (tu instancia en AWS, GCP o on-premise) actúa como peer estático con IP pública fija, y el peer remoto es el cliente dinámico que inicia la conexión. Esto crea un canal de acceso cifrado para configuración remota, diagnóstico o cualquier servicio que necesite comunicación segura entre ambos extremos.

ComponenteRol WireGuardIP de túnel (ejemplo)
Servidor VPN (Linux / Windows)Peer estático (ListenPort activo)10.8.0.1/24
Peer / cliente remotoPeer dinámico (inicia conexión)10.8.0.2/32

Paso 1 — Instalar WireGuard en el servidor

Linux (Ubuntu / Debian)

En un servidor Ubuntu 22.04 o Debian 12 (recomendado):

sudo apt update && sudo apt install -y wireguard
sudo modprobe wireguard   # carga el módulo del kernel

Verifica que el módulo esté disponible:

lsmod | grep wireguard
# wireguard              90112  0

Windows 10 / 11

Descarga el instalador oficial desde wireguard.com/install o vía winget:

# Opción A — winget (Windows 10 v1709+ / Windows 11)
winget install WireGuard.WireGuard

# Opción B — instalador gráfico
# Descarga el .msi desde wireguard.com/install y ejecútalo como Administrador

Verifica que wg.exe está disponible abriendo PowerShell o CMD:

wg --version
# wireguard-windows v0.5.3

Paso 2 — Generar par de llaves en el servidor

Linux (Ubuntu / Debian)

# Genera llave privada del servidor
wg genkey | sudo tee /etc/wireguard/server_private.key
# Deriva la llave pública
sudo cat /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
sudo chmod 600 /etc/wireguard/server_private.key

Guarda la llave pública del servidor en un lugar seguro — deberás compartirla con cada peer que se conecte.

Windows 10 / 11

wg.exe se instala en C:\Program Files\WireGuard\. Ejecuta PowerShell como Administrador:

cd "C:Program FilesWireGuard"

# Genera la clave privada del servidor
.wg.exe genkey | Set-Content server_private.key

# Deriva la clave pública
Get-Content .server_private.key | .wg.exe pubkey | Set-Content server_public.key

Alternativa GUI: en la app WireGuard haz clic en «Add Tunnel» → «Add empty tunnel». La app genera el par de claves automáticamente y muestra la clave pública en pantalla. Solo añade Address, ListenPort y los bloques [Peer].

Paso 3 — Crear el archivo de configuración del servidor

Linux (Ubuntu / Debian)

Crea /etc/wireguard/wg0.conf con el siguiente contenido (reemplaza los valores entre < >): (/etc/wireguard/wg0.conf)

[Interface]
PrivateKey = <contenido de server_private.key>
Address = 10.8.0.1/24
ListenPort = 51820

# Habilita IP forwarding para enrutamiento entre peers
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]
# Index AMI gateway IoT / embedded device — unidad 001
PublicKey = <llave pública del Index AMI — generada en Paso 4>
AllowedIPs = 10.8.0.2/32

Nota: el puerto 51820 UDP debe estar abierto en el firewall del servidor. En AWS: inbound rule UDP 51820 en el Security Group. En GCP: regla de firewall VPC con protocolo UDP y puerto 51820.

Windows 10 / 11

El formato de wg0.conf es idéntico al de Linux. Windows no necesita las líneas PostUp/PostDown (routing manual si es necesario):

[Interface]
PrivateKey = <contenido de server_private.key>
Address = 10.8.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <clave pública del peer — generada en Paso 4>
AllowedIPs = 10.8.0.2/32

Importa el archivo como servicio de Windows (PowerShell o CMD como Administrador):

# Instala el túnel como servicio de Windows
wireguard /installtunnelservice "C:WireGuardwg0.conf"
# El servicio arranca automáticamente con el nombre: WireGuardTunnel$wg0

Abre el puerto UDP 51820 en el Firewall de Windows (PowerShell como Administrador):

New-NetFirewallRule -DisplayName "WireGuard VPN" `
  -Direction Inbound -Protocol UDP `
  -LocalPort 51820 -Action Allow

Paso 4 — Añadir el peer al servidor

Cuando el peer te envíe su llave pública, añade un bloque [Peer] al final del archivo wg0.conf del servidor:

[Peer]
# Nombre descriptivo del peer (comentario opcional)
PublicKey = <llave pública del peer>
AllowedIPs = 10.8.0.2/32

Recarga la configuración sin reiniciar el servicio:

Linux (Ubuntu / Debian)

sudo wg syncconf wg0 <(wg-quick strip wg0)

Windows 10 / 11

Abre la GUI de WireGuard → selecciona el túnel wg0 → edita el archivo y añade el bloque [Peer] → aplica los cambios.

Paso 5 — Levantar la interfaz y verificar el handshake

Linux (Ubuntu / Debian)

En el servidor:

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

Verifica el estado de la interfaz:

sudo wg show

# Salida esperada:
interface: wg0
  public key: <llave pública del servidor>
  private key: (hidden)
  listening port: 51820

peer: <llave pública del Index AMI>
  endpoint: <IP 4G del Index AMI>:XXXXX
  allowed ips: 10.8.0.2/32
  latest handshake: 3 seconds ago
  transfer: 1.23 KiB received, 2.45 KiB sent

El campo latest handshake con un valor reciente (menos de 3 minutos) confirma que el túnel está activo. Si no aparece, revisa la sección de resolución de problemas.

Windows 10 / 11

Si instalaste el servicio con /installtunnelservice, el túnel arranca automáticamente. Para control manual desde PowerShell:

sc start WireGuardTunnel$wg0
# o para detenerlo:
sc stop WireGuardTunnel$wg0

Alternativa GUI: abre WireGuard desde la bandeja del sistema o el menú Inicio y activa el interruptor del túnel wg0.

Verifica el estado del túnel con wg.exe (necesita estar en PATH o usar la ruta completa):

wg show
# interface: wg0
#   public key: ...
#   listening port: 51820
# peer: ...
#   latest handshake: 3 seconds ago

Paso 6 — Verificar conectividad extremo a extremo

Desde el servidor, haz ping a la IP del túnel del Index AMI:

ping 10.8.0.2
# PING 10.8.0.2 (10.8.0.2): 56 data bytes
# 64 bytes from 10.8.0.2: icmp_seq=0 ttl=64 time=8.3 ms

Latencia menor a 15 ms sobre LTE es normal. Si tu aplicación de gestión corre en el mismo servidor, ya puede alcanzar el peer directamente por 10.8.0.2.

Resolución de problemas

SíntomaCausa probableSolución
Sin handshake tras 2 minPuerto UDP 51820 bloqueadoAbre UDP 51820 en el firewall / security group del servidor
Handshake OK pero sin pingRutas o AllowedIPs mal configuradosVerifica que AllowedIPs del peer incluya la IP destino
Túnel cae tras 3–5 min sin tráficoNAT 4G expira la sesión UDPAsegura PersistentKeepalive = 25 en el peer Index AMI
Llave pública inválidaCaracteres cortados al copiarLa llave tiene exactamente 44 caracteres base64; cópiala completa

Topología en malla (múltiples gateways)

Para despliegues con más de un Index AMI, agrega un bloque [Peer] adicional por cada unidad en el wg0.conf del servidor. Cada Index AMI recibe una IP de túnel única (10.8.0.2, 10.8.0.3, …). El servidor actúa como hub central — los gateways no necesitan visibilidad entre sí.

[Peer]
# Index AMI gateway IoT / embedded device — unidad 002
PublicKey = <llave pública unidad 002>
AllowedIPs = 10.8.0.3/32

[Peer]
# Index AMI gateway IoT / embedded device — unidad 003
PublicKey = <llave pública unidad 003>
AllowedIPs = 10.8.0.4/32

Linux (Ubuntu / Debian)

Aplica los cambios en caliente sin reiniciar el servicio:

sudo wg addconf wg0 /etc/wireguard/wg0.conf
# o si agregas el peer directamente:
sudo wg set wg0 peer <public key> allowed-ips 10.8.0.3/32

Windows 10 / 11

En Windows, los cambios en caliente con wg addconf no están disponibles directamente. Para añadir un peer, edita wg0.conf, detén el servicio con sc stop WireGuardTunnel$wg0 (o desde la GUI), y vuelve a iniciarlo.

Próximos pasos

Con el servidor activo y el handshake verificado, el túnel cifrado está operativo. El peer remoto es accesible por su IP de túnel de forma segura desde cualquier punto de la red. Si el bus RS485 del peer presenta fallos de comunicación, consulta la guía de diagnóstico RS485 en campo.