pense-bête de bruno sanchiz

Accueil > Linux > démarrage à distance

démarrage à distance

Publié le 23 octobre 2007, dernière mise-à-jour le 3 juin 2024, > 24 visites, >> 46740 visites totales.

Depuis des dizaines d’années certaines cartes mères et carte réseaux permettent d’allumer un ordinateur à distance. Pour cela il suffit d’un côté de préparer l’ordinateur et de l’autre d’envoyer la commande d’allumage.

résumé de la technique : rajouter ethtool -s eth0 wol g dans le fichier /etc/rc.local avant la ligne exit 0

démarrer à distance un ordinateur éteint

sur l’ordinateur que l’on veut allumer, taper dans un terminal

sudo ethtool eth0 |grep Wake qui va afficher des lignes ( il faut peut être mettre eth1 ou eth2 ou enp3s0 à la place de eth0 : voir ifconfig -a ou ip a ou ipconfig )
On va obtenir quelquechose comme

Supports Wake-on : pumbg ( ou g )
Wake-on : d

le Wake-on : d montre que le wakeonlan n’est pas activé, activer alors avec
sudo ethtool -s eth0 wol g.
Alors
sudo ethtool eth0 |grep Wake
montre l’activation

Supports Wake-on : pumbg ( ou g )
Wake-on : g

Ce code doit être exécuté à chaque démarrage donc, rajouter le code ethtool -s eth0 wol g dans le fichier /etc/rc.local avant la ligne exit 0

Il faut aussi s’assurer que le bios autorise le démarrage wake on lan.

depuis bullseye , deb11 , /etc/rc.local n’existe plus :

le créer avec

 #!/bin/sh -e
ethtool -s eth0 wol g
exit 0

puis chmod a+x /etc/rc.local ; systemctl daemon-reload && systemctl start rc-local && systemctl status rc-local

Recherche de la mac adresse :

ip a  |grep "link/ether" |sed 's#.*link/ether\ \([0-9a-f\:]*\)\ .*#\1#'
va donner la mac adresse du type 01:02:03:04:05:06

Finalement,

  • wakeonlan 01:02:03:04:05:06
  • wakeonlan -i 192.168.1.255 01:02:03:04:05:06

    script php de wakeonlan non essayé,

    <?php
        # replace with your target MAC address
        $mac = 'aa:bb:cc:11:22:33';
        exec("wakeonlan $mac");
    ?>
    

script php de wakeonlan non essayé, mais qui semble utiliser un ordinateur distant à l’adresse my.dns.domain.com :

<?php
         # Wake on LAN - (c) HotKey@spr.at, upgraded by Murzik
         # Modified by Allan Barizo http://www.hackernotcracker.com

         flush();
         
         function WakeOnLan($addr, $mac,$socket_number) {

           $addr_byte = explode(':', $mac);
           $hw_addr = '';
           for ($a=0; $a <6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a]));
           $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255);

          for ($a = 1; $a <= 16; $a++) $msg .= $hw_addr;
          // send it to the broadcast address using UDP
          // SQL_BROADCAST option isn't help!!
          $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

          if ($s == false) {
            echo "Error creating socket!\n";
            echo "Error code is '".socket_last_error($s)."' - " . socket_strerror(socket_last_error($s));
            return FALSE;
            }
          else {
            // setting a broadcast option to socket:
            $opt_ret = socket_set_option($s, 1, 6, TRUE);

            if($opt_ret <0) {
              echo "setsockopt() failed, error: " . strerror($opt_ret) . "\n";
              return FALSE;
              }

            if(socket_sendto($s, $msg, strlen($msg), 0, $addr, $socket_number)) {
              echo "Magic Packet sent successfully!";
              socket_close($s);
              return TRUE;
              }
            else {
              echo "Magic packet failed!";
              return FALSE;
              }
           
            }
          }

        // Port number where the computer is listening. Usually, any number between 1-50000 will do. Normally people choose 7 or 9.
        $socket_number = "9";
        // MAC Address of the listening computer's network device
        $mac_addy = "XX:XX:XX:XX:XX:XX";
        // IP address of the listening computer. Input the domain name if you are using a hostname (like when under Dynamic DNS/IP)
        $ip_addy = gethostbyname("my.dns.domain.com");
        
        WakeOnLan($ip_addy, $mac_addy,$socket_number);
      ?>

options de wakeonlan

ethtool -s eth0 wol V
(En remplaçant V par une lettre ci-dessous)

            p  Réveil dès moindre activité physique
            u  Réveil dès réception d'un message unicast
            m  Réveil dès réception d'un message multicast
            b  Réveil dès réception d'un message broadcast
            a  Réveil dès réception d'un ARP
            g  Réveil dès réception d'un MagicPacket(tm)
            s  Réveil dès réception d'un message SecureOn(tm) (mot de passe) pour MagicPacket(tm)
            d  Désactiver

en cas de problème

  • parfois il faut inverser le code de la mac adresse : 00:1a:9f:81:ce:a4 ⇒ a4:ce:81:9f:1a:00.
  • pour être sur que le packet est reçu : sudo tcpdump -i eth0 port 9 pendant que le wakeonlan est activé on reçoit une réponse du type 14:26:24.314463 IP 192.168.1.10.59749 > 255.255.255.255.discard: UDP, length 102

    DOCS :
    https://doc.ubuntu-fr.org/wakeonlan


    ARCHIVES

    http://doc.ubuntu-fr.org/wakeonlan

ifconfig -a eth0 |cut -d" " -f11 |sed -e "s/\([0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]\)/\1%/" |cut -d"%" -f1 -s

va donner la mac adresse du type aa:65:68:1e:8f:b9

arp -a

 ? (192.168.0.254) à 00 : ?? : ?? : ?? : ?? : ?? [ether] sur eth0 : c’est une freebox avec l’adresse mac 00 :.......

rajouter avant exit 0 dans /etc/rc.local : ethtool -s eth0 wol g pour que ça marche à chaque fois

changer dans le bios pour autoriser le démarrage wake on lan

ça pourrait être bon

démarrage à distance de l’ordinateur :

wakeonlan -i ip addr ::mac

[bruno sanchiz]