Encender remotamente un PC con Wake on LAN (WOL)

Encender remotamente un PC es posible mediante el uso de la funcionalidad Wake on LAN (WOL). Wake on LAN es una característica disponible en la gran mayoría de equipos, que permite mantener escuchando a la tarjeta de red, aun cuando el PC esté apagado (conectado a la corriente),  para recibir un paquete especial para activar el encendido de un computador.

Encendido remoto de un PC Wake on LAN
Encendido remoto de un PC Wake on LAN

Te invitamos a seguir leyendo en las siguientes páginas más detalle sobre este tema:


Cómo funciona Wake on LAN


El encendido remoto de un equipo (WOL) funciona gracias a una característica presente en los PCs, que permite en un modo de bajo consumo de energía, que las tarjetas ethernet se mantengan escuchando los paquetes ethernet; de este modo cuando se difunde un paquete conocido como «magic packet» en una red, y éste llega a la tarjeta de red con una dirección MAC coincidente, desde ahí se envía un comando a la BIOS para que ésta encienda el PC.

Este paquete mágico,  que generalmente se envía mediante el protocolo UDP en los puertos 7 ó 9.  Esta trama está formada por un valor de 255 (FF FF FF FF FF FF), seguida de 16 veces la dirección MAC del PC que se quiere encender.

Conociendo esta base teórica debemos realizar la siguiente  serie de pasos para habilitar esta función:


Pasos para activar Wake on LAN


1. Activar Wake on LAN en la BIOS.


Aunque para cada BIOS de un PC las opciones pueden cambiar de menús y nombres, debemos buscar una sección conocida como bajo consumo de energía o gestión avanzada de poder (Advanced Power Management), y ahí se busca la opción Wake on LAN (WOL) o Power On o su similar en español :

Ejemplo Wake On LAN BIOS
Ejemplo Wake On LAN BIOS
BIOS Advanced Power Managment
BIOS Advanced Power Managment

2. Activar Wake on LAN en la tarjeta de red.


Para hacer esto, debemos ingresar al sistema operativo de la máquina para habilitar la función WOL en la tarjeta de red, por ejemplo en Windows, lo activamos así:

Activar Wake on LAN en la tarjeta de red
Activar Wake on LAN en la tarjeta de red

3. Activar el reenvío el packete Wake on LAN desde internet al PC


Este paso es necesario si queremos en encender remotamente un PC desde internet. Para este fin entonces necesitamos hacer un Port Forwarding en el router de internet, para que los paquetes que lleguen a la dirección IP fija o al DDNS, por el puerto UDP 7 ó 9, sean reenviados a una dirección IP dentro de la red LAN del router.

Por ejemplo en un router ZTE F660, se montaría de la siguiente forma:

1. Se crea una aplicación para que use desde los puertos UDP del 7 al 9:

WOL App List
WOL App List

2. Se registra el port forwarding de la aplicación creada en el punto 1.

WOL Port Forwarding
WOL Port Forwarding

4. Usar un programa para encender remotamente un PC


Finalmente necesitamos un programa que se encargue de construir el paquete mágico y lo envíe, ya sea desde la misma red LAN, o desde internet.

Por ejemplo con el programa Wake on LAN , registramos el PC que se desea encender, la dirección IP, que puede ser la IP de la red LAN, (si estamos trabajando internamente), o la dirección IP fija de nuestra conexión a internet, (si hacemos esta función desde internet) la dirección MAC, y el puerto UDP que usaremos:

Registro de Equipo en Programa Wake On LAN
Registro de Equipo en Programa Wake On LAN

La dirección MAC de un equipo en windows la podemos encontrar mediante el comando ipconfig /all

Conocer la MAC de una tarjeta de red
Conocer la MAC de una tarjeta de red

Y finalmente podemos encender el PC desde la aplicación con la opción Despertarse:

Encender PC con Wake On LAN
Encender PC con Wake On LAN

Enviar Wake on LAN desde PHP


La función WOL la podemos construir en un programa o aplicación que estemos desarollando, donde debemos armar el magic packet a partir de la dirección MAC, y enviarlo por la red.

En este ejemplo la función ejecutaAccion($mac_hexadecimal) se encarga de construir el paquete mágico, a partir de la dirección MAC en hexadecimal:

public function ejecutaAccion($mac_hexadecimal) {

 $array_mac = explode(":", $mac_hexadecimal);

 $mac = "";
 for ($i = 0; $i < count($array_mac); $i++) {
   $mac.=chr(hexdec($array_mac[$i]));
  }

 $paquete = chr(255) . chr(255) . chr(255) . chr(255) . chr(255) . chr(255) ;

 for ($i = 0; $i < 16; $i++) {
   $paquete.=$mac;
  }

  $this->paquete = $paquete;

  $this->respuesta = $this->enviaOrden();

  return $this->respuesta;
 }

Y finalmente tenemos la función enviarOrden(), que permite enviar el paquete mágico a una dirección IP:

private function enviaOrden() {

 $fp = @fsockopen("udp://" . "192.168.50.255", 9, $errno, $errstr, 3);

 if (!$fp) {
    $this->$msg = "Error al conectarse con " . $this->direccion_ip . "<br>";
    $res = 0;
  } else {
   fwrite($fp, $this->paquete);
   $res = 1;
   fclose($fp);
  }
  return $res;
 }

De este modo, en una aplicación PHP sencilla podemos hacer el encendido remoto de un PC.

La función Wake On LAN es muy útil para funciones de soporte remoto, para encendido en masa de muchos equipos, por ejemplo una sala de equipos, o para por ejemplo encender el PC de nuestra casa cuando nos encontremos en la oficina.

Este artículo hace parte del sistema de divulgación de conocimiento de ITSoftware SAS.

Si te gustó, por favor no olvides compartirlo en las redes sociales. 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.