Wake On Lan: Enciende el ordenador a través de la red

6 minutos de lectura

Tengo una Raspberry Pi que permanece encendida 24/7 ya que necesito que ciertos servicios estén disponibles siempre, en cambio utilizo un mini pc como servidor multimedia, el cual no es necesario que este siempre encendido y mucho menos por las noches, y aprovechando que su placa base soporta Wake On Lan (WOL), es decir, despertarse mediante el envío de paquetes a través de red, vamos a aprovechar la Raspberry Pi para programar su apagado y encendido a través de WOL.

Habilitando WOL en la placa base

Para saber si tu placa base es compatible con WOL deberás de remitirte a la especificaciones técnicos del fabricante, en mi caso es una placa base de la marca Asrock J4105-ITX que si tiene esa función.

Describo los pasos realizados para mi placa, para el resto de placas debería de ser un proceso parecido

En la BIOS de la placa base, asegúrate de que tienes activa la tarjeta integrada, Advanced -> Chipset Configuration,

La opción On Board Land este activada, también he activado la opción para que se inicie el ordenador cuando se restablezca la electricidad en caso de que se hubiese apagado

Lo mas importante, en el pestaña Boot la opción Boot From Onboard LAN tiene que estar habilitada (en la imagen está deshabilitada)

Por ultimo salva los cambios y reinicia

Configurando la tarjeta de rec (NIC)

Lo primero que debemos hacer es comprobar si tenemos activado WOL en la tarjeta de red, para ello ejecutamos el siguiente comando, enp3s0 es el nombre de mi tarjeta de red, sustitúyela por el de tu equipo (eth0, etc…)

sudo ethtool enp3s0

La salida del comando

Settings for enp3s0:
      Supported ports: [ TP MII ]
      Supported link modes:   10baseT/Half 10baseT/Full
  	                      100baseT/Half 100baseT/Full
  	                      1000baseT/Full
      Supported pause frame use: Symmetric Receive-only
      Supports auto-negotiation: Yes
      Supported FEC modes: Not reported
      Advertised link modes:  10baseT/Half 10baseT/Full
  	                      100baseT/Half 100baseT/Full
  	                      1000baseT/Full
      Advertised pause frame use: Symmetric Receive-only
      Advertised auto-negotiation: Yes
      Advertised FEC modes: Not reported
      Link partner advertised link modes:  10baseT/Half 10baseT/Full
  	                                   100baseT/Half 100baseT/Full
  	                                   1000baseT/Full
      Link partner advertised pause frame use: No
      Link partner advertised auto-negotiation: Yes
      Link partner advertised FEC modes: Not reported
      Speed: 1000Mb/s
      Duplex: Full
      Port: MII
      PHYAD: 0
      Transceiver: internal
      Auto-negotiation: on
      Supports Wake-on: pumbg
      Wake-on: d
      Current message level: 0x00000033 (51)
  			     drv probe ifdown ifup
      Link detected: yes

Hay que fijarse al final en las dos opciones supports Wake-on: pumbg y Wake-on: d, nos dice que la tarjeta tiene soporte WOL (b o g) pero está desactivado d. Para activarlo bastaría con ejecutar

sudo ethtool -s enp3s0 wol g

Si volvemos a ejecutar el comando sudo ethtool enp3s0 vemos que hemos activado WOL, Wake-on: g

Settings for enp3s0:
      Supported ports: [ TP MII ]
      Supported link modes:   10baseT/Half 10baseT/Full
  	                      100baseT/Half 100baseT/Full
  	                      1000baseT/Full
      Supported pause frame use: Symmetric Receive-only
      Supports auto-negotiation: Yes
      Supported FEC modes: Not reported
      Advertised link modes:  10baseT/Half 10baseT/Full
  	                      100baseT/Half 100baseT/Full
  	                      1000baseT/Full
      Advertised pause frame use: Symmetric Receive-only
      Advertised auto-negotiation: Yes
      Advertised FEC modes: Not reported
      Link partner advertised link modes:  10baseT/Half 10baseT/Full
  	                                   100baseT/Half 100baseT/Full
  	                                   1000baseT/Full
      Link partner advertised pause frame use: No
      Link partner advertised auto-negotiation: Yes
      Link partner advertised FEC modes: Not reported
      Speed: 1000Mb/s
      Duplex: Full
      Port: MII
      PHYAD: 0
      Transceiver: internal
      Auto-negotiation: on
      Supports Wake-on: pumbg
      Wake-on: g
      Current message level: 0x00000033 (51)
  			     drv probe ifdown ifup
      Link detected: yes

Editando /etc/interfaces

Para asegurarnos que la tarjeta de red se inicia y se apaga con WOL activado vamos a editar el fichero /etc/interfaces

sudo nano /etc/network/interfaces

Y añadimos las siguientes 2 lineas:

post-up /sbin/ethtool -s enp3s0 wol g

post-down /sbin/ethtool -s enp3s0 wol g

Cambia enp3s0 por el nombre de tu tarjeta

Automatizando el apagado y encendido de la máquina

Bueno ahora que ya tenemos habilitado WOL en nuestra máquina, vamos con la parte más divertida, hacer que se apague a una hora determinado y que más tarde, a la hora programada y desde otro ordenador, en mi caso una Raspberry Pi, encenderlo.

Apagado

Para automatizar el proceso vamos a utilizar cron y el comando shutdown, este comando sólo se puede ejecutar mediante la orden sudo, así que para que no pida la contraseña al ejecutarlo, debemos de editar el fichero sudoers con el comando sudo visudo que utilice sudo shurdown

sudo visudo

Y añadimos la siguiente linea, por ejemplo yo he configurado el comando para el usuario carlos


# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
carlos  ALL=(ALL) NOPASSWD: /sbin/shutdown

Una vez que le hemos editado el fichero sudoers, vamos a programar la hora de apagado del equipo mediante cron, en el ejemplo lo apago todos los días a las 01 horas

0 1 * * * /usr/bin/sudo /sbin/shutdown

Encendido

En el ordenador que vamos a utilizar para despertar el ordenador debemos de instalar el paquete etherwake o wol, en la Raspebrry he instalado etherwake ya que wol no está disponible.

sudo apt install etherwake

También vamos a necesitar la dirección MAC de la tarjeta de red del equipo que vamos a despertar, así que en ese equipo ejecutamos:

ip link show enp3s0

Busca la dirección MAC correspondiente a tu tarjeta de red, la mía es llamada enp3s0,

2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

Donde xx:xx:xx:xx:xx:xx seria la dirección MAC

Al igual que ocurría con el comando shutdown, etherwake necesita privilegios de administrador para poder ser ejecutado, por lo que hay que editar el fichero sudoers con el comando sudo visudo y darle permiso al usuario que quieras que lo utilice sin que pida contraseña con sudo:


# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
carlos  ALL=(ALL) NOPASSWD: /usr/sbin/etherwake

Para terminar, programamos la hora a la que queremos que se encienda el ordenador mediante cron


8 * * 1,2,3,4,5 /usr/bin/sudo /usr/sbin/etherwake -i eth0 xx:xx:xx:xx:xx:xx
10 * * 6,7 /usr/bin/sudo /usr/sbin/etherwake -i eth0 xx:xx:xx:xx:xx:xx

La orden es muy sencilla, etherwake va a utilizar la interfaz eth0 de la Raspberry pi para hacer WOL a la dirección MAC xx:xx:xx:xx:xx:xx del ordenador que esta apagado.

Observa que el nombre de la tarjeta de red en la Raspberry pi es eth0

Espero que te haya gustado, pasa un buen día… :penguin: