Introduction
Le Wake-on-LAN (WOL) est une fonctionnalité permettant d’allumer un appareil à distance en envoyant un « Magic Packet » à son adresse MAC. Si vous utilisez des conteneurs LXC sous Proxmox, vous aurez remarqué qu’ils ne prennent pas en charge le WOL nativement. Cependant, il existe une solution pour contourner cette limitation et réveiller un conteneur LXC via un script.
Dans cet article, nous allons voir comment configurer un conteneur LXC pour qu’il puisse être réveillé via Wake-on-LAN.
1. Vérifier le réseau et l’interface du conteneur
Tout d’abord, nous devons identifier l’interface réseau utilisée par le conteneur LXC. Sur votre serveur Proxmox, exécutez la commande suivante :
ip a
Notez l’interface associée au réseau de votre conteneur (généralement vmbr0
).
2. Assigner une adresse MAC statique au conteneur
Étant donné que le WOL fonctionne avec des paquets envoyés à une adresse MAC spécifique, nous devons nous assurer que notre conteneur a une adresse MAC fixe.
- Ouvrez la configuration du conteneur LXC :
nano /etc/pve/lxc/<ID>.conf
(Remplacez
<ID> par l’identifiant du conteneur.)
- Ajoutez ou modifiez la ligne du réseau pour inclure une adresse MAC fixe :
net0: bridge=vmbr0,hwaddr=XX:XX:XX:XX:XX:XX,name=eth0,type=veth
(Remplacez
XX:XX:XX:XX:XX:XX par une adresse MAC unique.)
- Redémarrez le conteneur pour appliquer la modification :
pct stop <ID> && pct start <ID>
3. Mettre en place un script de détection du WOL
Proxmox ne réveille pas automatiquement un conteneur à la réception d’un paquet WOL. Nous allons donc créer un script qui surveille les paquets WOL et démarre le conteneur correspondant.
- Créez un dossier pour les scripts :
mkdir -p /root/scripts cd /root/scripts
- Créez le script
wol_lxc.sh
:nano wol_lxc.sh
- Copiez-collez le script suivant :
#!/bin/bash INTERFACE="vmbr0" SLEEP_TIME=5 while true; do sleep $SLEEP_TIME wake_mac=$(tcpdump -c 1 -UlnXi $INTERFACE ether proto 0x0842 or udp port 9 2>/dev/null |\ sed -nE 's/^.*20: (ffff|.... ....) (..)(..) (..)(..) (..)(..).*$/\2:\3:\4:\5:\6:\7/p') if [ -n "$wake_mac" ]; then echo "Magic Packet reçu pour : $wake_mac" matches=($(grep -il $wake_mac /etc/pve/lxc/*)) if [[ ${#matches[@]} -eq 1 ]]; then vm_file=$(basename ${matches[0]}) vm_id=${vm_file%.*} status=$(pct status $vm_id -verbose | grep status | awk '{print $2}') if [[ "$status" == "stopped" ]]; then echo "Démarrage du conteneur $vm_id..." pct start $vm_id else echo "Le conteneur $vm_id est déjà en cours d'exécution." fi else echo "Aucun conteneur correspondant trouvé." fi fi done
- Rendez le script exécutable :
chmod +x wol_lxc.sh
4. Automatiser le script avec systemd
Pour que le script s’exécute automatiquement au démarrage du serveur :
- Créez un service systemd :
nano /etc/systemd/system/lxc-wol.service
- Ajoutez le contenu suivant :
[Unit] Description=Wake-on-LAN pour LXC sous Proxmox After=network.target [Service] Type=simple Restart=always User=root ExecStart=/root/scripts/wol_lxc.sh [Install] WantedBy=multi-user.target
- Activez et démarrez le service :
systemctl enable lxc-wol systemctl start lxc-wol
5. Tester le Wake-on-LAN
Depuis un autre appareil, envoyez un paquet WOL avec wakeonlan :
wakeonlan -i <IP_PROXMOX> XX:XX:XX:XX:XX:XX
(Remplacez XX:XX:XX:XX:XX:XX par l’adresse MAC du conteneur.)
Vous pouvez vérifier si le conteneur s’est bien allumé en consultant les logs :
journalctl -fu lxc-wol
Conclusion
Avec cette configuration, vous pouvez désormais réveiller vos conteneurs LXC à distance grâce à Wake-on-LAN. Ce script surveille les paquets WOL et démarre automatiquement le conteneur correspondant. C’est une excellente solution pour économiser des ressources en n’exécutant les conteneurs que lorsqu’ils sont nécessaires.
Si vous avez des questions ou des suggestions, n’hésitez pas à laisser un commentaire ! 🚀