Vous êtes sur la page 1sur 13

TP Voix sur IP SIP et Asterisk

Ce TP propose une installation et un test dun serveur et de clients afin de mettre en oeuvre le protocole SIP. Lobjectif est danalyser les comportements des logiciels, et de comprendre le protocole SIP en lui mme travers plusieurs exemples. Le sujet de ce TP est un guide pour la mise en oeuvre minimale du service SIP, mais il est demand aux lves de se poser des questions sur le fonctionnement de SIP, et de profiter de cette mise en oeuvre pour tester et observer des comportements du protocole (en plus de ce qui est demand dans ce document). Par ailleurs, la configuration des logiciels clients nest pas explique, il est laiss ltudiant le soin de rechercher comment les configurer pour senregistrer avec le serveur et mettre des appels. Ce TP se fait sous le systme dexploitation LINUX (natif ou par une image virtuelle). Le schma du TP est le suivant : nous allons install un serveur VoIP (nomm Asterisk), crer des comptes utilisateurs pour des clients, et dfinir un plan de numrotation qui permettent dappeler ces clients. Dun autre ct, nous allons installer des clients VoIP qui utiliseront ce serveur pour mettre des appels et tre appels. Les tches raliser sont les suivantes : Crer les comptes client sur le serveur Configurer le logiciel client Enregistrer le client Raliser un appel sur un numro de test Crer et enregistrer un deuxime client Raliser des appels entre les deux clients, en changeant les options des diffrents comptes, et en changeant la configuration du rseau Ce TP est faire en binme. Un rapport au format PDF sera rendre (nicolas.montavont@telecom-bretagne.eu) par email pour rpondre aux questions poses dans le sujet

Prise en main du TP
1. Suite logiciels utiliser Afin de mettre en uvre un service de VoIP, et danalyser les comportements serveur et client les logiciels suivants seront utiliss : jitsi (client SIP) linphone (client SIP) Ekiga (client SIP, H323) xmeeting (client SIP, H323) Asterisk (serveur VoIP serveur SIP) : Asterisk est un serveur VoIP / IP PBX trs riche, qui permet de mettre en uvre de nombreuses fonctionnalits. Entre autres, Asterisk permet dinstaller les quelques services suivants : Serveur SIP (registrar, proxy) Serveur H323 (gatekeeper) Passerelle IP RTC Messages de rpondeur par email Music On Hold Transcodage Dans le cadre de ce TP, nous allons mettre en place certaines de ces fonctionnalits Wireshark : Le logiciel Wireshark permet de visualiser les trames changes sur le rseau, et il est capable danalyser et dinterprter ces dernires. Lancez le logiciel avec lutilisateur root, et lancez la capture sur linterface rseau utilise. En fin de capture, il est possible de demander Wireshark danalyser les transactions SIP, en allant dans le menu analyse / SIP transactions. 2. Tutorial Asterisk 2.1. Manipulation Asterisk est dj install sur lordinateur. Lensemble des fichiers de configuration se trouve dans /etc/asterisk. Il y a notamment les fichiers extensions.conf et sip.conf qui sont les fichiers principaux pour configurer un service SIP. Le fichier sip.conf regroupe la configuration du protocole SIP sur Asterisk, savoir les proxy / provider / clients. Le fichier extensions.conf est le fichier principal du serveur Asterisk, celui qui indique le plan dappel du serveur (voir plus loin pour plus dinformations sur la configuration de ces fichiers). Prendre soin de faire une copie des fichiers initiaux (les renommer <nom_fichier>.old par exemple), et copier ensuite les fichiers sip.conf et extensions.conf du bureau vers le rpertoire /etc/asterisk pour pouvoir diter ces fichiers. Le logiciel lit exclusivement les fichiers dans le rpertoire /etc/asterisk.

2.2. Manipulation dAsterisk Pour lancer Asterisk, il faut taper la commande suivante dans un terminal avec les droit administrateur : asterisk vvvc Il est galement possible de se connecter la console Asterisk afin dinterroger le serveur, et de voir tous les messages de fonctionnement (si jamais vous quittez le terminal). Pour se connecter une instance dAsterisk en cours, dans un terminal, il faut taper la commande : asterisk r Pour sortir de la console, il suffit de faire un ctrl-C (attention, cette commande de tue pas le processus asterisk, mais quitte uniquement la console). Pour tuer une instance dasterisk, le plus simple est de tuer le processus (kill -9 <numro_de_processus>). 2.3. La console Asterisk La console Asterisk permet dinterroger le dmon Asterisk, de regarder la liste des utilisateurs, les modules en place, de les redmarrer et davoir dventuels messages derreurs. Une fois entr dans la console (asterisk r), voici quelques commandes utiles : help : liste lensemble des commandes disponibles dialplan reload : recharge le fichier extensions.conf ncessaire aprs une modification dans le fichier sip reload : recharge le fichier sip.conf ncessaire aprs une modification dans le fichier sip show peers : liste lensemble des clients SIP configurs sur Asterisk avec certain paramtre, comme ladresse IP, et indique combien de clients sont connects sip show users : liste lensemble des clients SIP avec leur mot de passe sip show user <username> : dcrit les paramtres de lutilisateur SIP <username> sip set debug : permet de passer le protocole SIP en mode debug, o vous verrez tous les messages et tats du protocoles SIP dans la console dialplan debug : permet de passer le plan de numrotation en mode debug, pour voir les oprations effectus par Asterisk en temps rel Note : Lorsque vous jouerez avec les diffrentes configurations possibles, il nest pas forcment ncessaire de redmarrer le serveur Asterisk. Seul un module peut tre redmarr (en tapant le nom du module et reload) 2.4. Sip.conf Le fichier /etc/asterisk/sip.conf regroupe lensemble des options configurables pour installer des services SIP. Cette section donne une aide pour la configuration de ce fichier. Le fichier sip.conf commence avec une section [general] qui donne la configuration par dfaut pour tout utilisateur et provider. Tout lment de cette section sera crase par des dfinitions spcifiques dfinies plus loin dans le fichier. Ces extensions (appels canaux SIP) sont dfinies entre crochet. 3

Voici quelques paramtres possibles pour la section [general] : Domain (example.com) : configure le nom de domaine sur lequel travaille Asterisk. Bindaddr / bindport (adresse IP x.x.x.x ou 0.0.0.0 pour toutes les adresses du serveur / numero de port par dfaut : 5060) : les adresses IP et numros de port sur lesquels le serveur Asterisk doit tourner Srvlookup (yes, no) : indique Asterisk de faire des requtes DNS, notamment pour utiliser des adresses logiques contenant des noms de domaines Support NAT : plusieurs paramtres peuvent tre configurs si le serveur Asterisk est derrire un NAT : o Externip (=x.x.x.x) : adresse publique du botier NAT o Localnet (=x.x.x.x/n.n.n.n => adresse IP/netmask) : rseau local sur lequel se trouve gnralement les clients (par exemple : 192.168.0.0/255.255.255.0) o Nat (= yes | no) : influence la dclaration des utilisateurs SIP (peers, users) pour indiquer que ces utilisateurs sont eux-mmes derrire un boitier NAT par rapport lAsterisk Les canaux SIP suivants sont possibles : User : authentifie les appels entrants (peut seulement appeler) Peer : authentifie les appels sortants (peut seulement tre appel) Friend : authentifie les appels entrants et sortants (peut appeler et tre appel) Voici quelques paramtres disponibles pour configurer les canaux SIP (user, peer, friend) : Type (= <type du client SIP>) : indique le type du client, cest--dire friend, user ou peer Context (<nom_contexte>) : indique le contexte dans le plan de numrotation (extensions.conf) dans lequel les instructions pour cette extension seront excutes. Plusieurs extensions peuvent avoir le mme contexte Callerid (<nom <numro>> - exemple : =John Smith <555>) : Nom complet de lutilisateur, qui sera utilis en dernier recours si rien dautre nest disponible pour affichier un nom dutilisateur lors dun appel Fromuser (<from_ID>) : Dfinit lutilisateur mettre dans le champ from la place du caller ID (comportement trange observ sur lAsterisk ne pas utiliser) Username (<username[@realm]>) : Nom dutilisateur utilis pour lauthentification. Le username doit tre le mme que le nom de lexension entre [] secret : mot de passe utilis pour lauthentification Host (= dynamic | x.x.x.x) : indique ladresse IP dune extension. Si la valeur de host vaut dynamic, le client est autoris se connecter par nimporte quelle adresse. Mailbox (= <number>@<context>) : Numro de mailbox avec le contexte associ directmedia (yes, no, nonat, update) : indique si Asterisk doit tre au cur de tous les changes entre deux clients, cest--dire si les flux RTP doivent obligatoirement passer par Asterisk, ou sils peuvent directement tre changs entre les clients. Allow / disallow (= all | gsm | alaw | ulaw | g729 | g726 | g723.1 | ilbc | speex) : Permet ou interdit lutilisation de codecs. Les rgles dfinies dans un canal SIP sajoutent aux rgles 4

dfinies dans la section [general]. Afin de r-initialiser ces rgles pour un certain canal, il faudra commencer par disallow=all Dtmfmode (= inband | rfc2833 | INFO) : dfini comment les tonalits DTMF sont transmises (dans la bande, i.e., dans le flux audio, ou hors bande comme de la signalisation) Nat (= yes | no | never): indique si un NAT se trouve entre le client et Asterisk. Dans le cas o nat=yes, Asterisk ignorera le champs Contact Information et utilisera ladresse du paquet

Exemple : [general] context=default port=5060 bindaddr=0.0.0.0 srvlookup=yes [peter] type=friend nat=no ; Telephone without NAT host=dynamic ; the devices can be registered with different IPs each time 2.5. Extensions.conf Comme nous lavons dj dit, Asterisk propose une multitude de protocoles. Il lui faut alors un moyen de connatre les actions mener lors dun appel, pour rediriger les appels vers le bon protocole et / ou le bon destinataire. Le fichier /etc/asterisk/extensions.conf indique Asterisk comment router / commuter les appels, cest le plan de numrotation. Extensions.conf indique les actions entreprendre lorsque des INVITE vers un numro ou un utilisateur arrivent sur Asterisk. Ce fichier est compos en trois zones : la zone gnrale o se trouve les paramtres gnraux pour toute larchitecture, la zone globale o on insre des variables globales qui seront utilises dans la troisime zone qui est constitue de plusieurs sous-zones appeles contextes . Section gnrale Ici sont dfinis les paramtres gnraux du serveur : autofallthrough= yes ; raccrochage automatique aprs lappel (par dfaut, le champ est yes) static= yes ; en binme avec l'option suivante writeprotect = no ; modification possible depuis la CLI Section globale Dans cette section, on dclare des variables pour, par exemple, des numros de tlphone ou des variables faisant appel des fichiers son pour le parcage ou autre.

<Nom_variable> => <valeur ou chemin du fichier> Section contexte Chaque contexte dfinit une portion du plan dappel, les contextes permettent de diviser de manire prcise la gestion des appels. On peut crer par exemple un contexte pour filtrer les appels entrants et un autre pour filtrer les appels sortants. Les filtres qui seront mis en place seront fonction des rgles que vous voulez mettre en place : autoriser certains appels seulement, utiliser une certaine ligne tlphonique pour un certain type de numro (portable fixe international) selon les tarifs des oprateurs. Le contexte en lui-mme est dfini par une srie de rgles par numro (ou ensemble de numro). Pour un mme numro, on pourra dfinir une srie dinstructions squentielles, identifes par un numro de squence. Exemple : [default] Exten => 118,1,Dial(Sip/toto) Exten => 119,1,Dial(Sip/obelisk) Syntaxe : [] : dfinition des contextes (ex : general) exten => <numro>, #, Action o <numro> : donne le numro de tlphone ou le nom de client qui appelle, et donc qui doit tre redirig vers le bon destinataire o # : numro de laction, utilis pour le squencement daction. On commence par 1, et si dautres actions doivent suivre, on incrmente de ce numro o Action : reprsente la tche raliser par Asterisk. Les actions suivantes sont possibles : Answer() Wait() Voicemail() Hangup() Dial(SIP/<canal>) Goto(<context>, <numro>, #) Notez que les fichiers dorigine de la configuration du serveur (qui sont nomms sip.conf.old et extensions.conf.old sont dans /etc/asterisk et donnent beaucoup dexemples de configuration.

Travail faire
3. Configuration du rseau Nous utiliserons deux topologies rseau pour raliser ce TP. La premire consiste en une architecture simple, o tous les noeuds appartiennent au mme sous-rseau, alors que nous utiliserons un architecture avec des NAT dans un deuxime temps. Pour la premire topologie, nous pourrons utiliser le rseau sans fil nomm TPVOIP. Il ny a pas de serveur DHCP sur ce rseau, il vous appartient donc de configurer vos machines (soit en configurant manuellement les adresses IP sur les postes, soit en installant un serveur DHCP). Dans cette premire topologie, nous allons configur un serveur VoIP, et deux clients au moins pour faire des tests de fonctionnalits. 1. Proposer un plan dadressage pour un ensemble dun serveur et deux clients. Reprsenter la topologie du rseau sur un schma, en indiquant les adresses IP de chaque quipement, et leur rle. Prciser quelle mthode de configuration (IP) a t retenue.

4. Registrar SIP La premire tape du TP est de configurer un compte pour un client SIP et de vrifier que le client est mme de senregistrer et dappeler le serveur. Dans cette premire tape, il sagit de configurer un client logiciel (choisissez jitsi ou linphone pour commencer), et le fichier sip.conf sur Asterisk. Commencez par crer les informations de compte client sur le serveur. Pour cela, il faut diter le fichier sip.conf de lasterisk (situ dans /etc/asterisk) qui regroupe lensemble de la dfinition du service SIP. Faire une sauvegarde du fichier actuel, et repartir dun fichier vierge. Les champs minimums dfinir dans sip.conf par client sont les paramtres suivants : Type Codecs (allow=all pour commencer) host (adresse IP du client) Une fois que les informations client ont t sauvegardes, dmarrer le serveur asterisk (asterisk c) ou alors recharger la configuration SIP du serveur (sip reload dans la console Asterisk) si le serveur est dj lanc. A prsent ouvrir jitsi ou linphone, et configurer un compte client qui correspond au mme nom dutilisateur que celui cre sur le serveur. Indiquer ladresse IP de votre serveur comme serveur / domaine. Une fois les configurations ncessaires faites sur le client et le serveur, le client doit pouvoir senregistrer auprs de lAsterisk. Vous pourrez le vrifier avec la commande sip show peers ou encore sur le logiciel client qui doit indiqu connect ou online. Vous pouvez galement vrifier lenregistrement du client par le logiciel de captures de trames wireshark.

2. Comment se droule lenregistrement ? Expliquer cet enregistrement et donner une illustration des messages changs. Installer un client sur une machine diffrente du serveur, et un client sur la machine o tourne le serveur. 3. Quels sont les numros de port utiliss par ces clients SIP lors de leur enregistrement ? Expliquer. Ensuite, pour tester si le client arrive mettre des appels, vous pouvez configurer un numro de tlphone pour appeler le service echo. La fonction echo se configure de la faon suivante : exten => 600,1,Playback(demo-echotest) exten => 600,n,Echo exten => 600,n,Playback(demo-echodone) exten => 600,n,Goto(s,6) Ce service fonctionne en mono-utilisateur, et renvoie simplement ce que vous dites. Ceci permet de tester la latence entre le serveur et le client. Aprs avoir ajout ces lignes dans le fichier extensions.conf, ne pas oublier de le recharger pour Asterisk (taper dialplan reload) A prsent, ajouter un mot de passe pour empcher quun autre utilisateur puisse se connecter au serveur votre place. Pour cela, ajouter le champs secret dans la configuration SIP du serveur concernant ce client et recharger la configuration SIP. Observer dans Wireshark les messages envoys pour lenregistrement. 4. Comment se droule lenregistrement ? Expliquer cet enregistrement et donner une illustration des messages changs lorsque le mot de passe entr par lutilisateur est correct, et lorsquil ne lest pas. A prsent indiquer au logiciel client de se mettre offline (dconnect). Observez lchange de messages dans Wireshark. 5. Comment se droule la dconnexion ?

5. Communication entre deux clients A prsent, nous allons effectuer des appels entre les deux clients, travers le serveur Asterisk. Pour cela, ajouter le paramtre suivant pour chacun des client : directmedia=No Une fois que les deux clients sont configurs et enregistrs, il faut indiquer Asterisk comment diriger les appels vers ces clients. Il faut pour cela ajouter une ligne pour chaque utilisateur dans le fichier extensions.conf, qui indique pour le numro appel, de rediriger lappel vers le protocole SIP/<nom_utilisateur>. (voir tutorial en dbut de document). 8

Tester la communication entre les deux clients. 5.1. Analyse des comportements des clients et serveurs Maintenant que la configuration client et serveur est en place, analysez les messages dans Wireshark. 6. Quels sont les messages utiliss pour tablir la session (mettre lappel) ?

7. Quels sont les messages utiliss pour transporter la voix ?

8. Quels sont les messages utiliss pour clore la session (terminer lappel) ?

9. Identifiez les sources et destinations de chaque message (faire un diagramme dchange de messages). Que peut-on en conclure ?

10. Quelles sont les numros de port utiliss par chaque message ? O sont ngoci les numros de ports pour le mdia ?

Changez prsent dans le fichier sip.conf le paramtre directmedia des deux clients (mettre la valeur <Yes>. (Il peut tre prfrable de relancer les clients une fois cette configuration charge dans Asterisk. 11. Quelle est la diffrence dans une communication ? Quen dduisez vous sur le comportement du serveur ? Vous pouvez galement mettre un client offline (quitter le logiciel client par exemple), et avec lautre client lappeler.

12. Que se passe-t-il ?

5.2. Negocitation des codecs et qualit audio Dans les logiciels clients, dsactiver tous les codecs, sauf un, le mme sur chaque client, qui sera successivement : g711a gsm g723a speex Configurer un taux derreur et de dlai sur linterface de votre serveur par la commande tc : Ajoute un dlai fixe de 100ms : tc qdisc add dev eth0 root netem delay 100ms Ajoute un dlai variable +/-20ms : tc qdisc add dev eth0 root netem delay 100ms 20ms Ajoute une perte de 3%, avec un corlation de 25% avec la perte prcdante : tc qdisc change dev eth0 root netem loss 0.3% 25% Etablir les appels entre les deux clients. 13. Observez vous la mme qualit audio selon les diffrents codecs utiliss ? Si non, quelle observation pouvez vous faire ? Remettre tous les codecs disponibles du ct des logiciels client. Mettre prsent disallow=all pour les deux comptes clients sur le serveur, et uniquement autoriser le codec GSM pour un des clients et Speex pour lautre. 14. Est ce que lappel est bien ralis (dcrire ce que lon observe) Remettre directmedia=no. 15. Est ce que lappel est bien ralis (dcrire ce que lon observe)

6. VoIP en environnement de NAT A prsent, nous allons considrer des rseaux diffrents entre le serveur et le client, dont lun de ces rseaux sera derrire un NAT. Le rseau sans fil TPVOIP sera derrire un NAT, alors que le rseau filaire restera en adressage public. 6.1. Les clients sont derrire le NAT

10

Mettre dans un premier temps le serveur dans lespace public, et les clients dans lespace dadressage nat. Dans un premier temps, enlever toute configuration directmedia des clients dans le fichier sip.conf. 16. Reprsenter larchitecture rseau, et ladressage de chacune de vos machines.

17. Le client peut-il senregistrer ? Expliquer. Changer prsent la configuration des clients dans le fichier sip.conf en ajoutant le champs nat=yes. 18. Le client peut-il senregistrer ? Expliquer. Taper la commande sip show peers dans la console asterisk. 19. A quoi correspond ladresse IP / numro de port affich pour le client ? Raliser le test dappel echo (600) avec lun de vos clients. 20. Comment se droule lappel ? (Dtailler ltablissement de session, et le chemin des flux RTP pour chaque tude) Raliser un appel entre les deux clients. 21. Comment se droule lappel ? Dplacer un client dans lespace dadressage public, et essayer nouveau lappel entre les deux clients. Tester la symtrie de lappel : raliser un appel partir de chaque client 22. Comment se droule les appels ? Dans quel sens la communication est-elle possible ? Pourquoi ? Mettre le champs diremedia no pour le client situ derrire le NAT et ressayer lappel entre les deux clients. (appel partir de chaque client) 23. Comment se droule les appels ? Dans quel sens lappel est-il possible ?

11

6.2. Le serveur est derrire le NAT A prsent, inverser la configuration, et mettre le serveur derrire le NAT, et les clients dans lespace dadressage public. Sur le NAT, rediriger le trafic destination du port 5060 pour quil arrive sur le serveur Asterisk. 24. Par quelle adresse le serveur Asterisk sera-t-il joignable partir dInternet? Ajouter dans la configuration gnrale du fichier sip.conf le paramtre suivant : [general] externalip=80.123.123.123 localnet=192.168.1.0/255.255.255.0 Modifier la configuration des tlphones. Vrifier que les deux tlphones senregistrent auprs du serveur. Raliser un appel entre les deux tlphones. 25. La session est-elle tablie entre les deux tlphones ? Est ce que le son passe entre les deux tlphones ? Editer le fichier /etc/asterisk/rtp.conf pour identifier la plage de port rediriger vers le serveur, et configurer le NAT. 26. La session est-elle tablie entre les deux tlphones ? Est ce que le son passe entre les deux tlphones ?

7. Service de messagerie vocale Nous allons prsent configurer une messagerie vocale pour les utilisateurs. Pour cela, il faut configurer la messagerie dans voicemail.conf, puis indiquer le numro de messagerie dans la configuration de lutilisateur SIP, et enfin ajuster le plan de numrotation. Modification dans le fichier voicemail Commencer par indiquer le numro de la messagerie, associ la mailbox de la manire suivante : <numro de voicemail> => <mot de passe>, <nom dutilisateur>, <email>, <option(s)> Exemple : 1000 => 0000, Claude Chabrou, claude@email.com Modification dans le fichier sip.conf Ajouter une ligne dans les clients indiquer leur numro de voicemail laide de la syntaxe suivante : 12

mailbox=<numro de mailbox> Modification dans le fichier extensions.conf Il va falloir changer le plan de numrotation de telle sorte que si lutilisateur pour lequel vous crez le voicemail ne rpond pas un appel, sa messagerie se met en route. Il faut donc retrouver le plan de numrotation pour cet utilisateur, et le modifier en appelant la commande voicemail, qui est dfini de la faon suivante : Voicemail Enregistre un canal en sauvant laudio dans un fichier pour un numro de bote vocale donn. VoiceMail(boxnumber[@context][&boxnumber2[@context]][&boxnumber3],[flags]) Les flags peuvent tre les suivants : s: Evite le message "Please leave your message after the tone. When done, hang up, press the pound key." u: Joue le message dindisponibilit. Par dfaut, le message est : "The person extension ... 1234 ... is unavailable,", mais ce message est modifiable en interrogeant bote vocale. b: Joue le message Occup. Par dfaut, ce message dit : "The person at extension 1234 ... is busy."

or at sa ...

Lappel de notre extension doit donc sonner pendant une dure, et si personne ne dcroche, appeler la messagerie correspondante : exten => <phone_number>,1,Dial(SIP/<phone_number>,20,tr) ;le tel sonne pendant 20s exten => <phone_number>,2,VoiceMail(<numro_messagerie>@<context>,u) exten => <phone_number>,102,VoiceMail,b<numero_messagerie> La dernire ligne est utilise si lutilisateur <phone_number> est en communication alors quun appel arrive pour lui. La priorit 102 (101+1) est du au fait quAsterisk fait un saut de 101 dans la priorit lorsque lutilisateur demand est occup. Ecouter sa messagerie A prsent, il ny a plus qu ajouter un plan de numrotation pour consulter sa messagerie. Notez que le numro de rpondeur sera le mme pour tout le monde, et quun serveur vocal vous demandera votre numro de messagerie ainsi que le mot de passe. Cela peut tre ajout par lentre suivante : exten => <numro_rpondeur>,1,Ringing exten => <numro_rpondeur>,2,Wait(2) exten => <numro_rpondeur>,3,VoiceMailMain() Tester le service de messagerie.

13