Activer le Wake On Wan/Lan sur un firmware Tomato

Si vous avez la chance de possédez un routeur basé sur Linux comme le Netgear WNR3500L vous pouvez utiliser le firmware alternatif Tomato USB comme c’est mon cas.

Contexte

Le Wake On Wan consiste à envoyer un paquet magique à travers Internet dans le but d’allumer une machine à distance. C’est du Wake on Lan à travers Internet. Pour cela il faut traverser de nombreux routeurs qui ne laissent pas passer ce type de paquet magique.

La solution consiste à envoyer le paquet magique via UDP sur un routeur disposant de la fonctionnalité NAT (translation de port).

Tomato ne supporte pas le Wake On Wan et ce pour des raisons de sécurité (idem sur dd-wrt). Si vous souhaitez tout de même réveiller votre ordinateur à distance, il existe plusieurs solutions pour Tomato. Voici un tutoriel complet sur ce sujet.

Via l’interface web

L’interface de gestion Tomato permet de réveiller une machine de votre réseau local (LAN) dans Tools > WOL

Si vous avez défini une adresse DHCP statique dans le router pour l’ordinateur à réveiller alors il vous suffira de cliquer dans la liste sur la machine à réveiller. Sinon vous pouvez entrer manuellement l’adresse mac de l’ordinateur à réveiller :

L’inconvénient de cette solution c’est qu’il faut pouvoir se connecter à distance sur l’interface de votre routeur, ce n’est pas toujours facile lorsque l’on utilise un smartphone par exemple… et pas rapide puisqu’il faut s’authentifier puis arriver dans le bon menu WOL (cf. capture ci-dessus).

Via UdpProxy

Sur certains routeurs il était possible de créer une règle NAT pour renvoyer les paquets UDP arrivant sur le port 7/9 vers l’adresse de broadcast. Pour un réseau 192.168.0.0 il suffit de rediriger le port 9 vers l’adresse 192.168.0.255. C’était par exemple le cas sur mon Netgear RP614 v3.

Sur Tomato et dd-wrt c’est impossible, le routeur vous répondra « Invalid Ip address » si vous tentez d’ajouter une telle règle. En effet ces firmwares ne supportent pas le forward UDP sur l’adresse de broadcast. Pour contourner cette restriction il suffit d’utiliser un proxy UDP.

Voici comment procéder pour réveiller un pc à distance, nous utiliserons le port 9 dans notre exemple.

Avant tout, activer la connexion SSH via le menu Administration > Admin Access puis cocher « Enable at startup » dans la partie SSH Daemon.

  1. Choisir une adresse IP libre sur votre plage IP (idéalement hors de votre plage DHCP, réduisez-là si nécessaire) et gardez cette ip en tête.
    Ex: si votre plage dhcp est 192.168.0.10-50 choisissez l’ip 192.168.0.9
  2. Aller dans Administration > Scripts, onglet Firewall puis coller les lignes suivantes :

    ip neigh change 192.168.0.9 lladdr ff:ff:ff:ff:ff:ff nud permanent dev br0
    ip neigh add 192.168.0.9 lladdr ff:ff:ff:ff:ff:ff nud permanent dev br0


    (remplacer 192.168.0.9 par l’ip choisie à l’étape 1)
  3. Enregistrer avec le bouton Save
  4. Aller dans Administration > JFFS. Cocher Enable et cliquer sur le bouton Format (patienter quelque instants). JFFS est un emplacement qui n’est pas effacé au redémarrage du routeur, c’est ici que nous allons déposer le proxy UDP.
  5. Se connecter en SSH avec PuTTY puis (entrez l’adresse ip du routeur) :

    wget  http://blogmotion.fr/public/2010/udp-proxy-v0-50_tomato-v1-25
    mv  udp-proxy-v0-50_tomato-v1-25 /jffs/udp-proxy

  6. Aller dans Administration > Scripts, onglet Init et coller :

    /jffs/udp-proxy 9 192.168.0.255 9 &

    Pour info: Usage: udp-proxy port-in ip-address port-out
  7. Enregistrer avec le bouton Save
  8. Aller dans Port Forwarding > Basic et ajouter une règle NAT permettant aux requêtes UDP arrivant sur le port 9 d’êtres redirigées vers le port 9 de l’adresse IP 192.168.0.9 (cf. étape 1) :

    (cliquer sur Add une fois la ligne ajoutée)
  9. Redémarrer le routeur, c’est fini !

Essayer le réveil à distance

Pour réveiller un ordinateur via Internet plusieurs sites existent, je vous conseille Depicus :

Explications :

1: Entrer l’adresse mac de l’ordinateur à réveiller
2: Entrer l’adresse ip publique de votre routeur ou bien son nom dns (pseudo.dyndns.org par exemple si vous avez un dns dynamique).
3: Toujours utiliser le masque 255.255.255.255, ne jamais changer ce champ
4: Entrer le port que vous avez redirigé vers l’ip 192.168.0.9 dans la partie Forwarding > Basic du routeur

Enfin il suffit de cliquer sur le bouton vert pour démarrer votre PC à partir de n’importe quel point du globe.

Note: si cela ne fonctionne pas je vous conseille d’utiliser un outil de d’écoute de paquet (sniffer) tel que Wireshark pour vérifier que le paquet magique est bien envoyé à toutes les machines de votre réseau (broadcasté). Si oui, alors vérifiez que vous avez activé le Wake On Lan dans le BIOS de votre machine (cf. ce tutoriel) et qu’elle est connectée en réseau filaire. Quelques PC récents proposent une réveil via un réseau sans fil mais je n’ai jamais essayé.

Via le terminal (utilisateurs avancés)

A titre d’info il est également possible d’envoyer un paquet magique en terminal (ssh ou telnet) directement depuis le routeur. Il faut utiliser ether-wake :

root@RTR-Tomato:/tmp/home/root# ether-wake
BusyBox v1.17.2 (2010-10-06 01:46:13 EDT) multi-call binary.

Usage: ether-wake [-b] [-i iface] [-p aa:bb:cc:dd[:ee:ff]] MAC

Send a magic packet to wake up sleeping machines.
MAC must be a station address (00:11:22:33:44:55) or
a hostname with a known ‘ethers’ entry.

Options:
-b Send wake-up packet to the broadcast address
-i iface Interface to use (default eth0)
-p pass Append four or six byte password PW to the packet

Conclusion

Nous voilà avec un routeur capable de réveiller un ordinateur à travers internet. Plutôt que d’utiliser Depicus vous pouvez également utiliser l’application Android ou iPhone  (en attente de validation par Apple).

Vous pouvez aussi utiliser une des nombreuses solutions proposées chez Depicus : Com Object, dotNet, ligne de commande windows, asp et même via une application facebook. Je publierai prochainement un billet avec le code source PHP pour réveiller un ordinateur à partir d’une simple requête GET.

Merci à Phil Ten d’avoir développé ce proxy UDP sans quoi rien n’aurait été possible.

http://www.depicus.com/wake-on-lan/facebook-app.aspx
Vous devriez me suivre sur Twitter : @xhark

Article original écrit par Mr Xhark publié sur Blogmotion le 20/10/2010 | 10 commentaires |
Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

Vus : 1357
Publié par Blogmotion : 108