Aller au contenu

Activer le Wake-on-LAN (WOL) sur un conteneur LXC sous Proxmox

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.

  1. Ouvrez la configuration du conteneur LXC :
    nano /etc/pve/lxc/<ID>.conf

    (Remplacez <ID> par l’identifiant du conteneur.)

  2. 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.)

  3. 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.

  1. Créez un dossier pour les scripts :
    mkdir -p /root/scripts
    cd /root/scripts
  2. Créez le script wol_lxc.sh :
    nano wol_lxc.sh
  3. 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
  4. 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 :

  1. Créez un service systemd :
    nano /etc/systemd/system/lxc-wol.service
  2. 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
  3. 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 ! 🚀

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *