[remoto] WOL: Contratiempos

Debian 11 / 12

Para asegurar que Wake-on-LAN (WoL) permanezca activo en Debian tras reiniciar el sistema, debemos configurar una persistencia que se ejecute durante el arranque, ya que por defecto muchos controladores de red desactivan esta función al iniciar.

Síntoma

Partimos de que la configuración para WOL en la BIOS es correcta pero al enviar un paquete mágico de WOL a ese equipo no se enciende, tras haberlo apagado desde el sistema operativo.

En algunas placas base es fácil detectar si la tarjeta tiene alimentación con el equipo apagado porque se ilumina alguno de los LEDs adjuntos al conector RJ45 del adaptador de red. Otras placas base pueden no indicarlo así pero estar igualmente alimentado el adaptador de red.

En algunos ordenadores del aula, por ejemplo los de placa base ASUS, al apagarlos desde el sistema operativo también se apaga la alimentación de su tarjeta de red. Esto no debería ser así, pues debería quedar con alimentación para poder encender el equipo nuevamente mediante WOL.

Solución manual

Como root instalamos previamente en esos equipos el paquete ethtool si aún no lo tuviésemos.

# aptitude install ethtool

Con la orden

$ ip a

conocemos el nombre que asigna el sistema operativo a nuestra tarjeta de red, por ejemplo enp3s0.

Ejecutamos

# ethtool -s enp3s0 wol g

Apagamos el ordenador, por ejemplo con

# poweroff

Mandamos un paquete WOL y comprobamos que se enciende.

Solución automatizada

Una vez comprobado que funciona, se puede insertar esta orden en un script que se ejecute automáticamente al iniciar el equipo para que WOL funcione siempre. En este caso usaré el método que funciona dentro del contexto de systemd, por lo que solamente será válido en el caso de que nuestra distribución haga uso de systemd como sistema de inicio predeterminado; tal es el caso de Debian 12.

Creo y edito el script, por ejemplo en el directorio del root:

#!/bin/bash
ethtool -s enp3s0 wol g

A este fichero hay que darle permisos de ejecución…

# chmod a+x wol.sh

Creo y edito el fichero de servicio, por ejemplo en el mismo directorio anterior:

[Unit]
Description=Corrige WOL en ASUS
After=network.target network-online.target
Wants=network-online.target
[Service]
ExecStart=/root/wol.sh
[Install]
WantedBy=multi-user.target

El último paso es habilitar el servicio para que se inicie con cada arranque del sistema:

# systemctl enable /root/wol.service

También se puede iniciar un servicio de forma manual en cualquier momento con:

# systemctl start wol.service

Además, en cualquier momento se puede comprobar que el servicio está cargado en el equipo con:

# systemctl status wol.service

Script de prueba con todo el proceso

Para ejecutar desde el home de root. Habrá que controlar que la identificación de la tarjeta de red sea la correcta: En este script se supone que es enp3s0 debiendo cambiar ese nombre según lo que nos informe la orden

$ ip a

#!/bin/bash
aptitude install ethtool
echo "#!/bin/bash" > wol.sh
echo "ethtool -s enp3s0 wol g" >> wol.sh
chmod a+x wol.sh
echo "[Unit]" > wol.service
echo "Description=Corrige WOL" >> wol.service
echo "After=network.target network-online.target" >> wol.service
echo "Wants=network-online.target" >> wol.service
echo "" >> wol.service
echo "[Service]" >> wol.service
echo "ExecStart=/root/wol.sh" >> wol.service
echo "" >> wol.service
echo "[Install]" >> wol.service
echo "WantedBy=multi-user.target" >> wol.service
systemctl enable /root/wol.service
systemctl start wol.service
systemctl status wol.service

Con NetworkManager (comprobar)

Si utilizamos NetworkManager para gestionar las conexiones de red, podemos hacerlo persistente modificando la conexión directamente:

# nmcli c modify "nombre_de_conexion" 802-3-ethernet.wake-on-lan magic

y luego, reiniciamos la conexión con

# nmcli c up "nombre_de_conexion"

Apoyo

ACPI: el maldito y querido estándar de gestión y ahorro de energía Wake on Lan doesn't work after Linux shutdown Wake On LAN does not work after normal shutdown under Linux - Servers Scripting en Linux (V): Bash. Ejecutar un Script en el Inicio o Apagado