Ir al contenido
  1. Posts/

Wake-on-LAN: enciende tu servidor desde el sofá (o desde Tokio)

·2085 palabras·10 mins

Tengo un Mac mini que uso como servidor principal. Está siempre encendido. Pero también tengo tres ZimaBoards que forman parte de mi cluster K3s. Esas máquinas consumen poco (10W cada una), pero cuando no las necesito, las apago. El problema: cuando las necesito, están en otro cuarto.

Podría levantarme, ir al cuarto, pulsar el botón de encendido. O podría enviar un paquete mágico por la red que las despierta automáticamente. Segundo escenario, por favor.

Eso es Wake-on-LAN. Un protocolo viejo (años 90), simple, y que funciona. Hoy vamos a configurarlo.

Qué es Wake-on-LAN y cómo funciona
#

Wake-on-LAN (WoL) permite encender un ordenador enviando un paquete UDP especial llamado “magic packet”. El paquete contiene la dirección MAC de la máquina que quieres despertar. Cuando la tarjeta de red recibe ese paquete (aunque el PC esté apagado), envía señal a la placa base para que arranque.

Requisitos:

  • Tarjeta de red compatible con WoL (la mayoría lo son desde 2010)
  • WoL habilitado en BIOS
  • Cable ethernet (WoL no funciona por WiFi en la mayoría de casos)
  • PC en standby o hibernación (no completamente apagado de la corriente)

El magic packet es un frame ethernet que contiene 6 bytes de FF seguidos de 16 repeticiones de la dirección MAC destino. Algo así:

1
FF FF FF FF FF FF [MAC x16]

La tarjeta de red, aunque el PC esté apagado, sigue recibiendo corriente mínima. Detecta ese patrón, y despierta el sistema.

Paso 1: habilitar WoL en BIOS
#

Antes de nada, tienes que activar Wake-on-LAN en la BIOS de tu servidor.

Reinicia el servidor, entra en BIOS (DEL, F2, F12, depende del fabricante). Busca opciones como:

  • Wake on LAN
  • Wake on PCI/PCIe
  • Power On By PCI-E
  • ErP Ready (desactívalo si está activado, bloquea WoL)

En mis ZimaBoards, la opción está en Advanced > Power Management > Wake on LAN. La pongo en Enabled.

Guarda, reinicia, y ya tienes la BIOS lista.

Paso 2: habilitar WoL en el sistema operativo
#

Dependiendo del OS, WoL puede estar deshabilitado por defecto.

Linux (Debian/Ubuntu):

Instala ethtool:

1
sudo apt install ethtool

Comprueba si WoL está habilitado:

1
sudo ethtool eth0 | grep Wake-on

Verás algo como:

1
2
Supports Wake-on: pumbg
Wake-on: d

La “d” significa disabled. Para habilitarlo:

1
sudo ethtool -s eth0 wol g

La “g” activa Wake-on-LAN via magic packet.

Problema: este cambio se pierde al reiniciar. Para hacerlo permanente, crea un servicio systemd.

Crea /etc/systemd/system/wol.service:

1
2
3
4
5
6
7
8
9
[Unit]
Description=Enable Wake-on-LAN

[Service]
Type=oneshot
ExecStart=/sbin/ethtool -s eth0 wol g

[Install]
WantedBy=basic.target

Actívalo:

1
2
sudo systemctl enable wol.service
sudo systemctl start wol.service

Ahora WoL persiste entre reinicios.

Windows:

En Windows es más fácil (por una vez).

  1. Panel de Control > Administrador de dispositivos
  2. Adaptadores de red > clic derecho en tu ethernet > Propiedades
  3. Pestaña Opciones avanzadas > Wake on Magic Packet > Habilitado
  4. Pestaña Administración de energía:
    • ✅ Permitir que este dispositivo reactive el equipo
    • ✅ Solo permitir que un paquete mágico reactive el equipo

Aplica, y listo.

macOS:

