Servidor VPN WireGuard personal con una interfaz web fácil de usar | INTROSERV
EUR
european

EUR

usa

USD

Spanish Es
Ex. VAT Ex. VAT 0%

Cómo configurar un servidor VPN WireGuard con wg-easy

wg-easy es una aplicación de Docker que ejecuta un servidor VPN WireGuard junto con un panel web. En el panel se crean clientes, se descargan sus archivos de configuración o se escanea un código QR con el teléfono, y se ve qué clientes están conectados. Esta guía muestra cómo instalar la versión actual, wg-easy v15, en un servidor Linux con Docker Compose y conectar el primer dispositivo.

Info

wg-easy v15 se diferencia de las versiones anteriores. La contraseña de administrador ya no se pasa en la variable PASSWORD: un contenedor iniciado con PASSWORD o PASSWORD_HASH no arranca. El usuario y la contraseña se establecen ahora en el navegador durante el primer inicio.

Requisitos

Basta con un VPS con una dirección IP pública y acceso root o sudo. wg-easy es ligero: 1 vCPU y 1 GB de RAM son suficientes para una VPN personal. Los comandos de esta guía se han comprobado en Ubuntu 24.04 LTS. Como wg-easy se ejecuta en Docker, funcionan igual en Ubuntu 22.04, Debian 12, AlmaLinux 9 y Rocky Linux 9.

Tip

Si no quiere instalar nada manualmente, solicite en el marketplace de aplicaciones de INTROSERV un VPS con wg-easy ya desplegado y pase directamente al primer inicio.

Instalar Docker

Conéctese al servidor por SSH e instale Docker Engine con el complemento Compose mediante el script oficial:

curl -fsSL https://get.docker.com | sudo sh

Compruebe que Docker y Compose están instalados:

sudo docker --version sudo docker compose version

Descargar el archivo docker-compose.yml

wg-easy se instala con el docker-compose.yml oficial del repositorio del proyecto. Cree una carpeta para él y descargue el archivo:

sudo mkdir -p /etc/docker/containers/wg-easy sudo curl -o /etc/docker/containers/wg-easy/docker-compose.yml https://raw.githubusercontent.com/wg-easy/wg-easy/master/docker-compose.yml

Las líneas principales del archivo son la imagen y los puertos:

image: ghcr.io/wg-easy/wg-easy:15 ports: - "51820:51820/udp" - "51821:51821/tcp"

El puerto 51820/udp lo utiliza el propio WireGuard y el puerto 51821/tcp, el panel web. La etiqueta 15 significa que las actualizaciones se mantienen dentro de la versión 15. La configuración y los clientes se guardan en un volumen de Docker, por lo que se conservan cuando se vuelve a crear el contenedor.

Iniciar wg-easy

Vaya a la carpeta del archivo e inicie el contenedor:

cd /etc/docker/containers/wg-easy sudo docker compose up -d

Compruebe que el contenedor está en ejecución:

sudo docker compose ps

La columna STATUS debe mostrar Up y la columna PORTS, los puertos 51820/udp y 51821/tcp.

Abrir el puerto en el firewall

Los clientes se conectan al servidor por el puerto UDP 51820. Si UFW está habilitado en el servidor, permita este puerto:

sudo ufw allow 51820/udp

En AlmaLinux y Rocky Linux con firewalld, utilice:

sudo firewall-cmd --permanent --add-port=51820/udp sudo firewall-cmd --reload

Abrir el panel web

wg-easy v15 no permite iniciar sesión en el panel a través de HTTP sin cifrar. La forma segura más sencilla es abrir el panel mediante un túnel SSH. En su ordenador, ejecute:

ssh -L 51821:localhost:51821 USER@SERVER_IP

Mantenga abierta esta sesión SSH y vaya a http://localhost:51821 en su navegador.

Warning

También puede permitir el acceso por HTTP sin cifrar: en docker-compose.yml descomente el bloque environment, establezca INSECURE=true y vuelva a ejecutar sudo docker compose up -d. En ese caso, la contraseña del panel se envía sin cifrar, por lo que debe usar esta opción solo para pruebas. Para un acceso permanente mediante nombre de dominio, coloque el panel detrás de un proxy inverso con HTTPS.

Completar el primer inicio

En el primer inicio, wg-easy abre un asistente de configuración. Tras la pantalla de bienvenida, cree una cuenta de administrador: introduzca un nombre de usuario y una contraseña y confirme la contraseña.

Cuando el asistente pregunte si ya tiene una configuración existente, elija No. Así se crea una configuración nueva.

