RAPPORT DE STAGE AU SRC : MISE EN PLACE D' UNE SOLUTION VOIP - TUTEUR ERASMUS : M. CUNNINGHAM TUTEURIUT :M.CHLEBOWSKI

 
CONTINUER À LIRE
RAPPORT DE STAGE AU SRC : MISE EN PLACE D' UNE SOLUTION VOIP - TUTEUR ERASMUS : M. CUNNINGHAM TUTEURIUT :M.CHLEBOWSKI
Grassart Benjamin                             Athlone Institute of Technologies
                                 Dublin Road, Athlone, Co. Westmeath Ireland.

                  Rapport de stage au SRC :
               Mise en place d' une solution VoIP

Tuteur ERASMUS : M. Cunningham                       année 2009-2010
Tuteur IUT     : M. Chlebowski

                                                                        Page 1
RAPPORT DE STAGE AU SRC : MISE EN PLACE D' UNE SOLUTION VOIP - TUTEUR ERASMUS : M. CUNNINGHAM TUTEURIUT :M.CHLEBOWSKI
Page 2
Remerciements

Je tiens à remercier M. Anthony Cunningham, pour m' avoir acceuilli dans son département de recherche, et
de m' avoir ainsi permis d' acquérir de nouvelles compétences et une expérience valorisante, tant au niveau
professionnel que linguistique.

Je remercie également M. Cormac Mulally, pour l' aide qu' il nous a apportée dans la résolution de certains
problèmes techniques.

Plus généralement, je souhaite remercier le personnel du département de recherche de l' université d'
Athlone, pour leur accueil chaleureux et notre intégration réussie.

Enfin je souhaite remercier les professeurs de l' IUT, qui m' ont apporté les connaissances et les méthodes
pour mener à bien ce stage, et particulièrement M. Chlebowski pour le suivi qu' il a effectué.

                                                                                                   Page 3
Résumé francais

Durant ce stage, nous avons tout d' abord pris connaissance du lieu, le SRC, de leur mission, la recherche sur
le réseau sans oublier leur projet principal le SUNAT. Nous avons ensuite installé progressivement et pas à
pas une solution VoIP afin de répondre à la problématique « Comment faire une conversation orale sur le
réseau internet », puis participé au développement d' un utilitaire pour évaluer la qualité des conversations
VoIP. Durant cette expérience, nous avons réutilisé un grand nombre de nos connaissances accumulées en
DUT informatique, tout en les approfondissants. Nous avons particulièrement progressé en réseau et en
anglais, mais aussi étudié des protocoles et eu une expérience de la mise en place d' une solution open-
source. Par ailleurs le stage ERASMUS permet un enrichissement personnel et une ouverture d' esprit qui ne
seraient pas les mêmes lors d' un stage traditionel en France.

                                                                                                      Page 4
English summary

During this placement, first we have taken some information about our working-place, the SRC, about their
role, doing some research on network protocol (SCTP, WIFI 802.11n), and finally about the main projet,
SUNAT. Secondly, we have installed step by step a VoIP solution in order to solve the following problem :
"How to make phone calls using the internet network ? ", then we have worked on software whose role is to
evaluate the quality of VoIP conversations. During this experience, we have used a lot of knowledge that we
have learned while studying computer-science DUT, and we have expended on it. We have made progress
particulary in English and in network technologies, we also studied protocols and implemented an open-
source solution for VoIP. Besides the ERASMUS placement has helped us to gain a maturity and to be
more open-minded, it wouldn't be the same if we had done the placement in France.

                                                                                                   Page 5
Sommaire

Remerciement.......................................................................................................................................3

Resume francais....................................................................................................................................4

Resume anglais.....................................................................................................................................5

I Introduction........................................................................................................................................6

II Présentation gérérale ........................................................................................................................7
    a) Présentation de l'AIT et du SRC.................................................................................................7
    b) Fonctionnement du SRC.............................................................................................................8
    c) Présentation du projet.................................................................................................................9

III Le stage..........................................................................................................................................10
    a) Découverte et installation au SRC............................................................................................10
    b) Documentation préalable : La VoIP..........................................................................................11
    c) Mise en place de la solution sur le réseau local........................................................................12
    d) Déploiement de la solution sur internet....................................................................................14
          le proxy.................................................................................................................................14
          Configuration finale.............................................................................................................15
    e) Développement du logiciel d' analyse des Délais.....................................................................16

IV Bilan..............................................................................................................................................17
   a) Bilan Technique........................................................................................................................17
   b) Bilan Humain............................................................................................................................18

V Conclusion......................................................................................................................................19

VI Glossaire........................................................................................................................................20

VII Bibliographie................................................................................................................................23
         Site web : .............................................................................................................................23

                                                                                                                                             Page 6
I Introduction

La problématique de la communication au sein d' un service (informatique ou non) est une question
fondamentale, et influence considérablement son efficacité. Par extension, la qualité de cette composante
dans une entreprise influence sa compétitivité, c' est pourquoi il est primordial de ne pas la négliger et d'
utiliser des outils adaptés.

Récemment une nouvelle technologie s' est développée pour effectuer des appels téléphoniques à travers un
réseau informatique classique, il s' agit de la *VoIP pour “ Voice over Internet Protocol ”. Outre le réseau;
elle ne nécessite que des postes informatiques “normaux” (équipé de casque/micro), et aucun matériel
spécifique.

Au sein du département de recherche de l' Athlone Institute of Technology ( *AIT) que nous présenterons,
nous mettrons en place ce système ainsi qu' un réseau personnalisé pour répondre au mieux à ses besoins.

Pour ce faire, nous utiliserons des logiciels libres, linux en temps que *système d'exploitation et *opensips
comme “serveur téléphonique”, nous expliciterons davantage son fonctionnement dans la partie
développement.

Enfin nous n' omettrons pas de faire le bilan sur cette expérience; ce qu' elle nous a apporté, les difficultés
rencontrées, ce que nous aurions pu faire en plus.

                                                                                                       Page 7
II Présentation gérérale
a) Présentation de l'AIT et du SRC

l' AIT bénéficie du projet ARE*, dont le but est de développer la recherche et développement de l' Irlande,
ceci en installant / développant des centres de recherche dans les instituts de technologie. Le but final est de
fournir une main d' oeuvre qualifiée aux entreprises locales, en attirer de nouvelles et in fine accélérer le
renouveau économique du pays.
L'AIT remplit donc 2 objectifs : l' enseignement et la recherche.

C' est dans son département de recherche, le SRC* que nous ( Quentin Bezsilko et moi-même ) ferons notre
stage.

Le SRC pour Software Research Centre a été créé en 2003. Sa mission est donc de faire de la recherche en
collaboration avec de grandes entreprises installées dans la région, comme par exemple Ericsson, ou bien
Eircom.

Son principal domaine de compétence est le réseau, et plusieurs projets sont menés de front, le plus
important étant le SUNAT. SUNAT est un acronyme pour Seamless Use Through Network Abtraction
Technologies. Le principe est de rendre les téléphones mobiles “flexibles” du point de vue des réseaux
utilisés. Ceci doit leur permettre de passer d' un type de réseau à un autre ( du 3G au wifi par exemple ) afin
de gagner en coût et/ou en qualité. Le tout doit se faire en toute transparence pour l' utilisateur.

On comprend facilement que ces technologies novatrices intéressent au plus haut point les entreprises de
télécommunications, lesquelles supportent ces projets. L' AIT ressemble finalement aux pôles d' excellence
français, et forme un petit campus.

                                                                                                        Page 8
b) Fonctionnement du SRC

Les membres du SRC sont au nombre de huit, sans nous compter puisque nous sommes stagiaires. La taille
de l' équipe étant relativement petite, la communication a lieu de manière directe ou bien par mail. Le tout est
relativement peu hiérarchisé, M. Cunningham est en quelque sorte le chef de projet : il supervise les autres
membres de l' équipe et définit les priorités ( puisque plusieurs projets ont lieu en même temps ). Pour ce qui
est des autres membres, ils sont tous à égale responsabilité.

Techniquement, le SRC dispose de son propre réseau local, et d' un accès internet à haut débit distribué sur
son réseau. Les machines utilisées fonctionnent sous windows ou linux, et sont récentes. On dispose
également de pièces de rechange ( écrans, clavier/souris etc.) et même d' ordinateurs de rechange. De
nombreux postes sont pourvus de deux écrans. Les projets sont généralement développés dans des langages
informatiques* plutôt bas-niveau, tel que le langage C*, pour des impératifs de vitesse d' exécution.

Les horaires sont relativement souples, en fait ce sont plus des objectifs à réaliser qui sont indiqués, et pas
vraiment un nombre d' heures et de minutes de présence. Les horaires sont théoriquement de 9h à 17h avec
trente minutes de pause à 10h30 et 1h à 13h, mais il n' est pas rare de voir un chercheur arriver plus tard et
repartir plus tard également. La pause de 10h30 constitue en fait le traditionnel breakfast Irlandais.

En ce qui nous concerne, nous avions des objectifs à réaliser, et des pistes indiquées. Après cela, nous avions
“carte blanche” concernant la manière de le faire, et nous gérions notre temps nous même. Il n' y avait pas d'
impératif de date concernant le fonctionnement de tel ou tel module, tant que le travail était réalisé au final
(dans des délais raisonnables tout de même). Ceci nécessite naturellement un minimum d' autonomie et d'
organisation, mais ce n' était pas un problème puisque nous avons appris cela à l' IUT en effectuant des
projets en équipe ( je pense notamment au projet tuteuré ).

                                                                                                        Page 9
c) Présentation du projet

Le projet se déroulant dans un laboratoire de recherche sur le réseau, notre sujet sera donc orienté réseau. Par
ailleurs, notre tuteur nous a prévenu que le sujet serait amené à évoluer en fonction de notre avancement.

L' intitulé est défini comme tel : mise en place d' une solution VoIP et d' un réseau “personalisé”.

Le cahier des charges est le suivant : nous devons utiliser opensips, un “serveur téléphonique” virtuel, et x-
lite, un gratuiciel* qui se connecte à opensips. Nous devons également travailler sous linux, qui est capable
de *compiler et d' exécuter opensips (il n'existe pas de version Windows d' opensips).

Dans un second temps, nous devons mettre en place un proxy* spécifique à opensips, dans le but de pouvoir
déporter une partie de la charge sur différentes machines, et surtout de pouvoir utiliser le dispositif en dehors
du réseau local, c' est à dire sur le réseau internet complet.

Enfin, nous avons participé au développement d' un logiciel d' analyse de la qualité d' une conversation VoIP.

Ces étapes nécessitent une étude poussée préalable pour comprendre exactement comment fonctionne
opensips, la VoIP, avant de se lancer dans toute installation, paramétrage ou développement.

                                                                                                        Page 10
III Le stage
a)       Découverte et installation au SRC

Notre première “mission” au sein du SRC fût tout simplement de prendre possession de notre poste de
travail. Loin du cadre scolaire ou il suffit de s' identifier sur la machine, nous avons chacun eu droit à un
desktop* vierge avec un écran et un kit clavier-souris, ainsi qu' un disque d'installation d' Ubuntu*. Outre
l'installation matérielle, nous avons donc fait nous même l' installation du système d' exploitation et sa
configuration. Ayant une bonne connaissance du système d' exploitation Linux grâce au module système du
DUT informatique, cette étape fût assez triviale.

On nous a donc dès le début accordé une certaine autonomie, et nous aurions pu par exemple installer deux
systèmes d'exploitation sur notre machine, demander une autre version de Linux, ou même installer
Windows à la place.