En Macs modernos, WoL se llama “Wake for network access”.

Preferencias del Sistema > Batería > Opciones de energía > ✅ Activar para acceso desde la red

Funciona en Macs con ethernet. Con WiFi es inconsistente.

Paso 3: obtener la dirección MAC
#

Necesitas la dirección MAC de la tarjeta de red del servidor que quieres despertar.

Linux:

1
ip link show eth0

Verás algo como:

1
link/ether 00:1a:2b:3c:4d:5e

Esa es la MAC.

Windows:

1
ipconfig /all

Busca “Dirección física” en el adaptador ethernet.

macOS:

1
ifconfig en0 | grep ether

Anota la MAC. La vas a usar para enviar el magic packet.

Paso 4: enviar el magic packet
#

Tienes varias formas de enviar el paquete mágico.

Opción 1: wakeonlan (CLI, Linux/macOS)
#

Herramienta simple, funciona en terminal.

Instalar:

1
2
3
4
5
# macOS
brew install wakeonlan

# Debian/Ubuntu
sudo apt install wakeonlan

Usar:

1
wakeonlan 00:1a:2b:3c:4d:5e

El servidor con esa MAC debería encenderse en 3-5 segundos.

Si el servidor está en otra subred, añade la IP de broadcast:

1
wakeonlan -i 192.168.0.255 00:1a:2b:3c:4d:5e

Opción 2: etherwake (alternativa en Linux)
#

Similar a wakeonlan, viene en muchos repos por defecto.

1
2
sudo apt install etherwake
sudo etherwake 00:1a:2b:3c:4d:5e

Requiere sudo porque envía paquetes raw.

Opción 3: script Python (multiplataforma)
#

Si quieres algo custom, puedes escribir un script Python que envíe el magic packet.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python3
import socket
import sys

def wake(mac):
    # Convertir MAC a bytes
    mac_bytes = bytes.fromhex(mac.replace(':', ''))
    # Crear magic packet
    magic = b'\xff' * 6 + mac_bytes * 16
    # Enviar vía UDP broadcast
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    sock.sendto(magic, ('255.255.255.255', 9))
    sock.close()
    print(f"Magic packet enviado a {mac}")

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print("Uso: python wol.py 00:1a:2b:3c:4d:5e")
        sys.exit(1)
    wake(sys.argv[1])

Guárdalo como wol.py, dale permisos de ejecución, y úsalo:

1
python3 wol.py 00:1a:2b:3c:4d:5e

Opción 4: apps móviles (Android/iOS)
#

Hay apps que envían magic packets desde el móvil.

Android:

  • Wake On Lan (de Mike Webb, gratuita)
  • WolOn (gratuita, con widgets)

iOS:

  • Mocha WOL (gratuita)
  • Wake On Lan (de Readdle, gratuita)

Instalas la app, añades un dispositivo con su MAC, y cuando quieras encenderlo, abres la app y pulsas el botón. Simple.

Yo uso WolOn en Android. Tengo widgets en mi pantalla de inicio para encender mis ZimaBoards con un toque.

Caso real: encender ZimaBoards desde Telegram
#

Tengo un bot de Telegram que controla mi homelab. Una de las funciones es despertar servidores via WoL.

Configuración:

  1. Script Python que envía magic packets (el de arriba)
  2. n8n con un webhook que ejecuta el script cuando recibo un mensaje de Telegram
  3. Mensaje de Telegram tipo “/wake zima1” ejecuta python3 wol.py <MAC_ZIMA1>

Resultado: escribo /wake zima1 en Telegram, el ZimaBoard arranca en 5 segundos. Sin levantarme del sofá.

Ejemplo del comando n8n:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash
case "$1" in
  zima1) MAC="00:1a:2b:3c:4d:5e" ;;
  zima2) MAC="00:1a:2b:3c:4d:6f" ;;
  zima3) MAC="00:1a:2b:3c:4d:70" ;;
  *) echo "Servidor desconocido"; exit 1 ;;