En la siguiente pantalla, indique el Host y el Port que usarán los clientes para conectarse. En Host, introduzca la dirección IP pública o el nombre de dominio del servidor, no localhost, aunque haya abierto el panel mediante el túnel SSH. Deje Port como 51820. El botón Suggest rellena la dirección que wg-easy detecta automáticamente.

Warning

La dirección de Host se incluye en la configuración de cada cliente. Si introduce una dirección incorrecta, los clientes no podrán conectarse.

Cuando termine el asistente, inicie sesión con el nombre de usuario y la contraseña que creó.

Crear un cliente

En la página principal del panel, haga clic en New Client, introduzca un nombre para el dispositivo, por ejemplo laptop o phone, y confirme. El cliente aparece en la lista. Junto a él hay botones para mostrar el código QR y descargar el archivo de configuración.

Cree un cliente distinto para cada dispositivo. Así podrá desactivar o eliminar el acceso de un dispositivo sin afectar a los demás.

Conectar un dispositivo

Instale la aplicación oficial de WireGuard en su dispositivo. Está disponible para Windows, macOS, Android e iOS en la página oficial de descargas de WireGuard.

En un teléfono, abra la aplicación WireGuard, elija añadir un túnel mediante código QR y escanee el código del panel.

En un ordenador, descargue el archivo de configuración del cliente en el panel e impórtelo en la aplicación WireGuard con Import tunnel(s) from file. Después, haga clic en Activate.

En Linux, instale wireguard-tools y openresolv. Sin openresolv, el comando wg-quick falla en la línea DNS del archivo de configuración. En Ubuntu y Debian:

sudo apt install wireguard-tools openresolv sudo wg-quick up ./CLIENT_NAME.conf

Para desconectarse en Linux, ejecute sudo wg-quick down ./CLIENT_NAME.conf.

Comprobar la conexión

Con el túnel activo, compruebe qué dirección IP ve Internet:

curl -4 ifconfig.me

El comando debe devolver la dirección IP de su servidor. También puede abrir en el navegador cualquier sitio web de comprobación de IP. En el panel de wg-easy, el cliente conectado muestra la actividad y el tráfico recientes.

Gestionar clientes

Todos los clientes se gestionan en la página principal del panel. Cada cliente puede desactivarse temporalmente con el interruptor situado junto a él: el dispositivo permanece en la lista, pero no puede conectarse hasta que lo vuelva a activar. Para retirar el acceso por completo, elimine el cliente. Su archivo de configuración y su código QR dejan de funcionar de inmediato. Si se pierde un dispositivo o es posible que se haya copiado un archivo de configuración, elimine ese cliente y cree uno nuevo.

Si algo no funciona

Si el panel no se abre, compruebe con sudo docker compose ps que el contenedor está en ejecución y revise el registro:

sudo docker logs wg-easy

Si el panel se abre pero no puede iniciar sesión y aparece un mensaje sobre una conexión no segura, lo ha abierto mediante HTTP sin cifrar. Utilice el túnel SSH de la sección anterior.

Si el cliente no puede conectarse, compruebe que el puerto UDP 51820 está abierto en el firewall del servidor y en el firewall del panel de su proveedor, si lo hay. Abra además el archivo de configuración del cliente y revise la línea Endpoint: debe contener la dirección pública del servidor. Si contiene una dirección incorrecta, el Host se introdujo mal en el asistente de configuración.

Si el túnel está activo pero el dispositivo no tiene Internet, revise el registro del servidor con sudo docker logs wg-easy y asegúrese de que el contenedor se inició desde el docker-compose.yml oficial sin cambios en la sección sysctls.

En Linux, si wg-quick falla con un error relativo a resolvconf, instale openresolv como se describe en la sección sobre cómo conectar un dispositivo.

Actualizar wg-easy

Para instalar una compilación más reciente de la versión 15, descargue la nueva imagen y vuelva a crear el contenedor:

cd /etc/docker/containers/wg-easy sudo docker compose pull sudo docker compose up -d

Los clientes y la configuración se conservan, porque se almacenan en el volumen de Docker.

Detener y eliminar wg-easy

Para detener el servidor VPN, ejecute en la carpeta con docker-compose.yml:

sudo docker compose down

La configuración permanece en el volumen, y sudo docker compose up -d vuelve a iniciar el servidor con los mismos clientes.

Para eliminar wg-easy por completo, junto con todos los clientes y claves, añada la opción -v:

sudo docker compose down -v

Warning

Tras ejecutar sudo docker compose down -v, todas las configuraciones de los clientes dejan de funcionar. Para volver a usar la VPN, deberá completar el primer inicio y crear de nuevo los clientes.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA