[WOL] Problemas de Wake On Lan

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

  1. Como root instalamos previamente en esos equipos el paquete ethtool si aún no lo tuviésemos.
    # aptitude install ethtool
    
  2. Con la orden
    $ ip a
    

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

  3. Ejecutamos
    # ethtool -s enp3s0 wol g
    
  4. Apagamos el ordenador, por ejemplo con
    # poweroff
    
  5. Mandamos un paquete WOL y comprobamos que se enciende.

Automatización

  • 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 nuestro Debian 12.
  1. Creo y edito el script, por ejemplo en el directorio del root:
    wol.sh
    #!/bin/bash
    ethtool -s enp3s0 wol g

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

    # chmod a+x wol.sh
    
  2. Creo y edito el fichero de servicio, por ejemplo en el mismo directorio anterior:
    wol.service
    [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
  3. 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
arregla_wol.sh
#!/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
  • doc/tec/net/wol/fallo/inicio.txt
  • Última modificación: 2023/08/25 07:04
  • por 127.0.0.1