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

2020-03-09

Índice

  1. Habilitando WOL en la placa base
  2. Configurando la tarjeta de red (NIC)
    1. Editando /etc/interfaces
  3. Automatizando el apagado y encendido de la máquina
    1. Apagado
    2. Encendido

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,

img

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

img

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

img

Por ultimo salva los cambios y reinicia

img

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

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

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… 🐧


Ingrese la dirección de su instancia