Ceci est une ancienne révision du document !



Wakeonlan : démarrer un ordinateur à distance

(Si besoin, il existe page complémentaire wake-on-lan)

Le Wake-on-LAN ou mise en marche du PC depuis le réseau est une technologie développée par AMD et IBM, permettant à un ordinateur mis en veille d'être démarré à distance par l'envoi d'un "magic-packet" sur la carte réseau supportant le Wake-on-LAN.

Plus techniquement, le réveil est déclenché quand la carte ethernet de l'ordinateur reçoit un "magic packet" qui est une trame de données ethernet contenant les octets FF FF FF FF FF FF suivis de seize répétitions de l'adresse MAC de la cible, puis d'un mot de passe (si nécessaire) de quatre ou six octets

Cet article vous explique comment installer l'application wakeonlan pour démarrer un ordinateur distant (toutes plate-formes) depuis votre distribution Ubuntu, et vous permet de trouver les informations sur l'ordinateur que vous voulez démarrer. Pour démarrer votre ordinateur avec Ubuntu depuis un autre poste, c'est sur l'autre poste qu'il faut installer le programme.

Pour la suite des opérations, des pré-requis sont nécessaires :

  • Disposer des droits d'administration ;
  • Disposer d'une connexion à Internet configurée et activée pour télécharger le logiciel ;
  • Avoir configuré le résau de la machine à réveiller en IP fixe (chapitre 1.1.1);
  • Avoir activé l'accès au dépôt APT 'universe'.

Activer le WOL et vérifier que la carte réseau le supporte

Voici un Script permettant d'activer et installer une GUI dans le but exploiter le WOL (Script en Version BETA) : http://forum.ubuntu-fr.org/viewtopic.php?pid=2748926#p2748926
Le script d'installation récupérables grâce au lien ci dessus, tente de télécharger le fichier http://ordiboy.free.fr/open/Linux/wol.py . Cette requête aboutie sur une erreur 403, qui empêche l'installation…
lien mort…recherchons un script équivalent

Le WOL doit être activé pour la carte réseau. Ce n'est pas toujours le cas pour des raisons évidentes de sécurité puisque n'importe qui pourrait démarrer un ordinateur en connaissant uniquement l'adresse mac. Cela s'effectue dans le BIOS de l'ordinateur à démarrer tout simplement.

Sous ubuntu, pour voir si votre carte réseau supporte le WOL, exécuter la commande :

sudo ethtool eth0

Vous devez obtenir la ligne suivante : Supports Wake-on: g

Si vous obtenez la ligne suivante :
sudo: ethtool: command not found

c'est que ethtool n'est pas encore installé. Pour l'installer :

sudo apt-get install ethtool

Si vous obtenez la ligne suivante :

Wake-on: d

c'est que votre carte réseau n'est pas activée pour le WOL. Pour l'activer taper la commande :

sudo ethtool -s eth0 wol g

Cependant, sous GNU/linux lors de l'extinction, le système désactive les interfaces réseaux. Pour supprimer cette sécurité (et c'en est une car elle évite que la machine puisse être réveillée par le réseau sans une intervention volontaire), un des moyens est d'écrire la ligne de commande suivante dans le fichier /etc/rc.local:

ethtool -s eth0 wol g

A mettre avant la ligne :

exit 0
Dans le fichier rc.local, la commande ne doit pas contenir "sudo" car le fichier est exécuté au démarrage par root.

Ainsi à chaque démarrage, la ligne de commande est exécutée, activant la carte réseau pour le prochain démarrage.

Identifier l'adresse mac de la carte réseau du pc à démarrer

  • Si vous avez un accès au pc (distant ou local), exécutez la commande :
ifconfig

Vous obtenez :

eth0    Lien encap:Ethernet  HWaddr 00:15:60:B1:xx:xx
          inet adr:192.168.1.xx  Bcast:192.168.1.255  Masque:255.255.255.0
          adr inet6: fe80::215:60ff:feb1:2316/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Packets reçus:4722 erreurs:0 :0 overruns:0 frame:0
          TX packets:2971 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          Octets reçus:918022 (896.5 KiB) Octets transmis:329459 (321.7 KiB)
          Interruption:169

Notez bien cette adresse MAC, c'est à elle que nous enverrons le paquet magique. Elle se trouve après le champs HWaddr.

  • Si vous n'avez pas d'accès à la machine, essayez la commande suivante qui devrait vous renvoyer une liste d'adresses mac associées aux adresses ip sur le réseau :
arp -a

Installation du logiciel et envoi du paquet magique

