VPNSmith
self-host-vpnINFO

wg-easy (2026): autoaloja WireGuard con interfaz web en minutos

wg-easy le da a WireGuard un panel web: crea clientes, escanea códigos QR, observa el tráfico en vivo. La guía completa de 2026 — docker-compose, el cambio de contraseña de la v14, blindar el panel de administración y cuándo elegirlo frente a la CLI.

Por Eric Gerard · Fundador · VPNSmith — Especialista en VPN self-host y VPS GDPR8 min de lecturaFoto vía Pixabay

Aviso de afiliación — Esta guía enlaza a Contabo, el VPS donde corremos nuestro propio WireGuard autoalojado. Si contratas a través de nuestro enlace ganamos una comisión sin coste extra para ti. Cada comando de abajo está documentado a partir del proyecto oficial wg-easy y escrito para ser reproducible en tu propia máquina.

WireGuard es rápido y moderno, pero la instalación estándar son ficheros y línea de comandos: generar claves, editar wg0.conf a mano, ejecutar wg set por cada dispositivo, mover configuraciones de un lado a otro. Para un dispositivo, vale. Para una familia, varios portátiles y un par de móviles, se vuelve tedioso — y es en lo tedioso donde aparecen los errores (y las claves que se filtran). wg-easy resuelve justo eso: mantiene el WireGuard real debajo, intacto, y le acopla un panel web limpio. Añadir un cliente en dos clics, mostrar un QR para un móvil, ver quién está conectado y cuánto transfiere. Esta es la instalación completa de 2026, incluido el cambio de contraseña que hace tropezar a todo el que actualiza.

Qué es wg-easy realmente (y qué no)

wg-easy es un único contenedor Docker que ejecuta un servidor WireGuard y una pequeña aplicación web para gestionarlo. Lo clave de entender de entrada: no reemplaza ni reimplementa WireGuard. El túnel sigue siendo el mismo WireGuard del núcleo, con las mismas claves y el mismo protocolo en el cable. wg-easy es gestión, no una VPN nueva. Dos consecuencias:

  • Sin penalización de velocidad. El rendimiento y la latencia son idénticos a una configuración escrita a mano, porque la ruta de datos nunca toca la aplicación web.
  • La interfaz web es la superficie de ataque. El panel puede crear clientes, así que quien lo controla controla tu VPN. Proteger ese panel es toda la historia de seguridad (más abajo).

Lo que obtienes a cambio: una página de navegador que lista cada cliente, crear/desactivar/eliminar a un clic, un código QR por cliente para los móviles y un contador de transferencia en vivo por peer. Para dar de alta un puñado de dispositivos sin tocar la terminal, nada es más rápido.

Un portátil sobre un escritorio mostrando líneas de código fuente en un editor oscuro, con un smartphone apoyado junto al teclado
Un portátil sobre un escritorio mostrando líneas de código fuente en un editor oscuro, con un smartphone apoyado junto al teclado

Antes de empezar: el host que necesitas

wg-easy es un contenedor, así que necesitas un host Linux capaz de correr Docker y con una IP pública. Para una VPN a la que llegar desde cualquier sitio, eso significa un VPS pequeño — WireGuard es tan ligero que una instancia de 4–6 €/mes satura su puerto de red mucho antes de que la CPU se entere. Nosotros corremos el nuestro en Contabo por la relación precio/ancho de banda, y el procedimiento bare-metal está en nuestra guía de WireGuard autoalojado en Contabo por si quieres comparar con la vía manual.

Consigue un VPS Contabo para correr wg-easy →

En el host necesitas Docker y el plugin Compose instalados, el módulo de núcleo de WireGuard disponible (toda distro moderna, Linux 5.6+, lo trae), y poder abrir el UDP 51820 en tanto el cortafuegos del host como el grupo de seguridad de tu proveedor.

El fichero docker-compose

Este es el despliegue moderno de wg-easy. Sustituye WG_HOST por la IP pública o el nombre de host de tu servidor, y define una contraseña de administración fuerte (la siguiente sección explica el requisito de hash en v14+):

services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:latest
    container_name: wg-easy
    environment:
      - WG_HOST=ip.publica.de.tu.servidor
      - PASSWORD_HASH=$2a$12$SUSTITUYE_POR_TU_HASH_BCRYPT
      - WG_DEFAULT_DNS=1.1.1.1
    volumes:
      - ./etc_wireguard:/etc/wireguard
    ports:
      - "51820:51820/udp"   # datos WireGuard — abierto a Internet
      - "51821:51821/tcp"   # interfaz web — limítalo SOLO a TU IP
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

