Proxmox Wake-on-lan VM
Le Wake-on-LAN (WoL) est une fonctionnalité puissante et pratique qui permet de réveiller un ordinateur à distance, même s’il est éteint. Cette technologie, bien que discrète, offre des avantages considérables en matière de gestion de parc informatique, d’économie d’énergie et de productivité.
Précisions
Qu’est-ce que le Wake-on-LAN ?
Le WoL est un protocole réseau standard qui permet d’allumer un ordinateur à distance. Concrètement, cela signifie que vous pouvez démarrer un ordinateur depuis un autre emplacement, qu’il s’agisse du même réseau local ou d’Internet. Pour que le Wake-on-LAN fonctionne, l’ordinateur à réveiller doit répondre à certaines conditions matérielles et logicielles.
Comment fonctionne le Wake-on-LAN ?
Le principe de fonctionnement du WoL repose sur l’envoi de “paquets magiques” (magic packets) sur le réseau. Ces paquets sont envoyés en broadcast (diffusion) sur le réseau local ou à l’adresse IP spécifique de la carte réseau de l’ordinateur cible. Le paquet magique contient l’adresse MAC (Media Access Control) de la carte réseau de l’ordinateur à réveiller. Lorsque la carte réseau de cet ordinateur détecte un paquet magique correspondant à son adresse MAC, elle déclenche le processus de démarrage.
Conditions requises pour le Wake-on-LAN
Pour que le WoL fonctionne correctement, certaines conditions doivent être remplies :
- L’ordinateur à réveiller doit être connecté à une source d’alimentation, même s’il est éteint.
- La carte réseau de l’ordinateur doit prendre en charge le WoL.
- Le BIOS/UEFI de l’ordinateur doit avoir la fonction Wake-on-LAN activée.
- Le routeur et les pare-feu doivent autoriser le trafic WoL.
Applications pratiques
Gestion de parc informatique : Les administrateurs système peuvent utiliser le WoL pour économiser de l’énergie en n’allumant que les ordinateurs nécessaires, facilitant ainsi la gestion à distance des parcs informatiques.
Maintenance à distance : Le WoL est une solution idéale pour effectuer des opérations de maintenance sur des ordinateurs sans avoir besoin d’une présence physique.
Économie d’énergie : Les utilisateurs domestiques peuvent tirer parti du WoL pour allumer leur ordinateur à distance uniquement lorsque nécessaire, réduisant ainsi la consommation d’énergie.
Utilisation pratique du Wake-on-LAN
Des outils logiciels dédiés tels que des applications mobiles, des clients WoL pour PC ou des services en ligne permettent d’envoyer des paquets magiques et de réveiller des ordinateurs à distance.
L’utilisation de lignes de commande ou de scripts personnalisés est également possible pour ceux qui préfèrent une approche plus technique.
Introduction
L’ensemble de ces manipulations sont à effectuer sur l’hôte Proxmox et non sur une VM.
Je part aussi du principe que vous n’avez qu’un réseau simple ou toutes les adresses ip sont sur le même masque réseau.
A effectuer en root
Vérification de la fonctionalité
Afin de s’assurer que l’hôte Proxmox est capable d’utiliser le Wake On Lan (ou plutôt que la carte ethernet connecté au réseau l’est), il convient de tapper la commande suivante :
1
ethtool [iface] |grep "Wake-on"
[iface] est à remplacer par le nom de l’interface connectée physiquement au réseau
Ce qui doit vous restituer les informations suivantes :
1
2
Supports Wake-on: pumbg
Wake-on: g
Il y a deux élément important ici :
- Supports doit comporter la lettre g (magic packet)
- Wake-on ne doit par être sur d (disabled)
Plus d’informations sur la vidéo de Christian Lempa.
Fichiers requis
Source: le forum Proxmox
/opt/scripts/wol.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash
# 2023-11-10
re='^[0-9]+$'
port=9 # Define UDP port to listen on for the package
echo "Starting Wake on LAN script"
while true; do
echo "Listening on UDP port $port ..."
echo "\n" | nc -knl -p $port -u | # listen to udp port (default: 9) for packets, check if it is a magic packet
stdbuf -o0 xxd -c 6 -p |
stdbuf -o0 uniq |
stdbuf -o0 grep -v 'ffffffffffff' |
while read; do
macWOL="${REPLY:0:2}:${REPLY:2:2}:${REPLY:4:2}:${REPLY:6:2}:${REPLY:8:2}:${REPLY:10:2}"
if [[ "00:00:00:00:00:00" == *"$macWOL"* ]]; then
echo "script is finished and would go to endless loop. Restarting service..."
systemctl restart wol.service
fi
macWOL=$(echo "$macWOL" | tr "[:upper:]" "[:lower:]")
#VM loop
/usr/sbin/qm list | tr -s ' ' | cut -d ' ' -f 2 | while read -r id; do
if [[ $id =~ $re ]]; then
echo "check VM-ID $id for $macWOL"
/usr/sbin/qm config $id | grep ^net0 | while read -r macstr; do
macstr=$(echo "$macstr" | tr "[:upper:]" "[:lower:]")
if [[ $macstr == *"$macWOL"* ]]; then
echo "MAC $macWOL found at VMID $id. Starting VM"
/usr/sbin/qm start $id
/usr/sbin/qm resume $id
fi
done
fi
done
#container loop
/usr/sbin/pct list | tr -s ' ' | cut -d ' ' -f 1 | while read -r id; do
if [[ $id =~ $re ]]; then
echo "check VM-ID $id for $macWOL"
/usr/sbin/pct config $id | grep ^net0 | while read -r macstr; do
macstr=$(echo "$macstr" | tr "[:upper:]" "[:lower:]")
if [[ $macstr == *"$macWOL"* ]]; then
echo "MAC $macWOL found at VMID $id. Starting VM"
/usr/sbin/pct start $id
/usr/sbin/pct resume $id
fi
done
fi
done
done
# the script never reaches here.. and I do not know why,
# which is why we just restart the service to listen for
# new magic packages after the first iteration
done
echo "script has concluded and stopped.. this should never happen"
exit 1
/etc/systemd/system/wol.service
1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=WOL (Wakeup on LAN)
After=network.target
[Service]
Type=simple
Restart=always
User=root
ExecStart=/bin/bash /opt/scripts/wol.sh
[Install]
WantedBy=multi-user.target
Mise en place
Vous devez copier chaque fichier (en mode LF et non CRLF) dans leurs emplacement respectifs.
Ensuite vous définissez wol.sh comme étant éxécutable :
1
sudo chmod +x wol.sh
Puis vous activez le service systemd :
1
2
sudo systemctl enable wol.service
sudo systemctl start wol.service
Utilisation
Vous installez le paquet Debian wakeonlan :
1
sudo apt install wakeonlan
Et ensuite pour réveiller n’importe quelle VM sous Proxmox, il suffit d’envoyer un paquet magique sur l’adresse MAC de la VM :
1
wakeonlan a8:a1:59:af:03:64
Conclusion
Comme chaque VM sous Proxmox ne dispose pas d’une carte réseau physique, on utilise ici la possibilité de démarrer une VM depuis l’hôte Proxmox lorsqu’il détecte un paquet de type WOL sur le réseau dont l’adresse MAC correspond à une des VM.
En résumé, le Wake-on-LAN est une fonctionnalité ingénieuse qui offre des avantages significatifs en matière de gestion informatique, d’économie d’énergie et de facilité d’utilisation. Que ce soit pour administrer un parc informatique professionnel ou pour simplifier la gestion de votre propre ordinateur à domicile, le WoL est une technologie qui mérite d’être explorée et exploitée.