Catégories
Open-source Reseau

Siproxd rapproche SIP et NAT

SIP est le protocole de signalisation pour effectuer des communications de type voix sur IP (VoIP). Lorsque la communication est établie, il passe la main au protocole RTP qui permet le transport de la voix sur le réseau. Dans une architecture réseau incluant des fonctions de translation d’adresse (NAT), les choses se compliquent (voir cet article en anglais). En effet, si plusieurs clients SIP se trouve derrière un routeur NAT, ce dernier ne va pas savoir établir les sessions entrantes (comment savoir vers quel client SIP faut il envoyer les flux).Vous pouvez lire ce billet qui détaille cette problématique.

On se retrouve devant plusieurs solutions techniques:

  • utilisation d’un tunnel IP entre le routeur NAT et le serveur SIP
  • utilisation de redirection statique (par client) au niveau du routeur NAT en utilisant des numéros de ports SIP et RTP différents
  • utilisation d’un proxy SIP au niveau du routeur NAT

C’est cette troisième solution que nous allons mettre en place dans ce billet en utilisant le proxy SIP libre siproxd sur votre routeur NAT GNU/Linux.

Installation de Sipproxd

Actuellement disponible en version 0.7.2, vous pouvez soit compiler les sources, soit installer depuis les dépôts de votre distribution GNU/Linux. Par exemple sous Ubuntu:

[shell]

sudo aptitude install siproxd

[/shell]

Il faut ensuite modifier le fichier /etc/default/siproxd et remplacer le 0 par 1.

Configuration de Sipproxd

Le fichier de configuration unique /etc/siproxd.conf est très bien commenté. Dans un cas standard ou le routeur NAT GNU/Linux a deux interfaces (eth0 pour l’interface coté LAN et eth1 pour l’interface NATé), il suffit juste de modifier la configuration en changeant les deux lignes suivantes:

[shell]

if_inbound = eth0

if_outbound = eth1

[/shell]

Lancement de Sipproxd

Sous Unbuntu,c’est assez simple:

[shell]

/etc/init.d/sipproxd start

[/shell]

Configuration des clients SIP

Il ne reste plus qu’a configurer vos clients SIP dans la section « Proxy SIP » et de mettre l’adresse IP de votre routeur NAT (coté LAN donc l’adresse de eth0 dans notre cas).

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 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 Systeme

Xmeeting: un client H.323 et SIP pour Mac OS X

J’étais depuis quelques temps à la recherche d’un client H.323 gratuit pour mon MacBook. J’ai trouvé mon bonheur avec Xmeeting. En plus d’implémenter toutes les fonctions d’un bon client H.323, il est en plus compatible avec le protocole émergeant dans la téléphonie: SIP. Pour ne rien gâcher, le client est open-source et disponible sous Sourceforge.

L’installation du logiciel ne pose aucun problème. Pour l’intégration à un Gatekeeper H.323 et au serveur SIP, il faut se rendre dans le menu Préférences/Comptes et créer les nouveaux comptes:

Il faut ensuite associé ces comptes (H.323 et SIP) à votre profil via le menu Préférences/Configuration:


L’intégration à Mac OS X est très bonne, notamment avec le carnet d’adresse. Il est ainsi possible de passer des appels téléphoniques directement en sélectionnant un numéro de téléphone (si vous avez une passerelle SIP) ou une adresse IP d’un client SIP ou H.323.

Au niveau technique, en plus du support de SIP et H.323, le logiciel propose:

  • codecs video: H.264 / H.263 et H.261
  • codecs audio: G.711 uLaw & -ALaw avec fonction de suppression d’écho
  • STUN pour rendre compatible le H.323 avec les réseaux « NATés »
  • enregistrement possible des conférences au format QuickTime