La majeure partie de cette première journée fût toutefois consacrée à la prise d' informations sur le SRC, son
rôle, son fonctionnement ainsi que la définition de notre sujet de stage, avec la mise en place d'un petit cahier
des charges ( oralement ).

Certaines choses nous ont quand même été imposées, comme par exemple le logiciel Opensips en temps que
serveur SIP, ainsi que le logiciel client pour mettre en place la solution : X-lite.

Une fois le projet défini, nous nous sommes rendu compte que nous ne connaissions absolument pas le
domaine de la VoIP, bien que nous ayons acquis des connaissances généralistes en réseau au cours de notre
formation.

Nous avons donc dans un premier temps commencé un travail de documentation sur ce domaine. Nous avons
commencé par étudier comment fonctionne la VoIP, quelle technologies se « cachent » derrière, puis nous
nous sommes focalisés sur notre choix technique, opensips.

                                                                                                        Page 11
b) Documentation préalable : La VoIP

Qu'est ce que la VoIP ?

Comme indiqué dans le glossaire, la VoIP permet de faire voyager la voix sur un réseau numérique. Elle s'
oppose donc aux communications téléphoniques traditionnelles qui elles empruntent un réseau analogique.
En réalité, la voix numérisée voyage sur le réseau internet comme n' importe quel fichier, sous forme de bits.

Quel avantages ?

Le premier avantage est qu'elle ne nécessite strictement aucun matériel spécifique, elle peut être mise en
place avec simplement un réseau internet, du coup on peut la déployer presque partout.

Le deuxième avantage est son coût, mis à part celui de la connection internet, la VoIP ne coûte rien de plus,
contrairement à une communication RTC* classique. En entreprise, il suffit d'un « banal » serveur pour créer
un réseau VoIP. Un réseau RTC nécessite lui un équipement onéreux, et des postes téléphoniques (alors que
la VoIP peut être utilisée sur un poste de travail avec un casque / micro).

Quel inconvénients ?

Ayant effectué ma soutenance de communication en S3 sur la sécurité informatique, je me suis tout d' abord
intéressé aux risques éventuels. Le fait qu'un simple serveur assure le service peut poser problème, puisque
comme tout ordinateur il peut être défaillant ou même subir une attaque.
Toutefois, d'après un rapport datant de 20071, la disponibilité du service est de 99.9% (restant inférieur aux
presque 100% de la téléphonie classique).
La VoIP nécessite par ailleurs un réseau de qualité au risque d'être inutilisable, ce qui n'est pas forcément le
cas du réseau externe à l'entreprise.

Quelles technologies ?

Pour l'établissement de la connexion, la VoIP s' appuie sur les protocoles SIP / SDP*, qui lui même utilise
TCP. L' avantage du protocole TCP, (vu lors du module rsx4), est qu' il permet de garantir l'intégrité des
données.
Pour la transmission de la voix, on utilise RTP qui lui-même s' appuie sur UDP (protocole également étudié
lors du DUT informatique). Contrairement à TCP, UDP permet d'échanger rapidement des données mais au
détriment des contrôles (il peut y avoir perte d' informations). Dans notre cas, cela explique pourquoi le
réseau doit être suffisament qualitatif ( si il y a trop de perte d'informations, la communication devient
inaudible).

1 VoIP et Asterisk, François Deppierraz's. Http://francois.ctrlaltdel.ch/

                                                                                                       Page 12
c) Mise en place de la solution sur le réseau local

Nous avons mis en place deux postes clients X-lite et un serveur opensips.
Il est en réalité possible de connecter les deux postes X-lite directement sur un réseau local, à condition de
connaître leurs adresses IP* respectives. Mais plutôt que de le faire manuellement comme cela, on préfèrera
les connecter à un serveur qui se chargera d'établir la connection sans que les utilisateurs aient à échanger
leur adresse et configurer le logiciel à chaque appel !

La première solution implémentée fonctionne donc comme ceci :

Dans notre cas, le serveur opensips accède à une base de données MySQL* afin d' enregistrer les utilisateurs
autorisés à accéder au réseau VoIP. Il est possible d' utiliser d' autres bases de données.

Il y a deux étapes à réaliser pour être joignable :
–On rentre l'utilisateur dans la base de données d' opensips.
–L' utilisateur démarre le client (X-lite dans notre cas) et renseigne l'identifiant et le mot de passe
correspondant, obtienant ainsi le droit (ou non) de se connecter au serveur.

Le serveur opensips « sait » donc à tout moment quels sont les utilisateurs joignables.

La procédure d' établissement de la communication peut ensuite être schématisée comme telle :

                                                                                                     Page 13
Il n'est pas nécessaire de comprendre tous les signaux échangés, mais on peut résumer la procédure en trois
étapes :
–Le client n° 1 demande une communication avec le n° 2 (juste entre entrant son nom).
–Le serveur reçoit la demande, et si le client n° 2 existe et qu'il est connecté, il transmet.
–Si le client n° 2 accepte la conversation, le serveur renvoie alors son adresse au client n°1 et vice-versa, la
communication est établie directement entre les deux clients (et le travail du serveur est fini).
–Mais le client n° 2 peut aussi refuser la communication.
–Si le client n° 2 ne répond pas au bout d' un certain temps paramétrable, la conversation est annulée.

Cette solution est fonctionelle, et présente également l' avantage d' être multiplateforme : même si Opensips
nécessite une machine sous Linux, X-lite* est disponible sous Linux, Windows et Mac, et de toute façon on
peut utiliser n' importe quel client SIP pour se connecter au serveur.

Mais cette solution présente une faiblesse de taille : elle ne fonctionne que sur un seul réseau, le réseau local.
Ce qui signifie, qu' elle ne peut fonctionner que dans un même service, au mieux dans une même entreprise,
et en aucun cas sur internet.

C'est la raison pour laquelle dans un deuxième temps nous avons mis en place une solution capable d' être
déployée sur le réseau mondial.

                                                                                                         Page 14
d) Déploiement de la solution sur internet