Tres cosas hacen el trabajo real y son los puntos de fallo habituales:

  • cap_add: NET_ADMIN permite al contenedor gestionar la interfaz WireGuard. Sin ella, el contenedor arranca pero no puede levantar el túnel.
  • sysctls: net.ipv4.ip_forward=1 convierte la máquina en un router. Sin ello, el túnel se conecta y luego no enruta nada — el clásico «conectado pero sin Internet».
  • volumes persiste claves y clientes en el host, para que un docker compose down && up no borre todos los dispositivos.

Levántalo con docker compose up -d, luego abre http://IP_DE_TU_SERVIDOR:51821 e inicia sesión.

El cambio de contraseña que rompe las actualizaciones

Este es el mayor escollo de 2026. El antiguo wg-easy usaba una variable de entorno PASSWORD en texto plano. Las versiones recientes (v14 y posteriores) eliminaron el PASSWORD en plano y ahora exigen un hash bcrypt en PASSWORD_HASH. Si copias la línea PASSWORD=secreto de un tutorial viejo a una imagen actual, el contenedor rechazará el inicio de sesión o no arrancará, y jurarás que la documentación está mal.

Genera el hash con la propia imagen para no pegar nunca una contraseña en plano en el historial del shell:

docker run --rm ghcr.io/wg-easy/wg-easy wgpw 'tu-contraseña-fuerte'
# imprime: PASSWORD_HASH=$2a$12$....

Copia el valor $2a$12$... completo en el fichero compose. Ten en cuenta que los caracteres $ deben escaparse (duplicarse como $$) si pones el hash en un fichero .env que Compose interpola — ese fallo de escape es la segunda queja más común tras el cambio de nombre de la variable.

Añade tu primer cliente

Dentro del panel, pulsa New Client, dale un nombre (p. ej. portatil, movil-pixel), y wg-easy genera el par de claves y una configuración lista. Para un ordenador, descarga el .conf e impórtalo en la aplicación WireGuard o las plantillas de configuración; para un móvil, pulsa el icono QR y escanéalo con la app móvil de WireGuard — sin teclear, sin transferir ficheros. El interruptor por cliente desactiva un dispositivo al instante sin borrarlo, que es la forma correcta de revocar un móvil perdido.

Blindar el panel de administración — hazlo ya, no después

La interfaz web puede crear clientes VPN, así que un panel expuesto y mal protegido es el peligro real de wg-easy. Tres capas, por orden de preferencia:

  1. Nunca publiques 51821 en Internet. En el cortafuegos de tu proveedor de VPS, deja abierto el UDP 51820 y mantén el TCP 51821 cerrado al mundo. Llega al panel solo desde tu propia IP, o — lo más limpio — conéctate primero a la VPN y abre el panel a través del túnel, para que el puerto de administración nunca dé a Internet.
  2. Usa una contraseña fuerte y hasheada. El requisito PASSWORD_HASH existe por esto. Trátalo como una contraseña de root.
  3. Pon TLS por delante si debes alcanzarlo en remoto: un proxy inverso (Caddy, Traefik, nginx) terminando HTTPS con un certificado real, idealmente con lista de permitidos. HTTP en plano sobre un puerto público es la única configuración a evitar.

Una VPN autoalojada a la que cualquier transeúnte puede añadirse es peor que ninguna VPN. El panel son las llaves del reino — protégelo en consecuencia.

wg-easy frente a las alternativas

  • vs PiVPNPiVPN instala WireGuard directamente en el host y gestiona los peers desde la terminal (pivpn add, pivpn -qr). Sin contenedor, sin interfaz web. Elige PiVPN para una máquina bare-metal ligera y scriptable; elige wg-easy cuando de verdad quieras un panel a clics y estadísticas en vivo.
  • vs una configuración a mano — Editar wg0.conf tú mismo es la opción más transparente y ligera, ideal para una máquina VPN de un solo propósito y la infraestructura como código. wg-easy cambia un poco de superficie extra (la app web) por una gestión de clientes rápida y sin CLI.
  • vs otras stacks autoalojadas — Si quieres un mesh (cada dispositivo hablando directamente, con la travesía de NAT gestionada por ti) en vez de un servidor clásico en estrella, wg-easy no tiene la forma adecuada; ese es el terreno de Tailscale/Headscale/NetBird, comparado en nuestra guía de la mejor VPN autoalojada.

wg-easy también convive perfectamente con otros contenedores, de ahí que combine de forma natural con una instalación de WireGuard en Docker más amplia.

Cuándo wg-easy es la elección correcta — y cuándo no

Usa wg-easy cuando das de alta a varias personas o dispositivos, quieres configurar el móvil por QR, te gusta ver el estado de conexión en vivo, o simplemente prefieres un panel a un fichero de configuración. Convierte «configurar un cliente VPN» de una tarea de CLI de cinco minutos en dos clics.

Sáltatelo cuando la máquina no hace más que servir uno o dos peers de WireGuard (una configuración a mano es más simple y tiene una pieza móvil menos), cuando no puedes mantener con seguridad el puerto de administración fuera de Internet, o cuando en realidad quieres un mesh y no un servidor. Para todos los demás, wg-easy es el camino honesto más rápido de un VPS nuevo a una VPN WireGuard funcional y manejable.

La limitación honesta

wg-easy hace WireGuard más fácil de gestionar, no más privado ni más seguro de lo que WireGuard ya es. Comparte el núcleo del host, corre con NET_ADMIN, y está tan blindado como el host y el panel de administración que pongas delante. No audita tus clientes, no impide por sí solo las fugas de DNS (configura WG_DEFAULT_DNS y verifica), y no te protege si dejas 51821 abierto. Trátalo como una capa de comodidad sobre el WireGuard real: despliégalo, endurece el host y el panel, mantén el puerto de datos público y el de administración privado — y tendrás una VPN autoalojada que de verdad puedes operar para todo un hogar sin vivir en la terminal.

★ Datacenter Núremberg GDPR · ✓ IPv4 dedicada incluida · 200+ Mbps garantizados

Aloja tu VPN en tu propio VPS → ContaboAcceso root completo · IPv4 pública · elige tu región

Preguntas frecuentes

¿Qué es wg-easy?
wg-easy es un proyecto de código abierto que envuelve WireGuard en una pequeña interfaz web. Lo ejecutas como un único contenedor Docker; gestiona el servidor WireGuard por ti y te da un panel en el navegador para añadir y quitar clientes, descargar o escanear sus configuraciones por QR y ver la subida/bajada en vivo por peer. El cifrado sigue siendo WireGuard puro corriendo en el núcleo del host — wg-easy solo se ocupa de la gestión de peers y la interfaz, así que no hay penalización de rendimiento frente a una configuración escrita a mano.
¿Es seguro exponer wg-easy a Internet?
Solo el puerto de datos de WireGuard (UDP 51820 por defecto) debe dar a Internet. El puerto web de administración (51821) NO debe estar abierto al mundo — cualquiera que lo alcance y adivine o fuerce la contraseña puede crearse un cliente VPN. Limita el puerto web a tu propia IP con una regla de cortafuegos, ponlo detrás de un proxy inverso con TLS, o alcánzalo a través del propio túnel. Las versiones recientes de wg-easy exigen una contraseña de administración hasheada (PASSWORD_HASH) precisamente porque un panel desprotegido es el riesgo principal.
¿Cuál es la diferencia entre wg-easy y PiVPN?
Ambos facilitan WireGuard, pero de forma distinta. PiVPN es un script de instalación que monta WireGuard (u OpenVPN) directamente en el host y te da comandos CLI (pivpn add, pivpn -qr) para gestionar peers — sin contenedor, sin interfaz web. wg-easy corre como un contenedor Docker y todo su sentido es el panel del navegador. Elige PiVPN si te gusta una instalación bare-metal manejada por terminal en una Raspberry Pi o un VPS; elige wg-easy si quieres un panel a clics y estadísticas en vivo.
¿Sigo necesitando un VPS para wg-easy?
Si quieres una VPN a la que conectarte desde cualquier sitio con una IP pública estable, sí — wg-easy sigue necesitando un host con una dirección enrutable, igual que cualquier servidor WireGuard. Un VPS pequeño (4–6 €/mes) es la opción estándar y satura su enlace fácilmente con WireGuard. Solo para acceso remoto a una red doméstica, puedes correr wg-easy en un servidor casero detrás de redirección de puertos, pero pierdes la IP estática limpia.
¿Por qué wg-easy se conecta pero no enruta tráfico?
Casi siempre el cortafuegos del host o el reenvío IP. El contenedor necesita la capacidad NET_ADMIN y el host debe reenviar paquetes (net.ipv4.ip_forward=1) — wg-easy lo configura en su fichero compose, pero el grupo de seguridad aparte de un proveedor cloud puede seguir bloqueando el UDP 51820. Abre ese puerto en el cortafuegos del proveedor, no solo en el host. Si el handshake se completa pero las páginas siguen colgándose, el siguiente sospechoso es el MTU y no wg-easy en sí.