Si vous avez une carte réseau intégrée dans une carte mère à chipset NVidia (pilote forcedeth), exemple ASUS M2NPV-VM ou M2N-SLIdeluxe et que l'envoi de paquet magique ne produit aucun effet, avant de casser tous les scripts de votre machine, essayez simplement d'envoyer l'adresse MAC à l'envers, exemple 00:1a:9f:81:ce:a4 ⇒ a4:ce:81:9f:1a:00.
Sur une 8.10 Intrepid , les modification à faire sont extrêmement minimes pour faire marcher le WOL :
* Mettre « NETDOWN=no » dans /etc/default/halt
* Mettre « ethtool -s eth0 wol g » (ou le nom de l'interface que vous utilisez) dans /etc/rc.local, avant la ligne « exit 0 »
C'est tout !
Swâmi Petaramesh

Pour cela, il nous faut installer un logiciel capable de construire la trame qui va bien. Les dépôts Ubuntu contiennent 2 logiciels : etherwake et wakeonlan. Le premier est écrit en langage C, le second en Perl. Attention : etherwake ne permet pas de démarrer un pc en passant par internet, contrairement à wakeonlan. Nous installerons donc wakeonlan, disponible dans le dépôt universe :

Installation de la version graphique

- installez le paquet gwakeonlan

Vous pouvez installer les versions suivantes à la place de gwakeonlan :
- c501wakeonlan : http://fr.congelli.eu/prog_info_c501wakeonlan.html
- GUI M.Svantesson : http://forum.ubuntu-fr.org/viewtopic.php?pid=2748926#p2748926

Installation et utilisation de la version en ligne de commande uniquement

sudo apt-get install wakeonlan
  • Pour démarrer une station sur le lan, exécutez simplement la commande suivante dans un terminal (en remplaçant l'adresse mac par celle du poste à démarrer) :
wakeonlan 00:0D:9D:9B:BA:xx
  • Pour démarrer une station sur le lan via internet, exécutez simplement la commande suivante dans un terminal (en remplaçant les adresses mac et IP par celle du poste à démarrer) :
wakeonlan -i 78.yyy.xxx.zzz 00:0D:9D:9B:BA:xx
  • Pour démarrer plusieurs stations sur le lan, exécutez simplement la commande suivante dans un terminal (en séparant les adresses mac par des espaces) :
wakeonlan 00:0D:9D:9B:BA:xx 00:0D:9D:9B:yy 00:0D:9D:9B:zz
  • Pour démarrer une station derrière un pare-feu, pensez à paramétrer dans votre routeur un transfert du port que vous utiliserez dans la ligne de commande grâce à l'option -p (9 par défaut)

Si tout s'est bien passé, la machine distante devrait être en train de démarrer.

Pour plus d'information sur la commande wakeonlan :

man wakeonlan

Tester le wol à travers internet

Il peut être intéressant pour tester son installation de se faire envoyer un packet magique depuis internet (notamment si l'ordinateur que l'on souhaite réveiller est derrière un routeur).

  • La première solution qui vient à l'esprit est de téléphoner à un amis distant de quelques kilomètres, disponible et connecté à internet cela n'est pas toujours facile.
  • L'autre solution est de réaliser un script PHP que l'on télécharge sur les pages perso de son Fournisseur d'accès préféré. Il suffit ensuite de lancer ce script à l'aide de n'importe quel navigateur web. Vous devez également rediriger le port 9 (ou autre) en UDP vers votre ordinateur à partir de votre routeur.

Vous pouvez ainsi réveiller votre ordinateur à l'aide de n'importe quel autre ordinateur possédant seulement un navigateur. Ceci peut être pratique quand on n'a pas tous les droits sur un réseau et que l'on souhaite réveiller son ordinateur chez soi pour accéder à ses ressources. Cela évite aussi de se souvenir de ses adresses mac et IP.

 <?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);
     
       
      ?>
il vous suffit de modifier la fin du code en l'adaptant à votre installation. Changer le port,la mac adresse en mettant celle de votre carte réseau et l'adresse IP ou le nom de domaine de l'ordinateur à réveiller. Sinon par internet via cette page http://wakeonwan.webou.net/
Astuce : Pour réveiller votre PC par internet, rendez vous à l'adresse suivante : http://wakeonwan.webou.net Et indiquez l'adresse IP sur internet du PC à réveiller(fournie par votre fournisseur d’accès à internet) et l'adresse MAC du PC à réveiller

Pour utiliser le service de http://wakeonwan.webou.net avec une IP dynamique et a peu près sur le même modèle que précédemment depuis internet vous pouvez utiliser le code php suivant :

 <?php
        $mac_addr = "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_addr = gethostbyname("my.dns.domain.com");

        $URL_Wake="http://wakeonwan.webou.net/wakeup.php?ip=".$ip_addr."&mac=".$mac_addr;
        echo "<meta http-equiv=\"refresh\" content=\"0;url=".$URL_Wake."\" />" ; 
 ?>
Astuce : Pour savoir si, sans éteindre votre machine, le packet magique est bien reçu, testez avec la commande suivante :
tcpdump -i eth0 port 9

eth0 étant le nom de votre interface réseau …

Bien sur il faut que tcpdump soit installé, si nécessaire effectuez au préalable :

 sudo apt-get install tcpdump 

Types de wake on lan

Selon votre besoin parfois il est utile d'utiliser la fonctionnalité du WOL sans le paquet magique. pour cela il y a différentes variables.

ethtool -s eth0 wol V

avec V:

            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

Références

  • wakeonlan.1319571064.txt.gz
  • Dernière modification: Le 15/12/2011, 15:21
  • (modification externe)