Une fois le problème constaté, nous avons cherché un moyen d' y remédier.

La solution que nous avons trouvée comporte deux phases :
–relai des appels par un proxy
–Ajout de modules et configuration d'opensips

le proxy

Notre tuteur nous a demandé d'utiliser mediaproxy, un proxy pour opensips.
Jusqu' à maintenant, nos clients SIP s'échangeaient directement les données sur le réseau local sans aucun
intermédiaire (une fois la connection entre les deux établie grâce à Opensips).

Le mediaproxy va être un intermédiaire pour la voix ( qui « passe » via RTP ), comme le montre ce schéma :

Ceci présente de nombreux avantages :

                                                                                                     Page 15
–On peut savoir ce qui se passe sur le réseau, combien d'appels, qui, de quelle durée...
–On peut archiver ces données.
–Mais surtout, si les clients ne se parlent plus directement, on peut rediriger les données   et
sortir du réseau local.

A noter que le relai peut être sur n' importe quelle machine, et qu' il peut y en avoir plusieurs. Le rôle du
dispatcher est de repartir la charge sur les différents relais disponibles.

Installer mediaproxy n'est pas trivial, et qui plus est il est nécessaire de reconfigurer Opensips pour pouvoir l'
utiliser, en ajoutant des modules et en modifiant son script d' exécution.

Une fois mediaproxy en place, il reste une dernière étape pour déployer la solution sur le web.

Configuration finale

Il faut tout d' abord disposer d' une adresse publique pour le serveur. Une fois le serveur installé, il reste un
problème.

Par défaut, Opensips transmet les invitations de conversation sur les addresses IP du réseau privé en mémoire
dans la base de données. Le problème, c' est que si Opensips est en dehors du réseau privé, ces adresses n'ont
plus aucune signification. Il faut à la place indiquer l'adresse du routeur* du réseau local qui se chargera lui
de rediriger les invitations aux bonnes machines.

Ceci nécessite une fois de plus l' ajout de modules et la modification du script d' exécution d' Opensips.

Pour notre part, ne disposant pas d'adresse publique nous avons simulé cette situation avec un routeur
implémentant le NAT*. Le serveur était ainsi isolé sur un réseau différent et nous avons pu mettre en place le
service comme si nous étions dans les conditions réelles.

Toutefois il faut savoir que aujourd' hui de plus en plus d'entreprises utilisent un Switch* et pas seulement un
routeur pour créer un réseau local. Nous avons donc placé cet équipement entre le serveur opensips et le
routeur puis nous l' avons configuré afin de retrouver une solution fonctionnelle. Cette étape fût la dernière
concernant la mise en place de la solution VoIP, mais nécessaire pour affirmer que nous pourrions déployer
ce système dans quasiment n' importe quel réseau d'entreprise.

Tout au long de ce projet, nous avons écrit une documentation, un tutoriel pour expliquer comment faire, à la
demande de notre tuteur. En effet, bien que les logiciels utilisés soient robustes, ils souffrent d' un manque de
documentation, au-delà de la documentation strictement technique, il est très difficile de trouver des
documents expliquant comme effectuer des actions ou une configuration ( relai des appels par le médiaproxy
).

                                                                                                        Page 16
e) Développement du logiciel d' analyse des Délais

Nous avons mis en place une solution VoIP fonctionelle, mais comme il s' agit d' une technologie jeune, elle
souffre encore de carences. Une de ces carences est certainement l' impossibilité pour l' utilisateur de
connaître la qualité de la conversation. En effet, j' ai indiqué plus haut qu' un des problèmes de la VoIP est qu'
elle traverse des réseaux hétérogènes et de qualité / vélocité différentes, alors qu' une conversation audio
impose des délais restreints et un réseau réactif.

Il existe un protocole qui accompagne le RTP ( qui transmet la voix ) qui donne des informations sur la
qualité de la conversation, le RTCP*. Toutefois même si il est possible à partir de ce protocole de calculer les
délais ou taux de paquets arrivés à destination, il est bien entendu impossible pour l' utilisateur de savoir si la
conversation est de bonne qualité ou non ( d' autant plus que ce genre d' informations ne sont bien sûr pas
montré par les softphones, et qu' il y a plusieurs rapports par seconde !).
Pour pallier à cette faiblesse, le SRC développe actuellement un logiciel capable à partir des rapports RTCP
de donner un indice représentant la qualité de la conversation, prenant en compte tous les paramètres. Pour
donner un exemple, il existe le même genre de chose pour une connexion wifi par exemple, avec un indice
de qualité de 1 à 5. Quentin Bezsilko et moi-même avons développé le module capable de calculer le délai d'
une conversation.

Dans un premier temps, nous avons dû étudier très minutieusement le fonctionnement exact du protocole
RTCP et le moyen de calculer le délai à partir d' informations brutes. Une fois ce travail accompli, nous
avons utilisé une API* du langage java*, jpcap, capable de récupérer les paquets qui transitent sur le réseau,
puis de renvoyer leur contenu. Les paquets récupérés, nous avons ensuite traduit notre raisonnement en java.
Le code source de ce projet est en annexe.

                                                                                                         Page 17
IV Bilan
a) Bilan Technique

