Surveiller sa Livebox 3 avec Nagios

Ç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 :

État des services de la Livebox

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.

Posté par x0r à 6 commentaires • Tags : orange livebox nagios monitoring surveillance alerte

Commentaires

Poster un commentaire

#1 — 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

#2 — 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. :-)

#3 — 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.

#4 — 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)

#5 — 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

#6 — 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

Poster un commentaire