En ocasiones puede ser necesario encender una máquina física de manera remota. Esto es posible gracias al estándar Wake-on-LAN (WoL), soportado por la mayoría de las interfaces Ethernet, el cual permite prender que una computadora sea encendida o "despertada" mediante un mensaje de red especial. Este artículo demuestra cómo encender una computadora en la misma red local desde un sistema GNU/Linux utilizando el utilitario wakeonlan.



Para que sea posible que una computadora sea encendida de forma remota, esta característica debe estar habilitada en la BIOS del sistema, lo cual difiere con cada fabricante de hardware. Suele aparecer en los menúes de diferentes BIOS como "Wake On Lan", "(WOL) Wake-On-LAN", "Wake Up On LAN", "Wake Up On LAN/Ring", "PME Event Wake Up", "Power On By PCI/PICE Devices", "Wake Up Event", y muchos otros. En caso de dude se debe consultar el manual de la motherboard del sistema.

Wake-on-LAN es implementado utilizando trama de red especialmente diseñada llamada "magic packet" que se envía a todas las computadoras conectadas a una red (broadcast) entre las que se encuentra la máquina a ser encendida. El paquete mágico contiene la dirección de hardware (MAC) de la computadora a despertar. Por ende, queda claro que además de necesitar conocer la dirección MAC de la interfaz de red de la computadora a encender, es necesario hacerlo desde una computadora conectada a la misma red.

En los sistemas GNU/Linux existen disponibles dos utilitarios para encender sistemas en la misma red mediante el estándar WoL: etherwake y wakeonlan:

  • etherwake - A tool to send a Wake-On-LAN "Magic Packet"
  • wakeonlan - Perl script to wake up computers

En los sistemas basados en Debian, es posible instalarlos fácilmente:

root@devuan:~# apt-get install etherwake wakeonlan

Ejemplo de uso

Veamos un ejemplo utilizando wakeonlan.

Deseo encender de forma remota el sistema "hal9000" corriendo GNU/Linux, el cual tiene Wake On LAN habilitado a nivel BIOS y la MAC de la interfaz de red conectada a la red es "c1:e5:6e:7b:63:a0". Si no se encuentra apagado, el primer paso consiste en apagarlo:

root@hal9000:~# poweroff

Desde el sistema "vaio" se hace ping para comprobar que ya no responde (se ha apagado):

emi@vaio:~$ ping -c 1 192.168.139.205
PING 192.168.139.205 (192.168.139.205) 56(84) bytes of data.

--- 192.168.139.205 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

Para encender el sistema remoto, basta con conocer la dirección MAC de su interfaz de red y pasarlo como parámetro:

root@devuan:~# wakeonlan 'c1:e5:6e:7b:63:a0'
Sending magic packet to 255.255.255.255:9 with c1:e5:6e:7b:63:a0

Luego de enviar el paquete "mágico", hacer ping hasta que responda:

root@devuan:~# ping 192.168.139.205
PING 192.168.139.205 (192.168.139.205) 56(84) bytes of data.
From 200.49.233.246 icmp_seq=1 Destination Host Unreachable
From 200.49.233.246 icmp_seq=2 Destination Host Unreachable
From 200.49.233.246 icmp_seq=3 Destination Host Unreachable
From 200.49.233.246 icmp_seq=4 Destination Host Unreachable
From 200.49.233.246 icmp_seq=5 Destination Host Unreachable
From 200.49.233.246 icmp_seq=6 Destination Host Unreachable
From 200.49.233.246 icmp_seq=7 Destination Host Unreachable
From 200.49.233.246 icmp_seq=8 Destination Host Unreachable
From 200.49.233.246 icmp_seq=9 Destination Host Unreachable

Luego de unos segundos...

64 bytes from 192.168.139.205: icmp_seq=1 ttl=64 time=0.500 ms
64 bytes from 192.168.139.205: icmp_seq=2 ttl=64 time=0.334 ms
64 bytes from 192.168.139.205: icmp_seq=3 ttl=64 time=0.338 ms
64 bytes from 192.168.139.205: icmp_seq=4 ttl=64 time=0.305 ms

La computadora se ha encendido con éxito.

Cómo encender un sistema en otra red

La limitación clara es que sólo es posible encender una computadora desde otra computadora en la misma red local. Con lo cual no resulta de gran ayuda si no estamos ubicados físicamente en la misma red (presumiblemente en el mismo edificio). Y si estuviéramos en la misma red, probablemente no sea necesario utilizar WoL sino que tal vez podamos encenderla directamente presionando el botón de "power". Mi punto es que si tenemos acceso físico a un sistema en la misma red local, probablemente tengamos acceso físico también a la computadora que deseamos encender. Muchas veces una misma red local no abarca más de un edificio físico.

Entonces pareciera que el estándar no es de gran utilidad. Sin embargo las cosas cambian cuando, a pesar de no tener acceso físico a una computadora en la misma red local, tenemos acceso remoto a la red a través de una VPN. En este escenario sólo necesitamos acceso remoto a una computadora en la misma red para poder encender la máquina en cuestión.

Por ejemplo, así es como enciendo mi estación de trabajo de la oficina desde mi casa:

La computadora de la izquierda es mi computadora personal y la de la derecha mi estación de trabajo en la red de la oficina (la cual se encuentra apagada). Mediante una VPN tengo acceso a la red de la oficina:

Sin embargo, el acceso a través de la VPN no es directo a la red de la oficina. Por directo me refiero a que el servidor de VPN no me da una IP en la red de la oficina (10.9.0.0/24), sino que el acceso es a través de una red intermedia (10.8.0.0/24). El acceso es a través de una ruta que otorga el servidor de VPN al establecer la conexión.

Pero, si tenemos una ruta a la red, y tenemos acceso a cualquier sistema (encendido) en la misma red, podemos enviar el magic packet desde la misma. Tal como se muestra en la siguiente figura:


Tal vez pueda interesarte


Compartí este artículo