Le DUT informatique nous a apporté les « briques de bases » afin de nous permettre de nous en sortir :
durant notre formation, nous avons appris comment marche Linux, comment se servir de la console ou
encore des éditeurs de texte. Ce sont ces connaissances « basiques » dont nous nous sommes reservies pour
le projet, lorsque nous avons installé, compilé, configuré ( modifier le script d' exécution notamment), etc.
Grâce au stage nous avons donc acquis de l' expérience et vu une application concrète de nos cours
théoriques.

On peut tirer la même conclusion pour le réseau, nous sommes arrivés avec quelques notions théoriques sur
les adresses, comment identifier une machine, et à partir de là nous avons pu appréhender un système
complexe comme la VoIP et configurer un « vrai » réseau. Une fois de plus le stage nous a apporté une
application concrète de nos connaissances plutôt théoriques.

Ayant eu la chance de faire un stage en Irlande grâce au programme ERASMUS, nous avons pu également
améliorer sensiblement notre anglais. En effet, tout au long de notre scolarité depuis le collège, nous avons
acquis des connaissances grammaticales, du vocabulaire, appris la conjugaison, etc. Toutefois, me
concernant je n' ai jamais eu l' occasion de pratiquer la langue dans de réelles conditions pendant une période
prolongée, en toute indépendance. Le fait de « vivre » l' anglais tous les jours, de l' écouter à la télévision, de
le lire, de le parler bref de le pratiquer quotidiennement pendant trois mois confère une expérience et des
compétences qui ne peuvent pas être acquises par un cours.

Par ailleurs, nous avons également progressé à l' écrit puisque nous avons étudié un grand nombre de
documentations, mais surtout écrit nous même une documentation, un tutorial pour réaliser une installation
telle que la nôtre ( en annexe ).

Enfin, lors du développement du logiciel de calcul de délai, nous nous sommes largement appuyés sur nos
connaissances en programmation, tout en découvrant une nouvelle API. Nous nous sommes vraiment rendus
compte que le DUT informatique nous avait fourni les aptitudes nécessaires pour participer au
développement d' un projet. Qui plus est, ce fût l' occasion pour nous d' utiliser nos connaissances réseaux à
travers le développement, donc d' en voir une autre application.

Plus globalement, nous avons découvert comment l' open-source pouvait être déployé pour des
professionnels et utilisé en entreprise. Nous avons vu ses forces ( fiabilité des logiciels, importance de la
communauté ) mais aussi ses faiblesses ( compliqué, peu « user-friendly » , documentation parfois obsolète
ou lacunaire ), toute notre solution était basée sur l'open-source : Linux en système d'exploitation, opensips
en serveur SIP.

De manière générale, ce stage a été pour nous une application formatrice des compétences plutôt théoriques
que nous avions acquises jusque là. Nous avons particulièrement progressé en anglais et en réseau, tout en se
rendant compte de l' importance de l' étude préalable d' un sujet et de la documentation.

                                                                                                         Page 18
b) Bilan Humain

Lors de ce stage, nous avons eu une expérience du travail en équipe sur le « long terme », dans le milieu
professionnel. En effet, même si nous avions déjà mené des projets en équipe pendant le DUT informatique,
il s' agissait de projets à but pédagogique, pour évaluer les élèves, et non de projets à but professionnel. Qui
plus est, le temps consacré à ces projets était de quelques heures par semaines, contre 35h dans notre cas, ce
qui correspond à de réelles conditions de travail.

Tout au long de notre projet, nous avons joui d' une grande autonomie, ce qui n' était pas forcément le cas
lorsque nous avons étudié. Nous avons donc expérimenté les brainstorming, les réunions, les mises au point
sur l' avancement, pour faire le bilan et déterminer comment conduire la suite du projet. Nous avons appris à
prendre le temps de déterminer les orientations du projet avant de se « jeter » sur les machines, et compris l'
utilité de ce type de démarche. Dans le même ordre d' idée, nous avons réalisé l' importance de se
documenter avant d' entreprendre un projet, par exemple lors du logiciel de calcul de délai. En effet, nous
avons commis des erreurs de conception suite à une connaissance insuffisante de RTCP, pour finalement
étudier RTCP plus en profondeur et corriger les fautes. Cette expérience a bien illustré le fait que la
documentation préalable et la réflexion sur la conception ne sont en aucun cas une perte de temps.

Notre lieu de travail en lui-même fût une découverte pour nous, puisque nous avons travaillé dans un centre
de recherche, un secteur qui nous était complètement inconnu. Nous y avons découvert une ambiance de
travail très différente de l' enseignement, basé sur un résultat attendu mais avec une grande autonomie et un
temps imparti flexible, et une assez grande liberté dans nos choix. Nous avons également dû étudier certaines
choses nous-même ( le réseau, la VoIP ) là ou à l' IUT un professeur nous l' aurait enseigné. Ceci a eu pour
avantage de développer notre autonomie dans l' apprentissage.

Mais les effets bénéfiques d' un stage Erasmus ne sont pas limités au contexte professionnel. En allant faire
notre stage en Irlande, nous avons eu la chance de rencontrer des personnes ayant une autre culture,
favorisant ainsi l' échange et l' ouverture d' esprit. A Athlone, beaucoup sont étudiants internationaux, ainsi
nous avons eu la chance de cotoyer de nombreuses nationalités différentes, Italien, Tchèque, Espagnol en
plus des Irlandais. L' enrichissement personnel que cela nous a apporté n' aurait pas été accesible en France.

En définitive ce stage nous a apporté plus de recul, plus d' autonomie dans l' apprentissage et de manière
générale. Nous avons eu l'occasion d' avoir l' expérience de mener un « vrai projet ». Mais le plus important
est peut-être l' enrichissement personnel et l' ouverture d'esprit que nous avons retiré de ce stage, grâce à
notre « immersion » dans ce milieu qui nous était étranger et les rencontres que nous avons faites.

                                                                                                       Page 19
V Conclusion

Notre stage au SRC nous a invité à répondre à la problématique suivante : comment communiquer
verbalement sur le réseau universel et hétérogène qu' est internet ?

Pour y répondre, nous avons au sein de ce département de recherche étudié la VoIP pour ensuite en déployer
une solution, et enfin participé au déveleppement d' un logiciel novateur capable d' estimer sa qualité.

A travers la VoIP, nous avons progressé en UNIX, en réseau, et grâce au programme ERASMUS en anglais.
Durant ce stage, nous avons réutilisé toutes nos connaissances acquises en DUT et nous les avons
approfondies. Notre objectif a été atteint puisque à la fin du stage nous avons fait une conférence à l' équipe
de recherche afin de présenter la solution que nous avons implémentée et expliquer son fonctionnement.

