Outils d'utilisateurs

Outils du Site


start:tutoriels:wake-on-lan_nas

Cette page relate, à la première personne, les investigations de Pouetpouete pour :

  • Allumer un ordinateur depuis internet par le biais d'une page web
  • Hacker le NAS Stora de Netgear

Introduction

Mon but initial était de réveiller mon serveur à distance par une commande Wake On LAN (WOL).

Cette commande revient à broadcaster (envoyer sur le réseau sans destination précise, ou plutôt à destination de tout le monde) le “paquet magique” contenant la trame suivante :

FF FF FF FF FF FF + 16 fois l'adresse MAC du PC à allumer, le tout sur le port 9.

Premier problème, mon routeur ne supporte de faire passer ce message depuis l'internet vers le réseau local.

Mon idée a donc été de faire envoyer cette commande par une machine déjà allumée dans le réseau local : mon NAS !

Il s'agit d'un Stora de chez Netgear. A l'intérieur, il y a deux disques durs en RAID 1 (miroir) et un espace de 220Mo avec une RedHat.

Se connecter au NAS

Première chose à savoir, il faut se connecter en ssh avec une commande bizarre, contenant le numéro de série du Stora (les XXXX) :

ssh utilisateur_hipserv2_netgear_XXXX-XXXX-XXXX-XXXX@ip_du_stora

Puis passer en root :

sudo su -

Il se plaint que la Connection est refused, mais c'est bon quand-même.

Ajouter un VirtualHost sur un port

Editer le fichier de configuration du serveur web apache :

vi /etc/httpd/conf/httpd.conf

Vers la ligne 1020, ajouter :

   <VirtualHost *:9999>
        DocumentRoot /var/www/wol
        <Directory "/var/www/wol">
           DirectoryIndex index.php
        </Directory>
   </VirtualHost>

J'ai choisi le port 9999 en lien avec le port 9 du WOL.

Aplication de la configuration du serveur :

/etc/init.d/httpd reload

Générer le paquet magique

Nous allons donc éditer un fichier index.php dans le répertoire /var/www/wol

vi /var/www/wol/index.php

Et voici son contenu :

<?php

class Wol{

private $nic;

public function wake($mac){
  $this->nic = fsockopen("udp://192.168.0.2", 9); //mettre ici l'ip du serveur
  if( !$this->nic ){
    fclose($this->nic);
    echo "erreur fsockopen <br/>";
    return false;
  }else{
    f_write($this->nic, $this->pacquet($mac));
    fclose($this->nic);
    return true;
  }
}

private function pacquet($Mac){
  $packet = "";
  for($i = 0; $i < 6; $i++){
  $packet = $packet.ch_r(0xFF);
  }
  for($j = 0; $j < 16; $j++){
    for($i = 0; $i < 12; $i=$i + 2){$packet .= ch_r(hexdec(substr($Mac, $i, 2)));}
  }
  return $packet;
}

}

$wol = new Wol();

$wol->wake('000000000000'); //mettre ici l'adresse mac du serveur
echo "Wake On Lan envoyé.";

?>

/!\ les fonctions f_write() et ch_r() n'ont pas de underscore ; ils sont là pour éviter un bug de dokuwiki.

Vous pouvez vous rendre sur la page ip_du_stora:9999 qui enverra pour vous le paquet magique.

Mais il sera bloqué par netfilter.

Autoriser l'accès au port 9

Ajouter cette règle :

iptables -I INPUT -p udp --dport 9 -j ACCEPT

Et ça marche !

start/tutoriels/wake-on-lan_nas.txt · Dernière modification: 2012/01/06 06:33 par pouetpouete