Voilà maintenant 6 mois que j’ai mis ma box en mode « bridge« (pont) et collé un routeur autonome pour toute la maison.Tout se passe dans le meilleur des mondes, mais c’était sans compter l’apparition de quelques déconnexions intempestives.Symptômes: la passerelle n’est plus joignable et du coup internet non plus! Légèrement gênant tout de même, n’est ce pas ?
Alors ça ne le fait pas tous les jours mais au plus haut de la crise ça peut se produire jusqu’à 3 fois par semaine :-/ Evidemment, un simple reboot de mon routeur ne suffit pas. Le seul moyen de résoudre le problème est de redémarrer physiquement la box .
Après quelques recherches sur le net, je me suis aperçu que d’autres freenautes rencontraient ce problème. Du coup on se sent moins seul et des solutions semblent exister. Voyons voir ça de plus près et tentons d’automatiser tout ça !
Solution avec l’API de freeboxOS :
Cette API mise à disposition permet d’utiliser un tas de fonctions qui permettent d’inter-agir à distance avec notre box. Entre autres: on peut planifier le wifi, redémarrer la box, accéder au disque dur, avoir des infos de connexion…
Bref , l’exemple le plus parlant est sans doute celui de l’application « freebox compagnon » . Vous savez celle qui permet de prendre le contrôle total de la box à partir de son smartphone. Et bien nous aussi,on va faire pareil mais en beaucoup plus simple. Seule la fonction « redémarrer la box à distance » nous intéresse pour solutionner notre problème de déconnexions aléatoires.
Ce que notre script doit faire:
Vérifier la connectivité de la box vers l’extérieur toutes les 4 minutes. En cas d’échec, il la reboot et nous notifie par mail. Ce script, dans l’idéal est à copier et planifier sur le routeur placé derrière la box mais il peut très bien l’être sur un simple raspberry connecté au LAN.
1 – Télécharger le script « reboot_freebox »
Pour l’occasion voici un petit script « maison » sans prétention, il est simplissime mais fait le job.Tout est dispo en libre ici et il comprend 4 fichiers:
– Télécharger les sources:git clone https://gitlab.com/benzoga33/reboot_freebox.git
cd reboot_freebox
chmod u+x rebootFbox.sh
2 – Obtenir le jeton pour être autorisé à utiliser l’API
prérequis:
Pour autoriser notre script à accéder et utiliser l’API de freeboxOS, il faut en faire la demande officielle à la freebox comme ceci dans votre terminal:
– Charger d’abord les fonctions de l’API:
source ./freeboxos_bash_api.sh
– Faire la demande d’autorisation auprès de la box :
authorise_application APP_ID APP_NAME APP_VERSION DEVICE_NAME
Ce qui donne dans notre cas:
authorize_application 'rebootFbox.sh' 'script reboot freebox' '1.0.0' 'rpi'
Please grant/deny access to the application on the Freebox LCD…
Authorization granted
Valider sur la box avec le bouton « flèche de droite »
Notez bien les 2 valeurs de retour que sont:
MY_APP_ID= »rebootFbox.sh »
MY_APP_TOKEN= »gBa4YPo28ZVGl2BwEKBmE1ySNXN9BCVKxClL1XZir6P9Yrx1JOPaepFzlF1p2SAl »
Dans la liste des applis autorisées sur l’ihm on retrouve maintenant notre script .
Dernier paramétrage avant de pouvoir tester l’API:
Augmenter les droits du script via l’ihm:
– cocher « Modifications des réglages de la freebox »
Bravo, vous venez de faire le plus difficile. Il ne reste plus qu’à tester tout ça!
3 – Test de « reboot » en ligne de commande:
Maintenant, on passe aux choses sérieuses. On prévient tout le monde que ça risque de couper.
la commande se construit comme suit:
login_freebox « $MY_APP_ID » « $MY_APP_TOKEN »
ce qui donne par exemple:
login_freebox rebootFbox.sh gQa4YPo28UVGl2BwDKBmE1oSNXN9CVKxClL7XZir6P9Yrx6JOPXepFklF1p9ZAl
reboot_freebox
Si tout s’est bien passé la box redémarre. Maintenant il faut automatiser tout ça et simuler la déconnexion pour s’assurer que le script se déclenche bien lorsque la passerelle n’est plus joignable.
Test du script : « rebootFbox.sh »
Editer la crontab (exécution du test de connexion toutes les 4 mn)
*/4 * * * * /root/reboot_freebox/rebootFbox.sh
Puis ajouter une règle sur votre parefeu pour bloquer l’IP publique de votre passerelle ainsi que le domaine « mafreebox.free.fr ».
Au bout de 4 mn la box , doit redémarrer et s’en suit une notification par mail. N’oubliez pas de supprimer la règle , une fois que vois êtes sûr que le script fonctionne bien!
Voilà , j’espère que ce script pourra servir.Pour info, je l’ai testé sur une freebox v6.Bien conscient que cette simple « rustine » ne résout pas le problème de fond. Mais Free n’est visiblement pas pressé de « patcher » pour des geeks qui s’entêtent à ne pas utiliser le mode routeur de leur box.
Sources:
https://wiki.deimos.fr/Rebooter_sa_Freebox_Server_6_en_ligne_de_commande.html
https://www.canaletto.fr/post/surveiller-et-redemarrer-une-freebox-a-distance
https://dev.freebox.fr/bugs/task/22818
Ah et pour info, pour que le script de reboot fonctionne, seule l’autorisation « modification des réglages de la Freebox » est nécessaire ! 😉
Merci, je vais tester ça dès ke je peux
De la balle, merci
bonjour
j’arrive bien a tout installer sur mon routeur openwrt, cependant dés que je lance
source ./freeboxos_bash_api.sh
j’ai le message suivant ‘-ash: ./freeboxos_bash_api.sh: line 122: syntax error: unexpected word (expecting « ) »)
de plus lorsque je lance ‘authorize_application ‘rebootFbox.sh’ ‘script reboot
freebox’ ‘1.0.0’ ‘rpi » j’ai la reponse suivante ‘-ash: authorize_application: not found
merci pour votre aide
cdlt
hello veran,
Le script n’a pas été écrit testé pour openwrt. Il fonctionne pour des linux « standards ».
Ceci étant dit tu peux tester de remplacer en début de script la ligne #!/bin/bash par #!/bin/sh.
Mais c’est sous réserve que les autres fonctions puissent s’exécuter correctement. Si tu veux pas te prendre la tête , je te conseillerai d’installer le script sur un raspberry connecté à ta box.
Hello,
J’ai le même soucis avec DSM
/volume1/git_repos/reboot_freebox$ source ./freeboxos_bash_api.sh
-sh: ./freeboxos_bash_api.sh: line 146: syntax error near unexpected token `<'
Sans succes en changeant bash par sh
Cela me tente bien cette solution pour ne pas utiliser une prise wacthdog.
Une idée?
Bonjour,
Il ne manque pas une petite étape dans le tuto où il faudrait editer token, app ID et gateway dans rebootFbox.sh ?
all good
jai installé sur une vm sur mon mac
ca marche ss pb
merci bcp
Bonjour,
ce script peut fonctionner sur un routeur asus RT-AC88U avec un firmware merlin?
Tu peux essayer, mais pour ma part cela ne fonctionne pas avec un Archer C7 sous openwrt-SFE. Il me manque openssl mais il n’est pas installable.Cependant, depuis le raspberry pi aucun problème.
Merci pour l’article benzo ! 🙂
Je n’ai pas, réussi à utiliser ce script. :-/
Une étape doit me manquer.. Du coup, j’ai crée un script qui pourrait aider certains (ceux comme moi qui on un petit Linux qui tourne kk part sur leur réseau) => https://github.com/sylvek/freebox_reboot
Bonjour
La library que vous utilisez à depuis été upgrade (au moins +3000 lignes de code) et permet maintenant de faire plein de choses comme ouvrir/ fermer des ports dynamiquement, gérer les fichiers sur le stockage etc…
Il y a aussi 1 programme en bash permettant de piloter les vm des freebox delta …
La racine des dépôts est ici:
https://github.com/nbanb
Les codes ont étés testés sous AIX (bash 4.2) et sous Linux (debian 9 à 12) et rhel 7 à 9 et opensuze thumbelweed.
Test également ok dans busybox (sur des ESXi et différentes appliances, sauf l accès websocket aux consoles séries des vm qui nécessite websocat , que je n ai pas toujours réussi à installer pour busybox, notamment sur 1 firewall fortigate sur lequel j’ai réussi à installer busybox et gdb grâce à 1 cve mais je n’ai jamais réussi à build websocat dessus…)
Pour l utilisation avec /bin/sh ou /bin/csh il y aura des adaptations à faire.
Cordialement
nbanba