Ça fait quelques temps déjà que je me suis mis en tête de surveiller ma propre petite infrastructure réseau. Avec mon serveur chez moi qui fournit le NFS, le DNS, pas mal de petits sites Web et tout plein d'autres choses, ma jail FreeBSD qui héberge ce site ainsi que monrer.fr, mon routeur et mes onduleurs, on n'a pas forcément toujours le temps de vérifier soi-même si tout marche, alors que certaines choses feraient mieux de ne pas être cassées trop longtemps.
Pour ce faire, j'ai choisi Nagios, comme beaucoup de monde le ferait. Mais je me suis rapidement rendu compte qu'il me manquait quelque chose : en effet, bien que je surveille ma Livebox, il lui arrive parfois de répondre au ping alors que la connexion Internet ne fonctionne pas (lors d'un renouvellement d'un bail DHCP par exemple, ou pour toute autre raison). Je voulais donc pouvoir distinguer le cas où ma jail FreeBSD est dans les choux du cas où c'est la connexion Internet elle-même qui ne marche plus.
C'est pourquoi j'ai codé quelques plugins Nagios que vous pourrez récupérer sur mon dépôt BitBucket. Ils se connectent tous sur l'interface d'administration de la Livebox pour récupérer l'état de la connexion Internet, mais aussi du téléphone et de la télévision.
Cet article s'applique uniquement à la Livebox 3, qui est le dernier modèle au moment où j'écris cet article et qui est fournie à chaque nouvel abonnement fibre chez Orange.
L'interface d'administration : du HTML mais pas de texte
Tout d'abord, si vous allez sur l'interface d'administration de votre Livebox
(http://192.168.1.1 par défaut) et que vous regardez le
code source de la page, vous trouverez beaucoup de balises <span>
mais pas
un seul mot de texte. Par exemple, la partie qui nous intéresse pour l'état
de la connexion Internet est (moyennant le whitespace ajouté pour plus de
clarté) :
<span class="translation Translations.general.label.internet"></span>
<br>
<span style="color:#3caa0a;"
class="translation Translations.general.label.available display"
id="Services.InternetConnection"
name="Services.InternetConnection">
</span>
Ce bout de HTML est censé donner ça :
Il s'agit donc bien de la partie de l'interface qui affiche une icône verte et le texte « disponible ». En fait, la page contient un bout de JavaScript qui insère le texte dans la bonne langue au bon endroit (au lieu de tout simplement honorer l'en-tête Accept-Language du protocole HTTP). C'est pas très élégant, mais cela nous permettra au moins de nous affranchir de problèmes liés aux différentes langues dans lesquelles les Livebox seraient fournies.
Donc pour obtenir la disponibilité de la connexion Internet, il suffit de
regarder l'attribut class
de l'élément HTML dont l'identifiant est
Services.InternetConnection
.
L'état de la TV et du téléphone : AJAX à la rescousse
La première version de mon script se contentait tout simplement de récupérer cette page HTML de temps en temps. Cependant, un petit coup de Firebug m'a rapidement montré que l'état des services TV et téléphone sont récupérés par des appels AJAX et ne sont pas affichés directement sur la page HTML.
Sous peine de fausses alertes Nagios (le HTML indiquant que la TV et le téléphone sont down par défaut), il nous faut donc faire un peu plus de travail pour récupérer l'état de ces services.
Pour l'état de la téléphonie, c'est à l'URL suivante que ça se passe :
http://192.168.1.1/sysbus/VoiceService/VoiceApplication:listTrunks
Il suffit d'envoyer une requête POST avec comme données {"parameters":{}}
(un GET ne suffit pas et renverrait une erreur), et on obtient une réponse qui
renferme en sus beaucoup d'informations intéressantes :
{
"status": [
{
"name": "SIP-Trunk",
"signalingProtocol": "SIP",
"enable": "Enabled",
"trunk_lines": [
{
"name": "LINE1",
"groupId": "Group1",
"enable": "Enabled",
"status": "Up",
"statusInfo": "",
"directoryNumber": "+33123456789",
"uri": "+33123456789@orange-multimedia.fr",
"authUserName": "CENSURAIDE@orange-multimedia.fr",
"authPassword": "",
"event_subscribe_lines": [
{
"eventSubscribeEvent": "message-summary",
"eventSubscribeAuthUserName": "",
"eventSubscribeAuthPassword": ""
}
]
}
],
"sip": {
"proxyServer": "",
"proxyServerPort": 5060,
"registrarServer": "",
"registrarServerPort": 5060,
"outboundProxyServer": "81.253.172.17",
"outboundProxyServerPort": 5060,
"userAgentDomain": "orange-multimedia.fr",
"userAgentPort": 5060,
"subscriptionInfo": [
{
"event": "message-summary",
"notifyServer": "voicemail.orange-multimedia.fr",
"notifyServerPort": 5060
}
]
},
"h323": {
}
},
{
"name": "H323-Trunk",
"signalingProtocol": "H.323",
"enable": "Disabled",
"trunk_lines": [
{
"name": "LINE3",
"groupId": "Group1",
"enable": "Disabled",
"status": "Disabled",
"statusInfo": "",
"directoryNumber": "",
"uri": "",
"authUserName": "",
"authPassword": "",
"event_subscribe_lines": [
]
}
],
"sip": {
},
"h323": {
"gatekeeper": "",
"gatekeeperPort": 1719
}
}
]
}
Le numéro de téléphone des attributs directoryNumber
et uri
est bien
entendu le numéro de téléphone de votre Livebox. En tout cas, cela montre
que ma Livebox utilise le protocole SIP.
Le paramètre authUserName
me semble un peu plus abscons cependant. Il
s'agit en réalité d'un identifiant de 10 caractères composé uniquement de
lettres majuscules et qui ne correspond avec aucun des identifiants qu'Orange
m'a fournis.
Hélas, je ne parviens pas à trouver plus d'informations concernant la possibilité de bénéficier de son accès VoIP avec autre chose qu'une Livebox. Peut-être faudra-t-il que je fasse un jour l'expérience en sniffant les communications entre la Livebox et le GPON sur le bon VLAN. De toute façon, là n'est pas l'objet de l'article. (Edit : ça, c'est fait).
Passons à l'état de la télévision. Il y a un peu moins de choses rigolotes à
glaner dans le JSON renvoyé par l'URL correspondante, mais en POSTant
{"parameters":{}}
sur l'URL
http://192.168.1.1/sysbus/NMC/OrangeTV:getIPTVStatus
, on obtient :
{"status":null,"data":{"IPTVStatus":"Available"}}
Simple et efficace.
Conclusion
Cela fait quelques semaines que j'ai ajouté ces plugins Nagios à mon service de monitoring, mais je n'ai pas encore eu d'alertes à propos d'éventuelles coupures de service.
En tout cas, si vous aussi voulez vous laisser tenter, vous pouvez récupérer
le code source sur la page BitBucket correspondante. Il suffit de
copier les scripts dans /usr/lib/nagios/plugins
(ou là où sont les autres
plugins Nagios sur votre système), ajouter les commandes correspondantes et
c'est parti.
Commentaires
Poster un commentaire
Olivier G.
Bonjour
Merci pour ces plugins Nagios pour la LiveBox, je suis impatient de les tester chez moi.
Je recherche aussi le moyen de monitorer le traffic entrant/sortant, auriez-vous une idée pour ce faire?
D'avance, merci
Olivier
Toto
Un seul souci dans ce raisonnement : demander au malade de se surveiller lui-même. Comme tout un chacun le sait la LiveBox est pitoyable et autant il m'est arrivé d'avoir des services dans les choux avec une interface qui disait que tout allait bien, autant j'ai vu l'inverse. Se fier à la LiveBox n'est donc pas très raisonnable à mon avis. :-)
★ x0r
On peut dire ce qu'on veut sur les firmwares de la box mais au moins son mécanisme de supervision a l'air de bien fonctionner. Les pannes diverses que j'ai pu avoir avec la box se sont traduites par une alerte Nagios dans, disons, 99% des cas.
La seule panne que la box n'avait pas détectée était au niveau du téléphone. En effet, un beau matin, je me suis retrouvé avec une tonalité occupée quelle que soit le numéro composé. Un reboot de la box a résolu le problème. Cela dit, ce n'est pas impossible que le bug se trouvait dans l'infrastructure en face – lors de mes travaux sur le SIP d'Orange, j'étais tombé sur un comportement assez bizarre du proxy SIP.
Gandoulf42
Bonsoir :)
Un petit commentaire tardif pour vous informer que depuis une certaine màj de la livebox 3, la réponse JSON n'est plus la même concernant la téléphonie. Bizarrement la box est beaucoup moins bavarde et ne donne que peu d'informations comparé à avant.
Néanmoins, il suffit d'apporter une légère modification de votre script pour de nouveau récupérer les infos 'enable' et 'status' du trunk SIP. (Je ne poste volontairement pas la modification, ne sachant pas si je suis autorisé à rendre public ma modification du script)
★ x0r
Ouais, je me suis rendu compte de ça. J'ai mis à jour mes scripts sur le dépôt "nagios-livebox" sur mon compte BitBucket, mais je n'ai pas mis à jour l'article. :x
Damien31
Bonjour, j'ai une erreur qui remonte : LIVEBOX CRITICAL - 307 Temporary Redirect
De quoi cela peut il venir ? (Probléme de l'URL dans le script check_livebox_inet) ?
Merci
Daniel
Bonjour,
Je sais que ce n'est pas directement relié, mais comme je ne trouve pas de piste ailleurs, je me permets de poser la question ici:
Est-il possible d'écrire un script qui permettrait de faire sonner le téléphone IP branché sur une livebox (1.2 thomson ou 2) mais qui ne raccrocherait pas une fois que ledit téléphone est décroché (l'idée est de brancher un téléphone en usb DECT et l'autre via la prise ToIP RJ45 et de faire de l'intercom)?
Accessoirement, si le téléphone branché sur la prise ToIP RJ45 pouvait basculer sur la ligne ADSL lorsque le courant est coupé, ce serait encore mieux, mais il me semble avoir lu que ce n'était pas possible avec ces matériels.
Merci de ne pas me dire d'utiliser une base et 2 mobiles DECT pour l'intercom, je veux utiliser un ancien téléphone filaire. A moins qu'il existe une bidouille via une base DECT, mais je ne suis pas expert.
D'avance merci
Poster un commentaire