OVH Cloud OVH Cloud

Wake-On-Internet à travers un routeur : possible ?

4 réponses
Avatar
Patrick 'Zener' Brunet
Bonjour.

Je dispose d'un petit LAN relié à Internet à travers un PC qui sert
entre-autres de proxy multi-protocoles, et suivi d'un routeur type Netgear
RP614 associé à une "Box" ADSL.

Je cherche une astuce qui permettrait, lors des déplacements durables,
d'arrêter le PC proxy, ne laissant en veille que le routeur, et de pouvoir
réveiller ce PC à distance à travers Internet (on suppose donc que la
connexion ADSL, gérée par le routeur, reste établie et que l'IP est connue
de l'appelant).

Donc si l'adresse MAC de la carte réseau du PC est connue, le but serait de
faire rentrer un "magic packet" approprié.

Le routeur intègre un firewall, mais il est possible d'ouvrir un port
particulier associé à une IP fixe utilisée par le PC proxy. Je me dis alors
que dans ces conditions, même si le PC proxy est arrêté, ce n'est pas
vraiment le problème du routeur, et donc si un paquet se présente, destiné
au port en question, il doit le laisser entrer.

Et donc je me demande dans quelle mesure il est envisageable de faire entrer
ainsi un paquet capable de déclencher un WOL...

Est-ce que ça vous paraît un peu réalisable ?

Merci,
Cordialement,

--
/***************************************\
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
\***************************************/

4 réponses

Avatar
Pascal
Salut,

[...]
Donc si l'adresse MAC de la carte réseau du PC est connue, le but serait de
faire rentrer un "magic packet" approprié.

Le routeur intègre un firewall, mais il est possible d'ouvrir un port
particulier associé à une IP fixe utilisée par le PC proxy. Je me dis alors
que dans ces conditions, même si le PC proxy est arrêté, ce n'est pas
vraiment le problème du routeur, et donc si un paquet se présente, destiné
au port en question, il doit le laisser entrer.

Et donc je me demande dans quelle mesure il est envisageable de faire entrer
ainsi un paquet capable de déclencher un WOL...


En complément de ma réponse, tu peux rechercher les discussions qui ont
déjà eu à ce sujet ici ou dans fr.comp.reseaux.ethernet.

Par internet, qui est un réseau de niveau 3, on ne peut envoyer
directement une trame ethernet, de niveau 2. On doit passer par un
protocole IP. Le plus simple est d'utiliser UDP pour envoyer le magic
packet, parce que UDP, comme TCP, est bien géré par les routeurs même
basiques et le contenu d'un paquet UDP est arbitraire alors que le
contenu d'un paquet TCP de demande de connexion (SYN) est réglementé.
Des utilitaires de WOL permettent d'encapsuler un magic packet dans un
datagramme UDP. Ensuite, il faut créer sur le routeur une redirection du
port UDP choisi vers l'adresse IP de... vers quelle adresse IP en fait ?

C'est AMA le noeud du problème. A ce moment la machine cible est
éteinte, elle n'a donc pas à proprement parler d'adresse IP. Si on crée
une redirection vers l'adresse IP qu'elle est censée avoir, il va se
passer la chose suivante. Le routeur reçoit sur sont interface WAN le
datagramme UDP contenant le magic paquet. Il modifie l'adresse IP
destination du datagramme et se prépare à le ré-émettre via son
interface LAN. Avant cela, il doit déterminer l'adresse MAC ethernet
correspondant à l'adresse IP destination afin de construire la trame
ethernet qui contiendra le datagramme. A cet effet il émet une requête
ARP sur le LAN. Mais comme la machine cible est éteinte, il n'aura
jamais de réponse à sa requête. Par conséquent le routeur ne peut
retransmettre le paquet UDP, et il devrait renvoyer un message d'erreur
ICMP "host unreachable" à l'émetteur du paquet original.

Comment contourner le problème de la résolution ARP ? Deux voies sont
envisageables.

1) Ecrire "en dur" dans la table ARP du routeur une correspondance
statique entre l'adresse IP de la machine et l'adresse MAC de son
interface ethernet, si le routeur le permet. Cela aura pour résultat
d'éviter l'émission d'un requête ARP. C'est l'équivalent de la commande
"arp -s" d'OS comme Windows ou Linux.

2) Créer sur le routeur une redirection UDP vers l'adresse IP de
broadcast du réseau local (soit 192.168.0.255 si le réseau est
192.168.0.0/24), toujours à condition que le routeur le permette. Ainsi
le paquet sera réémis sur le réseau local avec l'adresse ethernet de
broadcast, FF:FF:FF:FF:FF:FF, sans avoir besoin de connaître l'adresse
MAC de la cible. *Toutefois* je n'ai pas la certitude que la fonction
WOL de la carte fonctionne avec une trame ethernet dont l'adresse
destination est l'adresse de broadcast, mais c'est à essayer si le
routeur ne supporte pas la première solution.

