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 red (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…)

1sudo ethtool enp3s0

La salida del comando:

 1
 2
 3Settings for enp3s0:
 4Supported ports: [ TP MII ]
 5Supported link modes:   10baseT/Half 10baseT/Full
 6			100baseT/Half 100baseT/Full
 7			1000baseT/Full
 8Supported pause frame use: Symmetric Receive-only
 9Supports auto-negotiation: Yes
10Supported FEC modes: Not reported
11Advertised link modes:  10baseT/Half 10baseT/Full
12			100baseT/Half 100baseT/Full
13			1000baseT/Full
14Advertised pause frame use: Symmetric Receive-only
15Advertised auto-negotiation: Yes
16Advertised FEC modes: Not reported
17Link partner advertised link modes:  10baseT/Half 10baseT/Full
18				     100baseT/Half 100baseT/Full
19				     1000baseT/Full
20Link partner advertised pause frame use: No
21Link partner advertised auto-negotiation: Yes
22Link partner advertised FEC modes: Not reported
23Speed: 1000Mb/s
24Duplex: Full
25Port: MII
26PHYAD: 0
27Transceiver: internal
28Auto-negotiation: on
29Supports Wake-on: pumbg
30Wake-on: d
31Current message level: 0x00000033 (51)
32		       drv probe ifdown ifup
33Link 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

1sudo ethtool -s enp3s0 wol g

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

 1
 2Settings for enp3s0:
 3Supported ports: [ TP MII ]
 4Supported link modes:   10baseT/Half 10baseT/Full
 5		      100baseT/Half 100baseT/Full
 6		      1000baseT/Full
 7Supported pause frame use: Symmetric Receive-only
 8Supports auto-negotiation: Yes
 9Supported FEC modes: Not reported
10Advertised link modes:  10baseT/Half 10baseT/Full
11		      100baseT/Half 100baseT/Full
12		      1000baseT/Full
13Advertised pause frame use: Symmetric Receive-only
14Advertised auto-negotiation: Yes
15Advertised FEC modes: Not reported
16Link partner advertised link modes:  10baseT/Half 10baseT/Full
17				   100baseT/Half 100baseT/Full
18				   1000baseT/Full
19Link partner advertised pause frame use: No
20Link partner advertised auto-negotiation: Yes
21Link partner advertised FEC modes: Not reported
22Speed: 1000Mb/s
23Duplex: Full
24Port: MII
25PHYAD: 0
26Transceiver: internal
27Auto-negotiation: on
28Supports Wake-on: pumbg
29Wake-on: g
30Current message level: 0x00000033 (51)
31		     drv probe ifdown ifup
32Link 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

1sudo nano /etc/network/interfaces

Y añadimos las siguientes 2 lineas:

1post-up /sbin/ethtool -s enp3s0 wol g
2
3post-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

1sudo visudo

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

1
2# Allow members of group sudo to execute any command
3%sudo   ALL=(ALL:ALL) ALL
4carlos  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

10 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.

1sudo 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:

1ip link show enp3s0

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

12: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
2link/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:

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

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

1
28 * * 1,2,3,4,5 /usr/bin/sudo /usr/sbin/etherwake -i eth0 xx:xx:xx:xx:xx:xx
310 * * 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: