Wake On Lan, o cómo encender ordenadores de forma remota

En mi artículo Backup doméstico seguro con Linux, cifrado y ZFS (IV): Equipo nuevo, publicado a finales de 2014, comento de pasada que puedo encender un servidor mediante la tecnología WakeOnLan, pero no he explicado los detalles en casi tres años.

WakeOnLan es una funcionalidad disponible en la mayoría de los ordenadores fabricados en los últimos veinte años. Si se activa en el firmware del ordenador y este está conectado a la red con un cable ethernet, el puerto de red estará activo aunque el ordenador esté apagado (siempre que esté enchufado a la electricidad, claro).

Con WakeOnLan, el puerto ethernet permanecerá a la escucha esperando recibir un paquete de red con un formato especial: Es un paquete broadcast en cuyo interior, en cualquier parte, aparecen seis bytes con el valor 255, seguidos por dieciseis repeticiones de la dirección ethernet de la máquina que queremos despertar. Vale cualquier tipo de paquete ethernet siempre que se envíe a la dirección broadcast de la red.

Cabe señalar que el paquete WakeOnLan no se puede transmitir fuera de la red ethernet local [1], así que no se puede enviar por internet. Es necesario tener acceso a otra máquina en la misma red y pedirle que envíe esa orden. Algunos routers disponen de esta funcionalidad. En mi caso, uso una Raspberry PI dedicada a otras tareas.

[1]

La red WIFI se puede considerar una extensión de la red ethernet local. De cara a los ordenadores finales, se trata de una red plana y unificada.

Por tanto, se podría enviar un paquete WakeOnLan a un ordenador conectado con cable ethernet desde otra máquina conectada por WIFI.

Es muy fácil generar un paquete ethernet con esas características, pero -en general- no tendremos que hacerlo a mano. Muchos Sistemas Operativos incluyen comandos para tal fin. Por ejemplo, el comando wakeonlan.

Si quiero despertar la máquina cuya dirección ethernet es 64:51:06:7f:11:9a, puedo hacer algo como:

$ for i in `seq 1 50`; do wakeonlan 64:51:06:7f:11:9a; done

Este pequeño código envía 50 paquetes WakeOnLan por si se pierde alguno. Enviar paquetes WakeOnLan a una máquina ya encendida no tiene ningún efecto, así que no importa enviar repetidos para asegurarnos de que entra alguno.

Naturalmente, mantener el puerto ethernet activo supone un pequeño consumo de energía. En mi HP ProLiant MicroServer Gen8 G1610T 1P 2GB-U B120i NHP SATA Server, mantener funcionando la fuente de alimentación, la ethernet y el iLO consume 5.4 Watios. Puedes ver más detalles en Consumo eléctrico del HP ProLiant MicroServer.

Algunos equipos, particularmente portátiles, implementan una funcionalidad similar a WakeOnLan que permite despertar ordenadores a través de WIFI en vez de ethernet. Se llama Wake on Wireless LAN (WoWLAN).

Actualización 20170922: El último paso a concretar es Cómo obtener la dirección IP de una máquina si conoces su dirección ethernet.