Avatar
Patrick 'Zener' Brunet
Bonjour.

Salut,

[...]
Donc si l'adresse MAC de la carte réseau du PC est connue, le but
serait de faire rentrer un "magic packet" approprié.

[...]



Merci beaucoup Pascal.
Effectivement, faisant relativement peu de réseau, j'avais râté cette
conversation-là.

J'ai donc maintenant tout un tas de points à vérifier par rapport à mon
équipement.

Un petit doute tout de même, quand vous dites :
Le routeur reçoit sur son interface
WAN le datagramme UDP contenant le magic paquet. Il modifie l'adresse
IP destination du datagramme et se prépare à le ré-émettre via son
interface LAN. Avant cela, il doit déterminer l'adresse MAC ethernet
correspondant à l'adresse IP destination afin de construire la trame
ethernet qui contiendra le datagramme. A cet effet il émet une requête
ARP sur le LAN. Mais comme la machine cible est éteinte, il n'aura
jamais de réponse à sa requête. Par conséquent le routeur ne peut
retransmettre le paquet UDP, et il devrait renvoyer un message
d'erreur ICMP "host unreachable" à l'émetteur du paquet original.


Par définition si on fait un WOL, la machine cible est toujours éteinte ou
en veille, mais par contre sa carte réseau est active. L'existence-même du
mécanisme suppose qu'on puisse procéder soit par broadcast, soit par une IP
fixe qui ne répond pas (encore). Ou alors si une réponse préliminaire est
attendue, il faudrait que la carte réseau sache répondre toute seule, et
dans ce cas il suffit qu'elle soit sous tension.
Ceci est l'avis du demi-Candide donc...

Même si je ne vais pas forcément utiliser cet utilitaire, je m'étais basé
sur des informations telles qu'en fournit cette page :
http://www.gknw.com/wol.html

============
Suite à tests :

* Mon routeur n'accepte pas d'ouvrir un port vers une adresse IP de
broadcast, uniquement vers une adresse IP ordinaire.
* Il propose de définir des routes statiques, mais je ne crois pas que ça
puisse faire avancer le schmilblick.
* Dans sa liste des machines attachées, il ne présente pas le PC proxy, qui
utilise une IP fixe et pas le serveur DHCP intégré, alors que ce PC est bien
connecté puisque c'est par lui que je consulte le serveur d'administration
du routeur ! En fait l'IP fixe en question n'apparaît nulle part sur le
routeur. Problème de sémantique dans l'IHM j'imagine... Mais ça ne dit pas
ce que la carte réseau sait faire toute seule quand le PC ronfle.
* Seule possibilité en vue : dans la configuration du serveur DHCP, il y a
une rubrique intitulée "Address Reservation" permettant d'associer des IP
fixes à des adresses MAC + noms de machines. Ca veut peut-être dire qu'il
est possible, en plus de les exclure de la plage du DHCP, de faire en sorte
que le routeur utilise ces correspondances sans vérifier l'activité de la
machine cible, ce serait donc conforme à votre solution n°1...

Je crois qu'il ne me reste plus qu'à me débrouiller pour mettre en place une
configuration d'essai... AMHA ça doit être possible en montant seulement une
seconde machine sur le routeur côté interne.

Merci,
Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/


Avatar
Pascal

Un petit doute tout de même, quand vous dites :

Le routeur reçoit sur son interface
WAN le datagramme UDP contenant le magic paquet. Il modifie l'adresse
IP destination du datagramme et se prépare à le ré-émettre via son
interface LAN. Avant cela, il doit déterminer l'adresse MAC ethernet
correspondant à l'adresse IP destination afin de construire la trame
ethernet qui contiendra le datagramme. A cet effet il émet une requête
ARP sur le LAN. Mais comme la machine cible est éteinte, il n'aura
jamais de réponse à sa requête. Par conséquent le routeur ne peut
retransmettre le paquet UDP, et il devrait renvoyer un message
d'erreur ICMP "host unreachable" à l'émetteur du paquet original.


Par définition si on fait un WOL, la machine cible est toujours éteinte ou
en veille, mais par contre sa carte réseau est active. L'existence-même du
mécanisme suppose qu'on puisse procéder soit par broadcast, soit par une IP
fixe qui ne répond pas (encore). Ou alors si une réponse préliminaire est
attendue, il faudrait que la carte réseau sache répondre toute seule, et
dans ce cas il suffit qu'elle soit sous tension.


Mais une carte ethernet même active est incapable de répondre
d'elle-même à une requête ARP. ARP et IP sont au-dessus d'ethernet et du
ressort de l'OS.

Même si je ne vais pas forcément utiliser cet utilitaire, je m'étais basé
sur des informations telles qu'en fournit cette page :
http://www.gknw.com/wol.html


D'après cette page l'utilisation d'un broadcast ethernet pour le magic
packet ne pose pas de problème, ce dont je n'étais pas sûr.

Suite à tests :

* Mon routeur n'accepte pas d'ouvrir un port vers une adresse IP de
broadcast, uniquement vers une adresse IP ordinaire.


Ça m'aurait étonné...

* Il propose de définir des routes statiques, mais je ne crois pas que ça
puisse faire avancer le schmilblick.


Non, ce n'est pas ce dont nous avons besoin. Pas de table ARP statique ?
Pas d'interface en ligne de commande par Telnet ou SSH qui donnerait
accès à des options de configuration plus avancées que l'interface web ?

* Seule possibilité en vue : dans la configuration du serveur DHCP, il y a
une rubrique intitulée "Address Reservation" permettant d'associer des IP
fixes à des adresses MAC + noms de machines. Ca veut peut-être dire qu'il
est possible, en plus de les exclure de la plage du DHCP, de faire en sorte
que le routeur utilise ces correspondances sans vérifier l'activité de la
machine cible, ce serait donc conforme à votre solution n°1...


Effectivement, ça vaut le coup d'essayer. Mais il n'est pas dit que le
serveur DHCP et le module ARP causent ensemble...

Je crois qu'il ne me reste plus qu'à me débrouiller pour mettre en place une
configuration d'essai... AMHA ça doit être possible en montant seulement une
seconde machine sur le routeur côté interne.


Bon courage, et tiens-nous au courant !


Avatar
Patrick 'Zener' Brunet
Bonjour.

[...]
* Seule possibilité en vue : dans la configuration du serveur DHCP,
il y a une rubrique intitulée "Address Reservation" permettant
d'associer des IP fixes à des adresses MAC + noms de machines. Ca
veut peut-être dire qu'il est possible, en plus de les exclure de la
plage du DHCP, de faire en sorte que le routeur utilise ces
correspondances sans vérifier l'activité de la machine cible, ce
serait donc conforme à votre solution n°1...


Effectivement, ça vaut le coup d'essayer. Mais il n'est pas dit que le
serveur DHCP et le module ARP causent ensemble...

Je crois qu'il ne me reste plus qu'à me débrouiller pour mettre en
place une configuration d'essai... AMHA ça doit être possible en
montant seulement une seconde machine sur le routeur côté interne.


Bon courage, et tiens-nous au courant !


Je viens de faire un essai concluant, mais je ne sais pas s'il est
équivalent...

1) Je dispose en ce moment d'une machine "invitée" que j'ai connectée
directement sur mon routeur, et qui WOLe sans problème. Je lui ai attribué
une IP fixe (ça permet aussi de la télé-opérer par VNC) et j'ai noté son
adresse MAC (ainsi que son HostName, mais je ne sais pas si c'est utile).

2) Je configure mon routeur pour réserver l'adresse IP en question à la
machine HostName ayant l'adresse MAC en question.

3) Je fais un port forwarding pour un port quelconque, disons 9999, en
désignant l'adresse IP en question comme adresse de serveur.

4) J'arrête la machine de test.

5) Je lance un WOL par magic packet depuis mon PC proxy, mais en spécifiant
l'adresse MAC de la machine cible, et comme adresse IP, l'adresse Internet
en cours (je suis en ADSL) que le PC proxy ne connaît pas, puisque le
routeur fait du NAT (et le masque à 0.0.0.0).

6) Et alors la machine cible se réveille.

Selon moi, ce test est concluant, puisque le magic packet est forcément
passé par le côté WAN du routeur, qui l'a renvoyé avec succès à la machine
visée, éteinte à ce moment, sur la simple base de son adresse MAC, puisqu'il
n'avait rien d'autre.
Je ne crois pas que le magic packet ait pu être routé simplement côté LAN,
puisque l'adresse de destination spécifiée n'était pas une adresse LAN.
Et donc en principe, le même magic packet aurait pu venir réellement de
l'extérieur avec comme destinataire l'adresse IP externe (supposée connue),
et spécifiant le port ouvert pourque le firewall du routeur ne le bloque
pas.

Qu'en pensez-vous ?

(Evidemment si je disposais d'une vrai service d'echo à l'extérieur,
j'aurais pu faire le test nominal, mais je n'ai pas encore eu le temps de
m'intéresser aux proxies "anonymiseurs"...)

Merci,
Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/