Bien entendu, il aurait été possible d' aller plus loin dans ce projet, en mettant par exemple davantage d'
« obstacles » ( proxy et autre équipement réseau ) entre les clients et le serveur, ou encore d' associer au
mediaproxy ( qui relais les appels ) une analyse des conversations et un archivage des données.

Si ce projet a rendu service à l' équipe de recherche, nous en avons retiré une expérience très valorisante
également. Dans un monde qui tend vers le tout numérique, il ne fait aucun doute que nous retravaillerons un
jour sur la VoIP qui remplacera à terme les communications téléphoniques traditionnelles.

                                                                                                      Page 20
VI Annexe

        Annexe 1 : le tutoriel d' installation d' opensips

                         ************************************************** *
                         *                                                                *
                         * Author : Quentin Bezsilko & Benjamin Grassart                  *
                         * Date of creation : 28rd of April                               *
                         *                                                                *
                         ***************************************************

This file is a tutorial explaining step by step how to install OpenSIPS on
a linux distribution. It has been installed on Ubuntu 8.10 (32 bits) but still
works with other versions.

Note : this tutorial should be read with a normal screen and a resolution of 1280*1024.

First we will see how to install opensips with a database and after how to add a mediaproxy relay.

To start, we need to find all the system for update and upgrade.
We'll also need some programs to use OpenSIPS.
In order to do so, open a terminal and run the following commands.
Note : You should be logged in as the super-user to execute these commands.

benjamin@benjamin-desktop-AIT:~$ su
Password :
If it worked, you can go to the next step!

#######################################################################################

If you don't know your root password or if you haven't set it already, try this.

benjamin@benjamin-desktop-AIT:~$ sudo passwd

                                                                                                     Page 21
[sudo] password for benjamin:

The console will ask your sudo password.
Then you'll be able to enter a new root password.A confirmation will be asked.
A message of confirmation will be written if the password has been succesfully changed.

#######################################################################################

Once you're logged in as root, you should have a command invite like this.

root@benjamin-desktop-AIT:/home/benjamin#

The char '#' proves you are logged in as root

Now you can install the programs to configure your environment.

apt-get update && apt-get upgrade
apt-get install build-essential openssl bison flex
apt-get install mysql-server libmysqlclient15off libmysqlclient-dev

Note : When you will set mysql up, a password will be asked to launch it, forbidding anyone to write into
your database. Don't forget to create your root password and choose something you'll remember.

                    ###########################################################
                   #                                                                           #
###############                    PART ONE : INSTALLATION OF OPENSIPS                          ###########
                   #                                                                           #
                    ###########################################################

You can now download the last version of opensips. We'll save the sources and put them in the appropriate
directory : /usr/src.
Nowadays the latest version is 1.5.1, so we will use it. You can have a look at the official website
http://www.opensips.org/ to check the last version.

                                                                                                       Page 22
***************************************************************************************
First Method (using the terminal):
Try these commands :

benjamin@benjamin-desktop-AIT:~$ cd /usr/src
benjamin@benjamin-desktop-AIT:~$ wget http://opensips.org/pub/opensips/latest/src/opensips-1.5.1-
tls_src.tar.gz
This command will save the package into your /usr/src directory.
***************************************************************************************

***************************************************************************************
Second Method (using the browser):

Go to the Opensips official website : http://www.opensips.org/. Have a look at the right of the page, click on
“read more” and go to the download section.
Note : Be careful, OpenSIPS-CP is a control-panel for opensips, but it' s not OpenSIPS !

Download the latest version of opensips. Click on the link in the section : “2. Tarballs from SourceForge”
and take the tls version.
We need to move the sources into the proper directory, so open a terminal and execute this command :

benjamin@benjamin-desktop-AIT:~$ sudo mv /home/benjamin/Desktop/opensips_1.5.1-tls.tar.gz /usr/src/

***************************************************************************************

This file is in an archive so we need to use this command to extract it :
benjamin@benjamin-desktop-AIT:~$ tar xvzf opensips-1.5.1-tls_src.tar.gz

The command tar extracts your package into your directory. For more information try this into your
terminal :
benjamin@benjamin-desktop-AIT:~$ man tar

Now, we're going to place ourselves into the opensips directory and compile the sources with all the
available modules. To do so, use the following command :

benjamin@benjamin-desktop-AIT:~$ cd opensips-1.5.1-tls
benjamin@benjamin-desktop-AIT:~$ make all include_modules="db_mysql" modules
benjamin@benjamin-desktop-AIT:~$ make install include_modules="db_mysql" modules

                                                                                                       Page 23
We'll also need to copy the opensips.default and opensips.init files in their proper directories
(/etc/default/opensips and /etc/init.d/opensips).
To do so,try these command into your terminal:

benjamin@benjamin-desktop-AIT:~$ cp /usr/src/opensips-1.5.1-tls/packaging/debian-
etch/opensips.default /etc/default/opensips
benjamin@benjamin-desktop-AIT:~$ cp /usr/src/opensips-1.5.1-tls/packaging/debian-etch/opensips.init
/etc/init.d/opensips

Note : The command cp is short for copy. Try this for more informations :
benjamin@benjamin-desktop-AIT:~$ man cp

The last copied files need some changes about their option values.
First, open the /etc/default/opensips file with emacs or vim.

Note : for more informations about both text editors, try these commands :
benjamin@benjamin-desktop-AIT:~$ man emacs
benjamin@benjamin-desktop-AIT:~$ man vim

Change the following lines and save.

RUN_OPENSIPS=yes
 1. User to run as
USER=opensips
 1. Group to run as
GROUP=opensips
 1. Amount of memory to allocate for the running OpenSIPS server (in Mb)
MEMORY=128

