Generador docker-compose de wg-easy
Indica tu servidor y cómo quieres acceder al panel de administración. Obtienes un docker-compose.yml acorde con la imagen actual de wg-easy v15, un Caddyfile si quieres HTTPS y los comandos exactos para arrancarlo. Todo se construye en tu navegador.
Todo se genera en tu navegador. Nada de lo que escribes, contraseña incluida, se envía a nuestros servidores.
La dirección a la que se conectan los clientes WireGuard.
Un registro A de este nombre debe apuntar al servidor, con los puertos 80 y 443 abiertos.
- Pulsa « Nueva » para generar la contraseña de administrador.
- Indica el dominio del panel: Caddy lo necesita para obtener el certificado.
# wg-easy v15 - generated on vpnsmith.com/en/tools/wg-easy-compose-generator
# Host: vpn.example.com - WireGuard port: 51820/udp - panel: https://wg.example.com
volumes:
etc_wireguard:
caddy_data:
caddy_config:
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy
environment:
- PORT=80
- TRUSTED_PROXIES=10.42.42.43,fdcc:ad94:bacf:61a3::2b
- INIT_ENABLED=true
- INIT_USERNAME=admin
- INIT_PASSWORD=GENERATE-A-PASSWORD
- INIT_HOST=vpn.example.com
- INIT_PORT=51820
- INIT_DNS=1.1.1.1,9.9.9.9
networks:
wg:
ipv4_address: 10.42.42.42
ipv6_address: fdcc:ad94:bacf:61a3::2a
volumes:
- etc_wireguard:/etc/wireguard
- /lib/modules:/lib/modules:ro
ports:
- "51820:51820/udp" # WireGuard: the only port clients need
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.default.forwarding=1
caddy:
image: caddy:2-alpine
container_name: caddy
ports:
- "80:80/tcp"
- "443:443/tcp"
- "443:443/udp"
networks:
wg:
ipv4_address: 10.42.42.43
ipv6_address: fdcc:ad94:bacf:61a3::2b
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
restart: unless-stopped
networks:
wg:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 10.42.42.0/24
- subnet: fdcc:ad94:bacf:61a3::/64
wg.example.com {
reverse_proxy wg-easy:80
}
# 1. Cortafuegos: primero SSH, luego el puerto de WireGuard
sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw enable
# Ojo: los puertos publicados por Docker saltan ufw. Ábrelos/ciérralos también en el cortafuegos del proveedor.
# 2. Crea la carpeta y pega el o los archivos generados
sudo mkdir -p /etc/docker/containers/wg-easy
cd /etc/docker/containers/wg-easy
sudo nano docker-compose.yml
sudo nano Caddyfile
# 3. Arranca wg-easy
sudo docker compose up -d
# Sigue los registros (Ctrl+C para salir)
sudo docker compose logs -f wg-easy
# 4. Abre el panel: https://wg.example.com
# 5. Una vez dentro, quita las líneas INIT_* y vuelve a ejecutar docker compose up -d
Este archivo necesita un servidor con IP pública
Un VPS Cloud de Contabo ofrece una IPv4 dedicada, imágenes Linux listas para Docker y tráfico ilimitado, todo lo que necesita wg-easy.
Enlace de afiliado: cobramos una comisión sin coste adicional para ti.
Por qué tu antiguo archivo de wg-easy dejó de funcionar
wg-easy v15 es una reescritura completa. La mayoría de las variables de los tutoriales de la v14 se ignoran en la nueva imagen: el contenedor arranca, pero no se aplican tu host, tu contraseña ni tus DNS. La guía oficial de migración indica que la mayoría de los ajustes pasaron al panel de administración. Esta es la correspondencia:
| Variable v14 | Equivalente v15 |
|---|---|
| WG_HOST | INIT_HOST (solo en el primer arranque), luego el panel |
| PASSWORD / PASSWORD_HASH | INIT_USERNAME + INIT_PASSWORD, o el asistente de instalación |
| WG_PORT | INIT_PORT, con el mapeo UDP correspondiente |
| WG_DEFAULT_DNS | INIT_DNS |
| WG_DEFAULT_ADDRESS | INIT_IPV4_CIDR junto con INIT_IPV6_CIDR |
| Panel por HTTP simple | ahora es obligatorio INSECURE=true |
Tres formas de acceder al panel
El panel puede crear clientes VPN: quien llega a él controla tu VPN. Solo el puerto UDP de WireGuard tiene que estar expuesto a Internet.
HTTPS con Caddy es la configuración que recomienda la documentación de wg-easy: Caddy obtiene un certificado real para un subdominio que apunta a tu servidor y el panel nunca se sirve por HTTP simple. El generador pone ambos contenedores en la misma red, da a Caddy una dirección fija y la declara en TRUSTED_PROXIES, para que los inicios de sesión fallidos se registren con la IP real del cliente.
El túnel SSH publica el panel solo en 127.0.0.1. No se expone nada; lo abres con ssh -L cuando lo necesitas. Es la opción segura más sencilla si no tienes dominio.
El modo red local es para un servidor doméstico: el panel se publica por HTTP con INSECURE=true. Docker publica los puertos con sus propias reglas iptables, así que ufw no los filtra; mantén ese puerto cerrado en el router o en el cortafuegos del proveedor.