(modifié le 13 mai 2024 à 0:32)

Si votre routeur tourne sous Tomato vous pouvez nativement allumer une machine à distance depuis l'interface d'administration (menu Tools > Wake On Lan). Je vous partageais d'ailleurs une astuce en 2013 (oui!) pour que vos machines soient persistantes dans cette liste WOL.

Si vous préférez utiliser SSH pour réveiller une machine avec Wake On LAN (WOL) c'est aussi possible, voyons comment.

Un peu de bash

Lorsque je ne suis pas chez moi c'est toujours en SSH avec Bitvise SSH Client que je me connecte à mon routeur. Je fais transiter ensuite différents ports dans le tunnel SSH pour joindre d'autres machines.

La commande native "ether-wake" permet de réveiller un périphérique (ordinateur fixe, laptop... peu importe).

Voici ce que j'utilise pour cela :

#!/bin/sh
/usr/sbin/ether-wake A1:B2:C3:D4:E5:F6

A1:B2:C3:D4:E5:F6 à remplacer par l'adresse MAC de la machine à réveiller

Je stocke ce script à l'emplacement suivant :

/opt/sbin/wol

Comme ce chemin est dans la variable $PATH de Tomato je n'ai qu'à saisir "wol" dans mon terminal SSH et paf ça se lance.

Pour que ça fonctionne : la persistance

Le répertoire /opt/sbin n'est pas persistant, donc à chaque reboot il faudra recommencer.

Pour éviter cette problématique, plusieurs options :

  • utiliser un script de démarrage (Administration > Scripts > Init) qui va créer le script bash et son contenu
  • stocker le script en partition /jffs (comment l'activer)
  • stocker le script sur une clé USB et le copier au démarrage grâce un script (tutoriel)
  • stocker le script sur une clé USB montée sur /opt/sbin avec Entware installé (opkg)

C'est cette dernière méthode que j'utilise et que je vous conseille.

J'ai donc une clé USB connectée sur laquelle j'ai crée 2 partitions :

  • une en FAT32 pour faciliter la copie de données avec Windows si besoin,
  • une en EXT4 sur laquelle j'ai installé Entware

Voyons le résultat des partitions (cfdisk /dev/sda) :

Les 2 partitions de ma clé USB sont montées dans le chemin par défaut /tmp/mnt :

# df -hT | grep CLE | awk '{print $1, $2, $7}'
/dev/sda2 ext4 /tmp/mnt/CLEUSB_OPT
/dev/sda1 vfat /tmp/mnt/CLEUSB

Mémorisez le point de montage pour l'étape suivante. La partition VFAT (ou FAT32) ne nous intéresse pas ici.

Activer le montage automatique +script

Je m'assure que l'option pour monter les périphériques USB au boot soit cochée (USB and NAS > Automount).

Enfin j'ajoute un script dans la section "run after mounting" pour faire pointer le répertoire /opt/sbin vers celui de la clé USB (voir doc)  :

mount -o bind /tmp/mnt/CLEUSB_OPT /opt

Et voilà ! Maintenant tout sera automatique quand votre routeur démarre, ou redémarre.

Vérifiez quand même que tout fonctionne bien en provoquant un redémarrage de votre routeur (saisir "reboot" en SSH).

Conclusion

Rien de compliqué aujourd'hui, c'est plus du partage pour piquer votre curiosité qu'une opération très technique. Vous pouvez maintenant stocker plein de scripts et les appeler directement par leur nom sans préciser le chemin.

⚠️ Vérifiez toujours si le nom que vous choisissez n'existe pas déjà pour une commande/binaire système. Auquel cas vous pourriez casser des choses... c'est aussi pour cette raison que je préfère utiliser une clé USB plutôt que la partition JFFS. En effet, il suffit de retirer la clé pour avoir un démarrage sans les points de montages.

Libre à faire de faire plusieurs scripts pour réveiller telle ou telle machine, ou bien menu en bash, ou encore des arguments de sélection.

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter