Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
7 à voir

A la découverte des technologies

Comment rebooter automatiquement son routeur ?

Que faire quand son routeur ou sa box s'arrête de temps en temps de fonctionner ? Dans ce billet un peu technique, je vous propose de découvrir ma solution à base d'une prise connectée et d'un peu de hacking.

Comment rebooter automatiquement son routeur ?

Le Spot Bouygues est un lieu sur le campus de l'EPITECH où étudiants et collaborateurs de Bouygues viennent se poser pour travailler sur des projets communs. L'infrastructure du lieu est très limitée: en gros il y a juste un routeur qui diffuse un accès WiFi et permet l'accès à Internet.

C'est tout à fait suffisant mais, de temps en temps, ce routeur se met à ne plus fonctionner: s'il y a des utilisateurs connectés il restent connectés mais perdent l'accès à Internet et les nouveaux arrivant ne peuvent plus se connecter au réseau. Rien de grave, j'imagine que vous avez ça de temps en temps sur votre box ou sur votre routeur ? Il suffit de redémarrer le routeur (juste le débrancher et le rebrancher…) et tout rentre de l'ordre en quelques minutes. La seule particularité est que pour des raisons de sécurité, au Spot, ce routeur est dans un caisson fermé à clé. Il faut donc avoir la clé pour réaliser l'opération.

 

Ce dysfonctionnement se produit de "temps en temps" une à deux fois par mois. Évidemment, cela se produit TOUJOURS au plus mauvais moment, c’est-à-dire quand je ne suis pas là. Les occupants n'ont alors pas d'autres choix que de m'appeler pour que je leur dise où est cachée la fameuse clé (sous le paillasson  ;-) afin qu'ils redémarrent le routeur. C'est également ennuyeux parce que le Spot contient des équipements de sécurité (caméras, détecteurs, …) qu'il est embêtant de ne pas pouvoir consulter à distance à tout moment.

 

Tentative de solution

Ce problème dure depuis des mois, à l'occasion j'ai essayé de faire de faire des recherches pour identifier les causes possibles et j'ai fait régulièrement les mises à jours du firmware du routeur mais hélas sans résoudre le problème jusqu'à présent. D'ailleurs si vous avez des suggestions, je suis preneur !

 

Il y a quelques mois je tombe sur un article de Gizmodo qui parle d'une prise magique capable de régler le problème: le "ResetPlug". Le ResetPlug s'intercale entre l'alimentation de votre box/routeur et la prise de courant. Il fonctionne comme un client WiFi qui écoute en permanence votre connexion Internet. Dès qu'il ne détecte plus Internet, il coupe l'alimentation quelques secondes ce qui a pour effet de redémarrer votre box/routeur.

Comment rebooter automatiquement son routeur ?

Cool. C'est exactement ce qu'il me faut !

Seul problème: ce gadget est vendu exclusivement aux US pour 60$. La prise supportée  est d'ailleurs une prise au format US. Le site laisse supposer qu'une version pour des prises Européennes pourrait être disponible mais en fait après plusieurs mois d'attentes il n'en est rien :-(

 

La prise connectée Kankun

L'été approche donc une période de vacances où le problème risque d'être encore plus visible car évidemment dans ces périodes je ne suis pas présent tout le temps au Spot. Il me fallait une solution.

En lisant attentivement la FAQ de la ResetPlug, je tombe sur une question qui éveille ma curiosité:

 

Q:  Isn't this a Kankun smart plug? They look the same?

A:  No, this is not the same as the Kankun smart plug. We both use the same plug hardware (outside) from iKonke, but the software (inside) is very different. The ResetPlug detects an Internet outage and cycles power automatically. The Kankun plug is meant to turn on or off the outlet from an app while on the same WiFi network.

 

Le ResetPlug utiliserait donc le même hardware qu'une mystérieuse prise intelligente "Kankun" mais y ajoute un logiciel spécifique. Hmmm. N'y aurait-il pas moyen de faire la même chose ?

Quelques recherches sur Internet me font tomber sur cette fameuse prise Kankun vendue par Amazon US pour 30$. C'est une prise contrôlable via son smartphone Android/iOS. Ce n'est pas exactement mon besoin mais c'est intéressant. Accessoirement, la Kankun est vendue moitié prix de la ResetPlug: le prix à payer pour le logiciel ajouté par ResetPlug ?

 

En cherchant un peu plus, je tombe sur un article de blog de Kenneth Burgener qui explique comment "hacker" la Kankun. L'article explique que la prise Kankun est en fait sous OpenWRT. Mes souvenirs de visiteur régulier du /tmp/lab (un des premiers hacker space en France) me reviennent à l'esprit: OpenWRT est une mini-distribution Linux qui équipe de nombreux équipement réseaux. Et si c'est une distribution Linux, il doit être facile d'y ajouter l'intelligence nécessaire au pilotage de la prise. En effet, l'article de Kenneth explique comment il est possible de se connecter à la prise en SSH et même y installer un mini-serveur HTTP pour la piloter à distance: cool, voilà la solution !

 

Je me lance donc dans l'achat de cette fameuse prise. Comme conseillé dans l'article, je la commande à 16,99$ sur Aliexpress, qui est moins cher qu'Amazon (j'ai encore gagné 50% !), qui y ajoute un adaptateur pour les prises EU et qui livre en France. Après quelques semaines (ça vient de Chine), l'objet arrive finalement au Spot.

Comment rebooter automatiquement son routeur ?

Hacktime

La prise en main n'est pas facile au début. Naïvement, j'essai d'installer l'appli Android pour configurer la prise mais depuis l'article de Kenneth qui date de 2015, l'application n'est plus disponible qu'en Chinois et honnêtement, même pour s'y connecter, c'est compliqué quand on ne comprends pas un mot (pas même un caractère !) de chinois.

 

Bref, je me retourne finalement vers la configuration via SSH. Une fois compris comment on réinitialise la prise (un petit bouton sur le côté) et qu'il faut quelques minutes pour qu'elle expose son WiFi de configuration ("0K_SP3"), j'arrive finalement à me connecter à la console.

 

 

BusyBox v1.19.4 (2014-03-27 17:39:06 CST) built-in shell (ash)

Enter 'help' for a list of built-in commands.

 

  _    _               _    _

 | | _-_| _____ _____  | | _-_| _____ ____

 |  -_-  |     ||     ||  -_-  |     ||    |

 | |-_   |  -  ||  |  || |-_   |  -__||   _|

 |  _ -_ |_____||__|__||  _ -_ |_____||__|  

 |_| -__|  S M A L L   |_| -__| S M A R T

 -----------------------------------------------------

 KONKE Technology Co., Ltd. All rights reserved.

 -----------------------------------------------------

  * www.konke.com            All other products and   

  * QQ:27412237              company names mentioned

  * 400-871-3766             may be the trademarks of

  * fae@konke.com            their respective owners.

 -----------------------------------------------------

root@koven:~# 

 

 

Je commence par configurer l'accès de la prise au WiFi du Spot. C'est expliqué dans l'article de Kenneth: il suffit de modifier deux fichiers de configurations Linux "/etc/config/wireless" et "/etc/config/network" pour y indiquer les informations de connexion au WiFi. Au redémarrage suivant, la prise est donc désormais connectée au WiFi du Spot.

 

Reste à rajouter l'intelligence pour tester la connexion au WiFi et arrêter la prise si la connexion échoue.

L'article de Kenneth et assez détaillé et il existe un groupe Google+ (pas très actif néanmoins) qui propose quelques astuces et programmes pour jouer avec la prise. J'apprends ainsi que pour couper l'alimentation de la prise il suffit d'écrire un 0 dans un endroit très précis du filesystem, ce qui se fait en une commande shell très simple:

 

echo 0 > /sys/class/leds/tp-link:blue:relay/brightness

 

Et pour remettre l'alimentation, il suffit d'écrire 1 au même endroit:

 

echo 1 > /sys/class/leds/tp-link:blue:relay/brightness

 

On ne peut pas faire plus simple ! J'ai donc de quoi piloter la prise pour pouvoir redémarrer le routeur une fois qu'il y sera branché.

 

Il faut maintenant tester la connexion. La prise étant connectée en WiFi au réseau du Spot, il suffit de tester l'accès à Internet pour vérifier que le routeur fonctionne. Il y a plusieurs méthodes pour faire ça mais comme OpenWRT n'intègre qu'un sous-ensemble des commandes Linux habituelles, j'opte pour une solution simple en utilisant la commande "wget" qui permet de lancer une requête HTTP sur une URL. Si l'URL répond la commande retourne 0, si elle ne répond pas elle retournera autre chose. Voilà donc mon test de connexion:

 

wget -q -s http://google.com

if [[ $? -eq 0 ]]; then

        echo 'Il y a internet'

     else

        echo 'Il n'y a pas internet'

fi

 

Comme vous le voyez, je teste l'accès à Google. Si Google tombe, on peut considérer qu'il y a un problème de connexion :-)

 

Bon il n'y a plus qu'à assembler les morceaux: s'il n'y a pas Internet, je coupe l'alimentation et je la remets. Dans la réalité c'est un peu plus compliqué, j'y rajoute un peu d'intelligence:

  • Inutile de tester en permanence la connexion, je considère qu'il suffit de le faire un test toutes les 5 minutes.
  • Par ailleurs il peut y avoir une micro-coupure, je décide qu'en cas d'échec du test de connexion on refait un test 30 secondes plus tard et on ne redémarre que si celui-ci échoue aussi.
  • Enfin, il est un peu brutal de redémarrer sans prévenir les utilisateurs potentiels qui se trouvent dans la salle. Comme justement je viens de recevoir au Spot un afficheur digital LaMetric, j'en profite pour écrire également un petit script (je ne le détaille pas ici mais si ça vous intéresse n'hésitez pas à demander) qui va déclencher un son et un affichage pour indiquer qu'il y a un problème.
Comment rebooter automatiquement son routeur ?

Bref, voici ce que donne le script final qui constitue "l'intelligence" de ma prise.

 

# checkinternet

while true

do

        wget -q -s http://google.com

        if [[ $? -eq 0 ]]; then

                echo $(date) was: online

        else

                echo $(date) was: OFFLINE, retry in 30 seconds

                /root/sendtolametric "Internet issue, retrying in 30s" > /dev/null

  sleep 30

                wget -q -s http://google.com

                if [[ $? -eq 0 ]]; then

                         echo $(date) was: now online

                else

                         echo $(date) was: still OFFLINE, reboot in 10s

                         /root/sendtolametric "Reboot in 10s" i2633 knock-knock critical > /dev/null

                         sleep 10

                         echo 0 > /sys/class/leds/tp-link:blue:relay/brightness

                         sleep 3

                         echo 1 > /sys/class/leds/tp-link:blue:relay/brightness

sleep 600

                fi

        fi

        sleep 300

done

 

En gros c'est un script qui teste toutes les 5 minutes ("sleep 300") la connexion (commande "wget"). Si elle échoue il attend 30 secondes ("sleep 30") puis refait le test. Si elle échoue à nouveau il prévient les utilisateurs (appel "sendtolametric" pour piloter l'afficheur digital), attend 10 secondes puis coupe la prise pendant 3 secondes puis la redémarre. Il attend ensuite bien sagement 10 minutes que le réseau refonctionne et relance son cycle de test.

 

Et ça marche ?

Avant de brancher ma prise ainsi configurée sur le routeur du Spot, j'ai d'abord fait tourner le script "à vide" quelques jours pour vérifier que tout allait bien. J'ai pu ainsi constater qu'il détectait correctement les coupures réseau. J'en ai profité pour le modifier en intégrant quelques temps d'attentes que vous voyez dans le script final ci-dessus. Il faut noter aussi que le script "loggue" chacune de ses actions ce qui me permet de voir à postériori ce qu'il a fait.

 

Finalement la prise est branchée au routeur du Spot depuis 3 semaines. Et j'ai eut la joie de constater qu'elle a déjà "corrigé" deux coupures réseau. Voici par exemple une de ses actions il y a quelques jours:

 

Mon Jul 17 03:18:45 CST 2017 was: online

Mon Jul 17 03:22:52 CST 2017 was: OFFLINE, retry in 30 seconds

Mon Jul 17 03:23:22 CST 2017 was: still OFFLINE, reboot in 10s

Mon Jul 17 03:36:55 CST 2017 was: online

Mon Jul 17 03:41:55 CST 2017 was: online

 

Je suis donc plus serein en me disant que, même en mon absence et même à 3h du matin, ma prise connectée veille à ce que le réseau du Spot soit toujours actif !

 

Amusant non ?

N'hésitez pas à laisser vos remarques ou suggestions en commentaire.

[Mise à jour novembre 2020]

Vu la difficulté à trouver une prise Kankun aujourd'hui, j'ai fait évoluer ce mécanisme avec une nouvelle prise connectée. Voir le nouvel article Comment rebooter automatiquement son routeur ? (le retour).

Article précédent Article suivant
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
J
Il suffit d'acheter une banale prise "programmateur quotidien" à 5 balles et de la faire éteindre/allumer tous les jours à 4h du mat. Franchement...
Répondre
L
Hahaha c'est vrai mais avec la réactivité en moins (il faut attendre 4h du matin en cas de problème), la traçabilité en moins (pas d'historique des problèmes) et le fun en moins aussi :-)
J
Bonjour,<br /> J'aurais besoin d'une prise qui a la même fonction. Or je n'y connais vraiment rien en programmation. Pouvez m'aider ?
Répondre
L
Bonjour Jeremy. Pour info, j'ai creusé moi aussi le sujet dans un nouvel article ici: http://www.7avoir.net/2020/11/comment-rebooter-automatiquement-son-routeur-le-retour.html ça pourra peut-être vous aider.
J
Je vous remercie pour vos renseignement. Ça me paraît compliqué. Mais je vais essayé.
L
Non en effet, la ResetPlug n'existe plus. J'ai fait quelques recherches et il semble qu'il soit possible de faire la même chose avec la Weaved Smart Plug (https://developer.weaved.com/portal/members/plug_instructions.php) et la Wemo Insight Smart Plug (https://svenschwermer.de/2020/05/31/mainline-openwrt-on-a-wemo-insight-smart-plug.html) mais il faudrait tester.
J
Merci pour votre réponse mais justement je ne trouve pas de prise qui a cette fonction. La resetplug ne se vends plus ? Car je n'arrive pas a accéder a la boutique.<br /> Merci pour votre réponse
L
Hmmm. Il faut regarder du côté des prises connectées grand public, cherchez un comparatif pour en trouver, par exemple: https://www.tomsguide.fr/smartplug-quelle-est-la-meilleure-prise-electrique-connectee/<br /> La difficulté est ensuite de voir s'il est possible de reproduire le même comportement que je décris ici sans programmation. C'est peut être possible avec des actions dans Home Kit, Google Home ou IFTTT mais il faudrait essayer. Sachant que la difficulté est que souvent ces appareils ont justement besoin qu'Internet fonctionne pour être piloté...
J
Ok merci de votre réponse rapide, je vais passer commande via votre lien sur Aliexpress ; encore merci
Répondre
J
Bonjour, merci à vous, c'est exactement ce que je recherche, êtes-vous toujours satisfait de cette prise ? SVP vous pouvez me partager votre script sans la partie digital ? Merci
Répondre
L
Bonjour. Oui cela fonctionne parfaitement depuis plusieurs mois maintenant. Si vous n'avez pas d'afficheur digital, vous pouvez utiliser le script tel quel, supprimez simplement les 2 lignes qui commencent par "/root/sendtolametric".