Second, open the /etc/init.d/opensips file and make the following changes (don't forget to save).
The line you'll have to change is DAEMON=/usr/sbin/opensips.
Put DAEMON=/usr/local/sbin/opensips instead.

Third we need to change the /usr/local/etc/opensips/opensipsctlrc file.
So open it with either emacs or wim and make the following changes.

SIP_DOMAIN=localhost

                                                                                                    Page 24
DBENGINE=MYSQL
DBHOST=localhost
DBNAME=opensips
DBRWUSER=opensips
DBRWPW="opensipsrw"
DBROUSER=opensipsro
DBROPW=opensipsro
DBROOTUSER="root"
USERCOL="username"
INSTALL_EXTRA_TABLES=ask
INSTALL_PRESENCE_TABLES=ask
INSTALL_SERWEB_TABLES=ask
CTLENGINE="FIFO"
OSIPS_FIFO="/tmp/opensips_fifo"
PID_FILE=/var/run/opensips/opensips.pid

Note : All the lines prefixed by the '#' char are comments and ignored by the compiler. You must uncomment
these lines by taking off the '#' char

We'll need to create a database to save all the created users. We'll be using the mySQL one. To do so, try the
following command :

root@benjamin-desktop-AIT:/home/benjamin# opensipsdbctl create
MySQL password for root:

Note : this command will ask your mySQL password, so I hope you didn't forget it!

This database has to be configured so I'll tell you the changes you'll have to do.
Open the /usr/local/etc/opensips/opensips.cfg file and make the following changes :

loadmodule "db_mysql.so" #uncomment this line
loadmodule "auth.so"      #uncomment this line
loadmodule "auth_db.so" #uncomment this line

 1. modparam("usrloc", "db_mode", 0); #Comment this line

modparam("usrloc", "db_mode", 2)                                   #uncomment this line
modparam("usrloc", "db_url", "mysql://opensips:opensipsrw@localhost/opensips") #uncomment this line

                                                                                                      Page 25
1. ----- auth_db params -----

# uncomment the following lines if you want to enable the database authentification
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")

We are nearly finished. We need now to create the users. That is why our database has been set up.
So try the following commands to create them.
Create the softphone user in the database:
root@benjamin-desktop-AIT:/home/benjamin# opensipsctl add 1234 1234
root@benjamin-desktop-AIT:/home/benjamin# opensipsctl add 5678 5678

Note : the first command enables you to create a user named 1234 with the password 1234 into the
opensipsdbctl database (created just before)

Now we'll create the Opensips user in mySQL.

To connect to mySQL, try this command and enter your mysql password:

root@benjamin-desktop-AIT:/home/benjamin# mysql -p
Enter password:

Note : the -p option means you want to connect with a password.
You'll have the "mysql>" invite now.

Then try the following commands. Here is a normal execution of the mySQL requests.

mysql> GRANT ALL PRIVILEGES ON *.* TO opensips@localhost IDENTIFIED BY 'opensips';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO opensips@127.0.0.1 IDENTIFIED BY 'opensips';
Query OK, 0 rows affected (0.00 sec)

Note : these commands enables you to give all the permissions to the Opensips user (write and read the
database are the most important ones).

                                                                                                     Page 26
Congratulations, you managed to install OpenSIPS on your Ubuntu version.

Last but not least thing you need to know is how to run it.

You have two opportunities which do the same thing :
Note : Check if you're still the super-user on your laptop. If so, try this command to become the real user.
root@benjamin-desktop-AIT:/home/benjamin# exit

Then your invite will come back like this :
benjamin@benjamin-desktop-AIT:~$

Then try either this command to start Opensips :

benjamin@benjamin-desktop-AIT:~$ sudo /etc/init.d/opensips start
[sudo] password for benjamin:

Or this one :
benjamin@benjamin-desktop-AIT:~$ opensipsctl start

Sometimes both previous methods do not work, so you can try this one :
benjamin@benjamin-desktop-AIT:~$ sudo opensips
It will also indicate the listening port and the IP address of the server.

You can now use Opensips with x-lite (or Ekiga or another softphone) and make phone call over the LAN.

In order to deploy the system over the internet (traverse the NAT), we must install mediaproxy, a proxy for
opensips.
In addition, have a relay for the call make you able to control "what's happening".
However, if you stop to read the tutorial now, you have a working solution to deploy a VoIP solution on a
LAN.

                     ##########################################################
                    #                                                                          #
###############                   PART TWO : INSTALLATION OF MEDIAPROXY                         ###########
                    #                                                                          #
                    ###########################################################

                                                                                                       Page 27
First you must have a good understanding of what is mediaproxy and how does it work. You have a short
explanation hier : http://mediaproxy.ag-projects.com/, but don't worry you will have more in the README
file.

The easiest is to download the source and build our own package.
Go to the website : http://download.ag-projects.com/MediaProxy/ and download the archive of the last
version.

Note : Nowaday, the last version is mediaproxy 2.3.4, I will use it in this tutorial.

Uncompress it, with :
benjamin@benjamin-desktop-AIT:~$ tar -zxvf mediaproxy-2.3.4

Then update install the dependencies :
benjamin@benjamin-desktop-AIT:~$ sudo update

benjamin@benjamin-desktop-AIT:~$ sudo apt-get install devscripts cdbs debhelper python-all-dev python-
support \
                         libnetfilter-conntrack-dev python-application python-cjson \
                         python-gnutls python-twisted-core python-twisted-names \
                         python-zopeinterface python-pyrad python-sqlobject

Note : If you are running on Ubuntu 9.04, you will have a problem because it has python > 2.6 installed and
we need python < 2.6. Perhaps this problem will be fixed with the next version of mediaproxy, but for now,
I'm still searching for a solution. So for the moment the easiest is to use Ubuntu 8.10 with python 2.5.x.

run debuild in the mediaproxy directory :
benjamin@benjamin-desktop-AIT:~$ sudo debuild

You can safely ignore the pgp signing error at the end of the build process,
that is only because you do not have the pgp key for the person who is listed
as maintainer for the package. The packages are build fine even if they are
not signed.

After building them, you can find the .deb packages in the parent directory,
from where you can install them using dpkg:

benjamin@benjamin-desktop-AIT:~$ cd ../

                                                                                                   Page 28
benjamin@benjamin-desktop-AIT:~$ sudo dpkg -i mediaproxy-*.deb

Now mediaproxy is installed, we must configure it. As you know, because you have read the documentation
about mediaproxy, the mediaproxy consist of one dispatcher and one or more relay(s). The configuration file,
which should be : /etc/mediaproxy/config.ini, is used by both dispatcher and relay, and it contain a lot of
explanation which are very usefull to understand. In this tutorial, I will use all the default parameters, and my
mediaproxy is on the same host as opensips. So I just need to edit the first part of the configuration file, the
IP address of the dispatcher :

benjamin@benjamin-desktop-AIT:~$ sudo emacs /etc/mediaproxy/config.ini

[Relay]

dispatchers : 127.0.0.1 # this line must be uncommented

If the dispatcher is in another host, you must indicate the corresponding IP address.
After that, we have to start the relay and the dispatcher to check if they work properly.

Note : the dispatcher must running before the relay !

benjamin@benjamin-desktop-AIT:~$ sudo media-dispatcher
benjamin@benjamin-desktop-AIT:~$ sudo media-relay

And you do it again to verify if they are running :

benjamin@benjamin-desktop-AIT:~$ sudo media-dispatcher
fatal error: Cannot start MediaProxy Dispatcher: already running with pid 5300
benjamin@benjamin-desktop-AIT:~$ sudo media-relay
fatal error: Cannot start MediaProxy Relay: already running with pid 6935

You must get this message of fatal error, if not, the mediaproxy is not running. To see why, try this in your
terminal :
benjamin@benjamin-desktop-AIT:~$ tail /var/sys/syslog

If the relay doesn't work, you will probably have this error message :
Apr 29 09:55:14 mediaproxy-desktop media-relay[6879]: Log opened.
Apr 29 09:55:14 mediaproxy-desktop media-relay[6879]: warning: startSyslog is being deprecated and will
be removed in 1.2.0. Use the start_syslog function instead.
Apr 29 09:55:14 mediaproxy-desktop media-relay[6879]: Starting MediaProxy Relay 2.3.4
Apr 29 09:55:14 mediaproxy-desktop media-relay[6879]: Set resource limit for maximum open file

                                                                                                        Page 29
descriptors to 11000
Apr 29 09:55:14 mediaproxy-desktop media-relay[6879]: fatal error: failed to create MediaProxy Relay: IP
forwarding is not available or not enabled (check /proc/sys/net/ipv4/ip_forward)

You have to edit the ip_forward file.
benjamin@benjamin-desktop-AIT:~$ sudo emacs /proc/sys/net/ipv4/ip_forward
Put "1" instead of "0". Save. Don't worry if the editor say you can't save, quit and open the file again to check
if the edition has worked.

If the dispatcher and the relay work, we can continu and configure opensips to use mediaproxy, and this is a
bit trickier !
Open the configuration file of opensips :
benjamin@benjamin-desktop-AIT:~$ sudo emacs /usr/local/etc/opensips/opensips.cfg

Go to the module section, and add this line at the beginning :
loadmodule "mediaproxy.so" #this is the module of opensips which is able to connect to mediaproxy

Add this line AFTER the tm.so and rr.so :
.
.
.
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "dialog.so" #we add it because mediaproxy.so need it
.
.
.

Now go to the end of setting module-specific parameters and add these line :
# ----- dialog param -----
modparam("dialog", "dlg_flag", 4)

And finally we must edit the script to force opensips to use mediaproxy. Go to the "Routing logic", and then
in the "main request routing logic".
Add this in the route section :

if (is_method("INVITE") ) {
        # We can     also use a specific media relay if we need to
        #$avp(s:med ia_relay) = "1.2.3.4";

                                                                                                        Page 30
engage_media_proxy();
}

Note : The method engage_media_proxy() make opensips to use mediaproxy automatically. You mustn't use
the function use_media_proxy() if you use engage_media_proxy().

So you should have something like that in your configuration file :

####### Routing Logic ########

# main request routing logic

route{

         #modification to use mediaproxy

         if (is_method("INVITE") ) {
         # We can   also use a specific media relay if we need to
         #$avp(s:med ia_relay) = "1.2.3.4";
                engage_media_proxy();
         }

         #end of modification

         .
         .
         .
}

Now We can restart mediaproxy to see if all is well.

benjamin@benjamin-desktop-AIT:~$ sudo opensipsctl restart

Note : If you have problem to start, stop and restart opensips, especially with the pid file, you can try this to
stop opensips :
benjamin@benjamin-desktop-AIT:~$ sudo killall opensips
And start again :

                                                                                                         Page 31
benjamin@benjamin-desktop-AIT:~$ sudo opensips

These method are not good method, and if mediaproxy doesn't start with "opensipsctl start", you may have
error(s) in your configuration file. However, with the killall, you should be able to stop opensips even if the
program is crashed or the configuration wrong.

When opensips has restarted, verify in the log that all is well :
benjamin@benjamin-desktop-AIT:~$ tail /var/sys/syslog
And after, check if it's running :
benjamin@benjamin-desktop-AIT:~$ ps ax | grep opensips
You should have many process about opensips.

Now you can connect some clients to opensips and use a relay.
But we must configure opensips to be able to traverse the NAT.

                     ############################################### #########
                    #                                                                       #
###############                           PART TREE : TRAVERSING THE NAT                      ##############
                    #                                                                       #
                    ###################################################### ###

First of all I must show you what is my configuration.
The server opensips ( and also the relay ) have a public IP-address, whereas the client X-lite have a private
address, behind the NAT.

                 ----------------------
                 | opensips + relay | 192.168.2.3
                  ------------------- -

                                                                                                        Page 32
Vous pouvez aussi lire