C'est une technologie développée par IBM (et AMD ?) qui permet de réveiller (entendez « allumer ») un ordinateur à travers un réseau Ethernet. Il s'agit en fait d'une simple suite d'octets qui, une fois reçu par la carte réseau, va déclencher le démarrage.
Cette suite d'octets est constituée de FF FF FF FF FF FF puis de seize répétitions de l'adresse MAC de la carte réseau destinataire et enfin d'un mot de passe de quatre ou six octets si nécessaire.
Ce message est (parfois) appelé à tort Magic packet puisqu'il ne s'agit pas d'un paquet mais simplement d'une suite d'octets ; par contre, il peut être inclut dans un paquet Ethernet, IP, UDP ou autre, il suffit que la suite soit intacte.
Ce message devant être délivré directement à la carte Ethernet, il devra obligatoirement être en broadcast (diffusion) sur le réseau de la machine à réveiller. Afin de pouvoir utiliser Wake-on-LAN à travers Internet, il est coutume d'encapsuler le message dans un paquet UDP à destination du réseau contenant la machine à réveiller. Le port généralement utilisé est le 9 (parfois le 0 ou le 7) mais ce peut être n'importe lequel.
La plupart des cartes mères au format ATX de moins de dix ans supportent le Wake-on-LAN. Afin de vous assurez que c'est le cas pour la votre, vérifiez que les DELs de votre connecteur Ethernet restent allumées même lorsque la machine est éteinte (et le réseau branché), si c'est le cas, ce doit être bon, sinon, désolé pour vous.
Vous devez configurer dans la section Power Management l'allumage à partir de la carte réseau. Dans mon cas il fallait activer l'entrée PowerOn by PCI Card dans le sous-menu Peripherals Activities, mais cela dépend du BIOS de votre carte mère.
À partir de maintenant, le Wake-on-LAN doit fonctionner après la mise sous tension de l'appareil. Mais le problème c'est qu'après un arrêt de Debian (si vous avez Ubuntu c'est pareil) cela ne fonctionne plus, il faut donc configurer le système.
Pour toutes les commandes que nous utiliserons ci-dessous vous devez être en super-utilisateur (root), pour Ubuntu, faites précéder chaque commande de sudo.
Tout d'abord, assurez-vous d'avoir l'utilitaire ethtool, si vous ne l'avez pas, installez le : aptitude install ethtool.
ethtool va vous permettre de voir et de modifier la configuration matérielle de votre interface réseau, pour voir la configuration, entrez ethtool NOM_DE_LINTERFACE dans votre shell.
En exemple, voilà le résultat que j'ai chez moi :
$ ethtool eth0 Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: MII PHYAD: 1 Transceiver: internal Auto-negotiation: on Supports Wake-on: pumbg Wake-on: d Current message level: 0x00000001 (1) Link detected: yes
Remarquez l'entrée Wake-on qui est actuellement à d comme disable, il faut la mettre à g, pour cela : ethtool -s NOM_DE_LINTERFACE wol g. Vous pouvez vérifier avec la commande précédente que c'est bon.
Le problème c'est qu'à chaque démarrage du système, l'état sera remit à d, nous allons devoir automatiser cela.
Ouvrez le fichier /etc/network/interfaces à l'aide de votre éditeur préféré (emacs, nano, vi, …) et ajoutez en dessous de la section de l'interface souhaitée la ligne : up ethtool -s $IFACE wol g. Cela aura pour effet de redéfinir l'entrée Wake-on à g à chaque démarrage du périphérique (au démarrage du système). Vous pouvez enregistrer le fichier et le fermer.
Il reste un dernier problème à régler : à chaque fois que le système s'arrête, il va désactiver les interfaces réseaux ; pour l'en empêcher : ouvrez le fichier /etc/default/halt et ajoutez la ligne NETDOWN="yes" à la fin de celui-ci.
Enregistrez, ça doit fonctionner à présent.
Afin d'allumer la machine depuis un autre poste, vous avez besoin d'un programme permettant d'envoyer le message magique sur le réseau, il existe pour Debian (Ubuntu de même) un petit script Perl appelé wakeonlan (disponible dans le paquet de même nom) qui s'utilise assez simplement : wakeonlan ADRESSE_MAC.