WireGuard - VPN Rápida y Segura
WireGuard es una VPN moderna, rápida y segura. Este stack usa wg-easy para gestión simplificada de clientes.
📋 Descripción
Este stack despliega WireGuard con:
- Interfaz web para gestión de clientes (wg-easy)
- Generación automática de configuraciones de clientes
- Códigos QR para configuración móvil rápida
- Panel web protegido con Authentik
- Puerto UDP para el túnel VPN
🚀 Despliegue
Prerequisitos
- Red Docker: Asegúrate de que la red
proxyexiste - Registro DNS: Configura el registro A para tu dominio WireGuard
- Puerto UDP: El puerto UDP debe estar abierto en el firewall (por defecto 51820)
- Kernel modules: El servidor debe soportar WireGuard
Verificar Soporte WireGuard
# Verificar módulo WireGuard
lsmod | grep wireguard
# O intentar cargarlo
sudo modprobe wireguard
# Si falla, instala wireguard-tools
sudo dnf install wireguard-tools # Fedora/RHEL
sudo apt install wireguard # Debian/Ubuntu
Desde Portainer
- Ve a Stacks → Add stack
- Nombre:
wireguard - Selecciona Repository o Git repository
- Configura:
- Repository URL:
<tu-repositorio> - Repository reference:
main - Compose path:
wireguard/docker-compose.yml
- Repository URL:
- Carga el archivo de variables de entorno:
wireguard/stack.env - Haz clic en Deploy the stack
Variables de Entorno
Edita el archivo stack.env:
# Imagen
WG_EASY_IMAGE=ghcr.io/wg-easy/wg-easy:latest
# Dominio o IP pública del servidor
WG_HOST=vpn.tudominio.com
# Puerto UDP de WireGuard (debe estar abierto en el firewall)
WG_PORT=51820
WG_UDP_PORT=51820
# Puerto HTTP de la UI (interno)
WG_UI_PORT=51821
# Credenciales iniciales para la UI
INIT_ENABLED=true
INIT_USERNAME=admin
INIT_PASSWORD=tu-password-seguro
# Desactivar IPv6 (si el servidor no lo soporta)
DISABLE_IPV6=true
# Rutas
WG_DATA_PATH=/opt/wireguard/data
WG_MODULES_PATH=/lib/modules
# Dominio de la UI
WG_DOMAIN=vpn-admin.tudominio.com
# Traefik
TRAEFIK_DOCKER_NETWORK=proxy
TRAEFIK_ENTRYPOINT_SECURE=websecure
TRAEFIK_CERTRESOLVER=letsencrypt
TRAEFIK_AUTH_MIDDLEWARE=ths-authentik@docker
⚠️ Importante:
- Cambia
INIT_PASSWORDpor una contraseña segura- Usa tu dominio o IP pública en
WG_HOST
Abrir Puerto UDP en el Firewall
# Firewalld (Fedora/RHEL)
sudo firewall-cmd --permanent --add-port=51820/udp
sudo firewall-cmd --reload
# UFW (Ubuntu/Debian)
sudo ufw allow 51820/udp
# iptables
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4
⚙️ Configuración Post-Instalación
1. Acceso al Panel Web
- Accede a
https://vpn-admin.tudominio.com - Si configuraste Authentik, serás redirigido al SSO
- Inicia sesión con las credenciales configuradas en
INIT_USERNAMEyINIT_PASSWORD
2. Crear Cliente VPN
- En el panel web, haz clic en + Add Client
- Nombre del cliente:
mi-laptop,mi-movil, etc. - El cliente se crea automáticamente con:
- Par de claves pública/privada
- IP asignada dentro del túnel VPN
- Configuración completa
3. Configurar Cliente
Móvil (Android/iOS)
- Instala la app WireGuard desde Play Store o App Store
- En el panel web, haz clic en el icono QR del cliente
- Escanea el código QR con la app
- Activa el túnel VPN
Windows/Mac/Linux Desktop
Opción A: Escanear QR
- Descarga WireGuard desde wireguard.com
- Instala la aplicación
- Haz clic en Import tunnel(s) from QR code
- Escanea el QR del panel web con tu webcam
Opción B: Descargar archivo de configuración
- En el panel web, haz clic en el icono Download del cliente
- Guarda el archivo
.conf - En WireGuard app, haz clic en Import tunnel(s) from file
- Selecciona el archivo
.conf
Opción C: Configuración manual
Copia la configuración del panel web:
[Interface]
PrivateKey = tu_clave_privada
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = clave_publica_servidor
PresharedKey = clave_compartida
Endpoint = vpn.tudominio.com:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
Guarda como cliente.conf y carga en WireGuard.
4. Verificar Conexión
Una vez activado el túnel:
# Verificar IP pública (debe ser la de tu servidor VPN)
curl ifconfig.me
# Ping al servidor VPN (IP interna)
ping 10.8.0.1
# Verificar DNS
nslookup google.com
🔧 Configuración Avanzada
Rutear Solo Tráfico Específico (Split Tunneling)
Por defecto, WireGuard enruta TODO el tráfico (AllowedIPs = 0.0.0.0/0).
Para rutear solo ciertos rangos:
- Descarga el archivo
.confdel cliente - Edita
AllowedIPs:AllowedIPs = 10.8.0.0/24, 192.168.1.0/24 - Importa el archivo modificado en el cliente
Ejemplos:
- Solo red VPN:
10.8.0.0/24 - Red VPN + red local del servidor:
10.8.0.0/24, 192.168.1.0/24 - Todo excepto red local del cliente:
0.0.0.0/1, 128.0.0.0/1
Cambiar Rango de IPs de la VPN
Por defecto usa 10.8.0.0/24. Para cambiar:
- Detén el stack
- Edita
/opt/wireguard/data/wireguard.conf - Cambia:
[Interface] Address = 10.9.0.1/24 - Actualiza también en cada cliente
- Reinicia el stack
Usar DNS Personalizado
Para que los clientes usen tu AdGuard Home:
- En el panel web, ve a Settings
- Cambia DNS a la IP de tu servidor (ej:
192.168.1.10) - O edita manualmente en cada archivo
.conf:DNS = IP-de-tu-AdGuard
Limitar Ancho de Banda
No soportado directamente por wg-easy, pero puedes usar tc en el servidor:
# Limitar a 10 Mbps
sudo tc qdisc add dev wg0 root tbf rate 10mbit burst 32kbit latency 400ms
Configurar Post-Up/Post-Down Scripts
Para ejecutar scripts al iniciar/detener el túnel:
Edita /opt/wireguard/data/wireguard.conf:
[Interface]
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
🛠️ Troubleshooting
No puedo conectar al VPN
-
Verifica que el puerto UDP está abierto:
sudo netstat -tulpn | grep 51820 nc -zuv vpn.tudominio.com 51820 -
Verifica que WireGuard está corriendo:
docker logs wg-easy -
Verifica que el módulo WireGuard está cargado:
lsmod | grep wireguard -
Verifica la configuración del cliente (especialmente
Endpoint)
Conecta pero no hay Internet
-
Verifica que el forwarding está habilitado en el servidor:
cat /proc/sys/net/ipv4/ip_forward # Debe ser 1 -
Verifica las reglas de iptables:
sudo iptables -L -v -n -
Verifica la configuración de NAT en wg-easy
Panel web no accesible
-
Verifica que está corriendo:
docker ps | grep wg-easy -
Verifica los logs:
docker logs wg-easy -
Verifica Traefik:
docker logs traefik | grep wg
Error "Cannot find device wg0"
El módulo WireGuard no está cargado:
# Intentar cargar
sudo modprobe wireguard
# Si falla, instalar
sudo dnf install wireguard-tools # Fedora/RHEL
sudo apt install wireguard # Debian/Ubuntu
Clientes se desconectan frecuentemente
-
Aumenta
PersistentKeepaliveen la configuración del cliente:PersistentKeepalive = 25 -
Verifica el MTU (puede ser muy alto para tu red):
MTU = 1280
IPv6 causa problemas
Desactiva IPv6 en stack.env:
DISABLE_IPV6=true
Y reinicia el stack.
📚 Recursos Adicionales
🔒 Seguridad
- Cifrado: WireGuard usa criptografía moderna (ChaCha20, Curve25519)
- Panel web: Protegido con Authentik (SSO)
- Claves: Cada cliente tiene su par de claves único
- PresharedKey: Capa adicional de seguridad cuántica
- Firewall: Solo el puerto UDP de WireGuard debe estar abierto
Best Practices
- Cambia la contraseña del panel web
- Usa Authentik para proteger el panel
- Limita IPs si solo necesitas acceso desde ciertos rangos
- Revoca clientes cuando ya no los uses
- Haz backups de
/opt/wireguard/data/
💾 Backups
# Backup de configuraciones
sudo tar -czf wireguard-backup-$(date +%Y%m%d).tar.gz /opt/wireguard/data/
# Restaurar
sudo tar -xzf wireguard-backup-YYYYMMDD.tar.gz -C /
docker restart wg-easy
Importante: Guarda los backups de forma segura. Contienen las claves privadas.
🔄 Actualizaciones
- Haz backup de
/opt/wireguard/data/ - Actualiza en
stack.env:WG_EASY_IMAGE=ghcr.io/wg-easy/wg-easy:latest - Actualiza el stack en Portainer
- Verifica que los clientes siguen conectando
📊 Monitoreo
Ver Clientes Conectados
En el panel web, verás:
- Clientes activos (verde)
- Última conexión
- Transferencia de datos
- IP asignada
Ver Stats del Túnel
# Desde el servidor
docker exec wg-easy wg show
# Ver configuración
docker exec wg-easy cat /etc/wireguard/wg0.conf
# Ver logs
docker logs -f wg-easy
🎯 Casos de Uso
Acceso Remoto Seguro
Accede a tu red doméstica desde cualquier lugar:
- Administra servidores
- Accede a servicios internos
- Usa impresoras de red
Protección en Redes Públicas
Usa WireGuard en WiFi públicas para:
- Cifrar todo el tráfico
- Evitar ataques Man-in-the-Middle
- Proteger tus datos
Bypass de Restricciones Geográficas
Usa la IP de tu servidor para:
- Acceder a contenido local
- Evitar censura
- Mantener tu IP original
Combinar con AdGuard
Configura los clientes VPN para usar tu AdGuard Home:
- Bloqueo de anuncios en móvil
- Protección contra rastreadores
- DNS filtrado incluso fuera de casa