Catégories
Nagios Open-source Planet-libre Reseau

Le script de supervision d’Asterisk par Nagios évolue

Grâce à la contribution de Fréderic Jean, le script Perl Nagisk que j’avais développé il y a quelques temps passe en version 1.2. Cette nouvelle mouture apporte les nouveautés suivantes:

  • adaptation du script pour Asterisk version 1.6.13.2
  • modification de la commande pour avoir les informations sur les channels (« core show channels »)
  • ajout de l’option -p pour spécifier un peer

Pour rappel, Nagisk est un plugin pour Nagios permettant de récupérer, via NRPE, des informations sur votre serveur Asterisk (serveur PABX software).

La syntaxe est la suivante:

Syntax: ./nagisk.pl [-hv] [-c OPT] [-s NB|-p NAME]

-c version: Display the Asterisk version

-c peers: Display the SIP peers status

-c peer: Display the status of a particular peer

-c channels: Display the SIP channels status

-c zaptel: Display the status of the zaptel card

-c span: Display the status of a specific span (set with -s option)

-s <span number>: Set the span number (default is 1)

-p <peer name>

-h: Display the help and exit

-v: Display version and exit

Toutes les informations pour télécharger et installer ce script dans Nagios se trouve dans ce billet (mis à jour pour cette version).

Catégories
Open-source

Un client SIP en ligne de commande

PJSip est un framework (C et Python) open-source permettant de développer simplement des applications de VoIP basées sur le protocole SIP. PJSip est fourni en standard avec PJsua, un client SIP en ligne de commande que nous allons aborder dans ce billet.

Installation

Pour installer PJSip (et donc PJsua) sur votre système (exemple sous Ubuntu), il faut saisir les lignes de commandes suivantes:

# wget http://www.pjsip.org/release/1.0.1/pjproject-1.0.1.tar.bz2
# bzip2 -d pjproject-1.0.1.tar.bz2
# tar xvf pjproject-1.0.1.tar
# cd pjproject-1.0.1
# ./configure
# make dep
# make
# sudo make install
# sudo cp ./pjsip-apps/bin/pjsua-i686-pc-linux-gnu /usr/local/bin/pjsua

Premier lancement de PJsua

PJsua est un client SIP en ligne de commande (CLI) qui utilise les librairies PJSip.

Pour lancer le logiciel, il faut utiliser la commande suivante:

# pjsua

Le menu suivant devrait apparâitre:

Enregistrement d’un compte SIP

Nous allons commencer par nous enregistrer sur notre serveur SIP:

>>> +a
Your SIP URL: (empty to cancel): sip:login@monserveur.mondomaine.com
URL of the registrar: (empty to cancel): sip:monserveur.mondomaine.com
Auth Realm: (empty to cancel): login
Auth Username: (empty to cancel): login
Auth Password: (empty to cancel): password

Je n’utilise pas cette interface textuelle. Culture BSD oblige, je préfère passer les paramètres en ligne de commande de la manière suivante:

# pjsua –id sip:login@monserveur.mondomaine.com –registrar sip:monserveur.mondomaine.com –realm * –username login –password password

ou, encore mieux, par un fichier de configuration:

# vi login.cfg

–id sip:login@monserveur.mondomaine.com
–registrar sip:monserveur.mondomaine.com
–realm *
–username login
–password password

# pjsua –config-file login.cfg

Remarque: si vous souhaitez lancer PJsua directement sur votre serveur SIP il faut ajouter une option pour lui dire de fonctionner sur un autre port SIP (en effet le port par défaut 5060 est utilisé par votre serveur SIP).

# pjsua –local-port=5080 –config-file login.cfg

Nous allons maintenant simuler notre premier appel SIP

Pour simuler un appel entre notre compte « login » (défini dans le fichier login.cfg) et le compte « login2 » , il faut saisir en ligne de commande:

# pjsua –config-file login.cfg sip:login2@monserveur.mondomaine.com

Simuler un appel à partir d’un fichier .WAV

Si vous souhaitez simuler un appel non pas avec un péripherique d’entrée audio mais à partir d’un fichier .wav, il suffit de

# pjsua –config-file login.cfg –play-file=./monficher.wav sip:login2@monserveur.mondomaine.com

Conclusion

Nous avons abordés une infime partie des fonctionnalités proposées par PJSip. Je vous conseille la lecture des documentations officielles.

Catégories
Open-source Reseau Systeme

Nagisk passe en version 1.1

Nagisk, le script Perl permettant de surveiller son serveur Asterisk à partir de Nagios passe en version 1.1.

Les nouveautés sont les suivantes:

  • supervision des cartes Zaptel connecté(s) au serveur
  • supervision des ports des cartes Zaptel

Toutes les infos (procedure d’installation/configuration) sont disponibles sur cette page.

Catégories
Open-source Reseau Systeme

Supervision d’Asterisk avec Nagios

Les plugins pour surveiller son serveur SIP Asterisk à partir de Nagios sont assez nombreux. Mais aucun d’eux ne me convenait parfaitement. J’ai donc écrit un petit script nommé Nagisk (quel humour…) a exécuter localement sur le serveur Asterisk. J’utilise NRPE pour récupérer la sortie de ce script et l’intégrer à Nagios.

Nagisk permet de:

  • récupérer la version d’Asterisk (et donc au passage de savoir si le serveur est lancé…)
  • récupérer le nombre de d’utilisateurs SIP (online et offline)
  • récupérer le nombre de communications actives (appels en cours)

Récupération de Nagisk

J’ai créé un nouveau projet sous GitHUB ou vous pouvez télécharger la dernière version disponible de Nagisk.

Installation de Nagisk

Avant d’installer Nagisk sur votre serveur Asterisk, il faut d’abord y installer NRPE (par exemple en suivant ce tuto).

On commence par décompresser l’archive préalablement récupérée:

tar zxvf nagisk-1.2.tgz

Puis on copie le script Perl dans le répertoire des plugins Nagios:

cd nagisk

cp nagisk.pl /usr/local/nagios/libexec

On lui donne les bons droits:

chown nagios:nagios /usr/local/nagios/libexec/nagisk.pl

chmod 750 /usr/local/nagios/libexec/nagisk.pl

Certaines variables sont en durs dans le code (rien de méchant, juste le path pour accèder à Asterisk). J’utilise personnellement la commande sudo pour executé les commandes sur Asterisk afin que le script soit lancé par l’utilisateur nagios. Pour celà j’ai ajouté la ligne suivante dans le fichier /etc/sudoers:

nagios    ALL= NOPASSWD: /usr/sbin/asterisk

Configuration de NRPE pour lancer Nagisk

Il suffit d’ajouter les lignes suivantes dans le fichier de configuration de NRPE (/usr/local/nagios/etc/nrpe.conf):

command[check_asterisk_version]=/usr/local/nagios/libexec/nagisk.pl -c version

command[check_asterisk_peers]=/usr/local/nagios/libexec/nagisk.pl -c peers

command[check_asterisk_channels]=/usr/local/nagios/libexec/nagisk.pl -c channels

command[check_asterisk_zaptel]=/usr/local/nagios/libexec/nagisk.pl -c zaptel

command[check_asterisk_span]=/usr/local/nagios/libexec/nagisk.pl -c span -s 1

ps: il est possible de faire plus propre en utilisant les arguments NRPE mais je trouve cette solution plus lisible…

Une fois le fichier mofifié, il faut relancer NRPE:

/etc/init.d/nrpe restart

Configuration de Nagios pour surveiller son serveur Asterisk

Si vous souhaitez superviser un serveur SIP Asterisk dont le host_name est sip, il suffit d’ajouter les lignes suivantes dans un de vos fichiers de configurations:

define service{
use                     generic-service
host_name               sip
service_description     Check SIP
servicegroups           sip
check_command           check_nrpe!check_asterisk_version
}

define service{
use                     generic-service
host_name               sip
service_description     Check SIP peers
servicegroups           sip
check_command           check_nrpe!check_asterisk_peers
}

define service{
use                     generic-service
host_name               sip
service_description     Check SIP channels
servicegroups           sip
check_command           check_nrpe!check_asterisk_channels
}

define service{
use                     generic-service
host_name               sip
service_description     Check Zaptel card
servicegroups           sip
check_command           check_nrpe!check_asterisk_zaptel
}

define service{
use                     generic-service
host_name               sip
service_description     Check Zaptel Span 1
servicegroups           sip
check_command           check_nrpe!check_asterisk_span
}

Et voilà le résultat:

Conclusion

Nagisk semble remplir sa fonction, le script tourne depuis quelques temps chez moi sans problème. Il est distribué sous licence libre GPL v3 et il est bien sûr possible de le modifier pour l’adapter à vos besoins.

Catégories
Open-source Reseau Uncategorized Web

Installation d’une carte Digium avec Asterisk

Attention: « DAHDI is the new name for ‘Zaptel’ as of May 19th 2008 »

/etc/zaptel.conf devient /etc/dahdi/system.conf

/etc/asterisk/zapata.conf devient /etc/asterisk/chan_dahdi.conf

Les cartes Digium sont indissociables d’Asterisk. Elles permettent la gestion de liaisons téléphoniques de type E1/T1, ISDN ou PSTN.

Nous allons dans ce billet détailler l’installation d’une carte Digium TE220 (compatible E1/T1) sous Linux.

Installation de la carte

Une fois la carte déballée, il faut vérifier que le jumper de sélection entre les normes T1 (US) et E1 (Europe) est bien positionné. Pour une liaison RNIS Européenne (E1), il faut que les jumpers soient fermés.

Une fois la carte installée physiquement dans le serveur (slot PCI-X), nous allons, dans un premier temps, vérifier qu’elle est bien identifiée par Linux:

# dmesg

Found a Wildcard: Wildcard TE220 (4th Gen)

# lspci -n

04:08.0 0780: d161:0220 (rev 02)

On récupère sur le site de Digium la dernière version des librairies PRI:

# wget http://downloads.digium.com/pub/telephony/libpri/libpri-1.4.5.tar.gz
PS: Remplacer 1.4.5 par la dernière version disponible.

puis on les installe:

# tar zxvf libpri-1.4.5.tar.gz
# cd libpri-1.4.5
# make
# sudo make install

On enchaîne avec le téléchargement des drivers Zaptel:

# wget http://downloads.digium.com/pub/telephony/zaptel/zaptel-1.4.11.tar.gz
PS: Remplacer 1.4.11 par la dernière version disponible.

et leur installation:

# tar zxvf zaptel-1.4.11.tar.gz
# cd zaptel-1.4.11
# ./install_prereq test
=> On vérifie que les pre-requis sont OK (sinon on lance ./install_prereq install)
# ./configure
# make
# make install
# make config

La carte TE200 partage les mêmes drivers que les TE400 (module wct4xxp). Afin d’optimiser le démarrage des modules, j’ai également modifié le fichier /etc/sysconfig/zaptel en suppriment toutes les occurrences MODULES et en laissant la ligne suivante:

MODULES= »$MODULES wct4xxp »

Nous pouvons redémarrer le serveur pour vérifier que le module est bien lancé au démarrage. Pour vérifier:

# lsmod

wct4xxp               400512  0
zaptel                190852  3 wct4xxp

Attention: il faut installer libpri AVANT d’installer Asterisk sinon le driver ne sera pas généré. Si vous avez déjà Asterisk installé sur votre système, il faudra le réinstaller….

Configuration de la carte

Nous allons d’abord définir les caractéristiques de la carte dans le fichier /etc/asterisk/zapata.conf. Pour une liaison E1 PRI (standard en Europe), vous pouvez utiliser la configuration suivante (voir ici http://docs.tzafrir.org.il/dahdi-tools pour une liste complète des paramètres):

group=1
signalling=pri_cpe
switchtype=euroisdn
context=incoming
channel=>1-15,17-31

Puis les caractéristiques de la liaison E1/T1 utilisée. Pour cela, il faut éditer le fichier /etc/zaptel.conf:

span=1,1,0,ccs,hdb3
bchan=1-15,17-31
dchan=16

Initialisation de la carte

Si vous n’avez pas rebooter votre serveur depuis l’installation des drivers, il faut commencer par charger le driver Zaptel dans le noyau Linux:

# modprobe wct4xxp

Ensuite, on doit lancer la configuration (une fois la liaison E1 connectée sur la carte):

# ztcfg -vv

Vérification de l’état des liaisons E1

Le plus simple est d’utiliser l’utilitaire zttool qui affiche l’état des liaisons:

# zttool

Il est également possible de vérifier si les liaisons sont bien montées en lançant Asterisk en mode debug:

# asterisk -vvvr

Et voilou, et à bientôt pour voir comment utiliser ces liaisons avec Asterisk…

Catégories
Open-source Reseau

Connexion d’Asterisk au serveur SIP de Free

Suite à l’article d’hier sur la configuration d’un serveur Asterisk SIP sous Fedora, voici un tutoriel permettant de le connecter au serveur SIP de l’opérateur Free (Freephonie), ou à toutes autres opérateur SIP.

Ce que nous voulons obtenir:
– les appels sortant (vers fixes, portables) depuis un client SIP (X-Lite dans notre exemple).
– les appels entrant sont automatiquement basculés vers le client SIP, puis vers le téléphone branché sur la Freebox (si le client SIP ne décroche pas) et enfin vers la messagerie (si le téléphone ne décroche pas).

Êtes-vous prêt ? Alors c’est partie…

Configuration de votre compte SIP Free

La première chose à faire est d’aller sur l’interface d’administration de votre compte Free afin d’activer votre compte SIP (dans le menu Gestion de mes services de téléphonie).

Cette opération a pour but de rediriger les appels en SIP.

Il faut redémarrer la Freebox pour que la configuration soit prise en compte.

Configuration du serveur Asterisk

Nous allons apporter quelques modifications à notre fichier de configuration SIP (/etc/asterisk/sip.conf).

[general]
context=default
srvlookup=no
externip=81.54.223.16
localnet=192.168.1.0/255.255.255.0
defaultexpirey=1800
dtmfmode=auto
qualify=yes
register = utilisateur:motdepasse@freephonie.net
[freephonie_appelsortant]
type=peer
allow=all
host=freephonie.net
fromuser=utilisateur
username=utilisateur
secret=motdepasse
dtmfmode=inband
qualify=yes
fromdomain=freephonie.net
[freephonie_appelentrant]
type=peer
context=depuisfreephonie
host=freephonie.net
qualify=yes
allow=all

[nicolargo]
type=friend
username=nicolargo
secret=motdepasse
context=maison
quality=yes
nat=no
canreinvite=no
auth=md5
host=dynamic
dtfmode=rfc2833
allow=ulaw
context=internal

Il faut remplacer ‘utilisateur’ et ‘motdepasse’ par ceux fournis par Free dans l’interface d’administration Free.
‘exterip’ doit être remplacée par votre adresse IP publique (aussi récupérable sur l’interface d’administration Free).
‘localnet’ doit être remplacé par l’adresse réseau et le masque de votre réseau local.

Ensuite, on édite le fichier de plan de numérotation (/etc/asterisk/extensions.conf):

[maison]
; Numéros « maison »
exten => 10,1,Dial(SIP/nicolargo) ; quand on compose le 10, le softphone « nicolargo » sonnera
; numéros externes
exten => _9.,1,Dial(SIP/freephonie-out/${EXTEN:1}) ; quand on compose un numero qui commence par 9, on utilise le lien « freephonie » et on passe le numero au peer en ôtant le premier digit.
[depuisfreephonie]
; Contexte pour les appels recus depuis Free
exten => s,1,Ringing
exten => s,2,Dial(SIP/nicolargo)
exten => s,3,Congestion

Il ne reste plus qu’à faire prendre en compte la nouvelle configuration par votre serveur Asterisk:

# asterisk -r
*CLI> restart gracefully

Et voila, vous pouvez tester 😉

Mise à jour du billet

Dans le Linux magazine n°90, un article très complet sur comment configurer son serveur Asterisk avec le service Freephonie de l’opérateur Free.

Catégories
Open-source Reseau

Installation d’Asterisk sur Fedora

Asterisk est un serveur de téléphonie open-source permettant de disposer sur un simple PC de fonctions jusque là réservées aux PABX professionnel. Nous allons dans ce post installer un serveur Asterisk sur PC fonctionnant sous Fedora (Core 6). Nous nous limiterons à la configuration d’un serveur VoIP SIP sans passerelle vers le monde téléphonique.

Attention: si vous voulez utiliser une carte téléphonique de tpy eDigium dans votre serveur, il faudra l’installer AVANT d’installer Asterisk.

Installation d’Asterisk

Nous allons compiler la dernière version d’Asterisk (1.4.2) au moment de l’écriture de ce post à partir des sources (téléchargeable ici).Une fois le fichier téléchargé, il faut commencer par le décompresser:

# tar zxvf asterisk-1.4.2.tar.gz

On lance la compilation avec les commandes suivantes:

# cd asterisk-1.4.2
# ./configure
# make
# make install
# make samples
-> Seulement nécessaire pour un installation initiale. Écrase les fichiers de configuration actuels.
# make progdocs

PS: si vous souhaitez mettre à jour unes version existante d’Asterisk, il faut utiliser les commandes suivantes:

# cd asterisk-1.4.2
# ./configure
# make update
# make clean# make upgrade

Une fois l’installation terminée, vous pouvez tester Asterisk:

# /usr/sbin/asterisk -VAsterisk 1.4.2

L’installation est réussie, on peut passer à la phase de configuration.

Configuration d’Asterisk

Avant de nous attaquer aux fichiers de configuration. Voici la liste des répertoires utilisées par Asterisk:

  • /etc/asterisk contient les fichiers de configuration.
  • /usr/lib/asterisk/modules contient les modules utilisés par Asterisk (codec, applications tierces…).
  • /var/lib/asterisk/agi-bin contient vos scripts.
  • /var/lib/asterisk/firmware contient les drivers pour les cartes compatible Asterisk (par exemple Digium).
  • /var/lib/asterisk/images contient des images pour les applications les supportant.
  • /var/lib/asterisk/keys contient les clès publiques et privées (RSA)
  • /var/lib/asterisk/mohmp3 contient les musiques d’attente au format MP3 (CBR uniquement et pas de tag ID3).
  • /var/lib/asterisk/sounds contient les annonces vocales
  • /var/log/asterisk contient les logs du processus Asterisk

Comme nous allons nous limiter à une configuration purement SIP du serveur Asterisk (sans interface vers le monde téléphonique), la configuration est relativement simple.Il faut commencer par éditer le fichier /etc/asterisk/sip.conf:

[general]
context=default
srvlookup=no
[nicolargo]
type=friend
username=nicolargo
secret=password
quality=yes
nat=no
canreinvite=no
auth=md5
host=dynamic
dtfmode=rfc2833
allow=ulaw
context=internal

Nous venons de créer un utilisateur nicolargo sur le serveur.

Lancement d’Asterisk

Pour lancer la console d’administration Asterisk, il suffit de taper la ligne suivante:

# /usr/sbin/asterisk -c
*CLI>

Nous pouvons alors vérifier que l’utilisateur SIP a bien été créé:

*CLI> sip show users
Username Secret Account
code Def.
Context ACL NAT
nicolargo password default No RFC3581

Puis voir les détails de la configuration de l’utisateur nicolargo:

*CLI> sip show user
nicolargo* Name : nicolargoSecret : <Set>MD5Secret : <Not set>Context : defaultLanguage :AMA flags : UnknownTransfer mode: openMaxCallBR : 384 kbpsCallingPres : Presentation Allowed, Not ScreenedCall limit : 0Callgroup :Pickupgroup :Callerid : « nicolargo » <1208>ACL : NoCodec Order : (gsm:20,ulaw:20,alaw:20)Auto-Framing: No

Pour arrêter le serveur, il faut saisir la commande suivante:

*CLI> stop gracefully

Test du serveur à partir d’un client SIP

Pour mes tests j’ai utilisé X-Lite (disponible sous Linux, Mac et Windows), qui a le bon goût d’être gratuit et parfaitement compatible avec la norme SIP.La configuration doit être la suivante:

L’enregistrement sur le serveur Asterisk (192.168.29.246 dans mon cas) se passe alors sans problème:

Si vous avez un problème pour vous connecté à votre serveur Asterisk, pensez à regarder du coté des règles de Firewall (iptables). Il faut ajouter la règle suivante:

# iptables -A RH-Firewall-1-INPUT -p udp -m udp –dport 5061 -j ACCEPT

A partir de maintenant (et en définissant d’autres utilisateurs), vous devez être capable d’effectuer des appels SIP à l’intérieur de votre réseau.Voila donc une première étape de faite. Dans un prochain post nous verrons comment interfacer notre nouveau serveur vers un serveur père (par exemple chez votre fournisseur d’accès Internet)…
Pour ceux que cela intéresse, cet article raconte le retour d’expérience de l’installation d’une serveur Asterisk en entreprise.