Wake On Lan: Enciende el ordenador a travós de la red
2020-03-09
Índice
- Habilitando WOL en la placa base
- Configurando la tarjeta de red (NIC)
- Automatizando el apagado y encendido de la máquina
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…)
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… 🐧