esac

wakeonlan $MAC
echo "Despertando $1..."

Llamo al script desde n8n pasando el nombre del servidor. Simple, efectivo.

WoL a través de internet (con VPN)
#

Wake-on-LAN funciona en tu red local. Para despertar un servidor desde internet (ej: desde el trabajo, desde un hotel), necesitas una VPN o port forwarding.

Opción 1: VPN (recomendado)

Si usas Tailscale o WireGuard, conectas a la VPN y envías el magic packet como si estuvieras en tu red local.

Ejemplo con Tailscale:

  1. Conecto a Tailscale desde mi móvil
  2. Ejecuto WolOn apuntando a la IP Tailscale de mi router o de un servidor siempre encendido en mi red
  3. El magic packet se envía a través de Tailscale, llega a mi red local, despierta el servidor

Esto funciona porque Tailscale te pone dentro de la red (virtualmente).

Opción 2: Port forwarding (menos seguro)

Configuras tu router para reenviar el puerto UDP 9 (puerto estándar de WoL) a la IP broadcast de tu red (ej: 192.168.0.255).

Problema: expones tu red a internet. Cualquiera que conozca tu IP pública y una MAC de tu red puede intentar despertar máquinas. No es crítico (el magic packet no da acceso al servidor), pero es innecesario.

Prefiero VPN.

Troubleshooting: cuando WoL no funciona
#

He configurado WoL en varios servidores. A veces no funciona al primer intento. Posibles causas:

1. WiFi en vez de ethernet

WoL no funciona de forma fiable en WiFi. Algunas tarjetas WiFi lo soportan, pero la mayoría no. Usa cable.

2. ErP Ready habilitado en BIOS

ErP (Energy-related Products) es una directiva europea para reducir consumo en standby. Si está activo, el PC corta corriente a la tarjeta de red. WoL no puede funcionar.

Entra en BIOS, desactiva ErP Ready.

3. Fast Startup en Windows

Windows 10/11 tiene “Fast Startup” que en realidad es hibernación. Cuando apagas, no apaga completamente, hiberna. Esto puede bloquear WoL.

Panel de Control > Opciones de energía > Elegir el comportamiento de los botones de inicio/apagado > Cambiar configuración no disponible actualmente > ❌ Activar inicio rápido

Reinicia y prueba WoL.

4. Switch/router que bloquea broadcast

Algunos switches/routers bloquean paquetes broadcast por seguridad. Raro en equipos domésticos, común en redes empresariales.

Solución: envía el magic packet directamente a la IP del servidor (si tiene IP estática asignada por DHCP) en vez de broadcast.

5. Servidor completamente apagado de la corriente

WoL requiere que el servidor esté en standby (recibiendo corriente pero apagado lógicamente). Si desenchufas el cable de alimentación, no funciona.

6. Subnet diferente

Si el servidor está en una VLAN o subnet diferente, el magic packet puede no llegar. Necesitas configurar el router para reenviar broadcast entre subnets.

O usa un servidor en la misma subnet como relay.

Automatizar WoL con cron
#

Puedes programar que un servidor se despierte a cierta hora.

Ejemplo: quiero que mi ZimaBoard se encienda cada mañana a las 7:00 para hacer backups.

Cron en mi Mac mini (que está siempre encendido):

1
crontab -e

Añade:

1
0 7 * * * /usr/local/bin/wakeonlan 00:1a:2b:3c:4d:5e

A las 7:00 AM todos los días, mi Mac mini envía el magic packet, el ZimaBoard arranca.

Después puedes apagarlo automáticamente con SSH:

1
ssh user@zimaboard 'sudo shutdown -h +60'

Esto apaga el ZimaBoard 60 minutos después de arrancar (tiempo suficiente para hacer backups).

WoL en clusters Kubernetes
#

En mi cluster K3s, tengo nodos que no necesitan estar siempre encendidos. Por ejemplo, los 3 workers de oficina con Longhorn storage solo los necesito cuando hago deploys grandes o pruebas de carga.

Setup:

  1. Script que detecta carga del cluster (kubectl top nodes)
  2. Si la carga sube >70%, envía magic packets a los nodos adicionales
  3. Nodos arrancan, se unen al cluster, Kubernetes redistribuye pods
  4. Cuando la carga baja, los nodos se apagan automáticamente (via systemd timer que ejecuta shutdown si idle >30min)

Esto ahorra electricidad sin sacrificar disponibilidad. Cuando necesito potencia, los nodos despiertan en segundos.

Alternativas a Wake-on-LAN
#

WoL no es la única forma de encender servidores remotamente.

IPMI/BMC (Baseboard Management Controller):

Servidores enterprise tienen IPMI, una interfaz de gestión independiente que permite encender/apagar/reiniciar el servidor desde una web o CLI. Funciona aunque el servidor esté apagado.

Pros: más fiable que WoL, permite acceso a BIOS remoto, ver temperaturas, etc.

Contras: solo en hardware enterprise (no en PCs normales), requiere puerto de red dedicado, consume más energía en standby.

Smart plugs (enchufes inteligentes):

Enchufas el servidor a un enchufe inteligente (TP-Link Kasa, Shelly, Sonoff), lo apagas cortando corriente, lo enciendes dando corriente.

Pros: funciona con cualquier hardware, barato, fácil.

Contras: shutdown no es limpio (corta corriente de golpe, puede corromper datos), el servidor necesita BIOS configurado para auto-encender al recibir corriente.

Uso smart plugs para equipos que no soportan WoL (ej: switches viejos, routers). Para servidores con datos importantes, WoL es mejor.

Raspberry Pi como relay:

Si tienes un Raspberry Pi siempre encendido, puedes usarlo para enviar magic packets.

Setup:

  1. Raspberry Pi conectado a tu red local
  2. Script en el Pi que escucha peticiones HTTP o MQTT
  3. Cuando recibe petición, ejecuta wakeonlan
  4. Accedes al Pi desde internet via VPN o SSH, le pides que despierte otros servidores

Esto es lo que hago con mi Mac mini. El Mac está siempre on, tiene Tailscale, y ejecuta scripts WoL cuando se lo pido via Telegram.

Mi configuración actual
#

En mi homelab:

Siempre encendidos:

  • Mac mini (servidor principal, 10W)
  • Synology DS1621+ (NAS, 30W)
  • Unraid (servidor IA, 150W pero con GPUs)

Encendidos bajo demanda (WoL):

  • 3x ZimaBoard (workers K3s, 10W cada uno)
  • Minisforum MS-01 (pruebas, 50W)

Ahorro estimado: 80W x 12h/día (tiempo que no los uso) = 960Wh/día = 28.8 kWh/mes = ~6€/mes a 0.20€/kWh.

No es mucho dinero, pero suma. Y ecológicamente, menos consumo siempre es mejor.

Resumen práctico
#

Configurar Wake-on-LAN:

  1. BIOS: habilitar Wake-on-LAN
  2. OS: habilitar WoL con ethtool (Linux) o propiedades de red (Windows/macOS)
  3. Anotar dirección MAC del servidor
  4. Instalar herramienta WoL (wakeonlan, app móvil, script Python)
  5. Enviar magic packet cuando necesites despertar el servidor

Una vez configurado, puedes encender servidores desde el móvil, desde scripts, desde crons, desde APIs. Es automatización nivel básico pero efectiva.

Si tienes un homelab con varias máquinas, WoL te ahorra electricidad y te da control remoto sin hardware adicional. Solo necesitas una tarjeta de red compatible (que casi todas lo son) y 10 minutos de configuración.

La próxima vez que alguien te diga “apagar servidores es molesto porque luego tienes que levantarte a encenderlos”, enseña esto. Wake-on-LAN existe desde los 90. Funciona. Úsalo.