RAPPORT DE STAGE AU SRC : MISE EN PLACE D' UNE SOLUTION VOIP - TUTEUR ERASMUS : M. CUNNINGHAM TUTEURIUT :M.CHLEBOWSKI
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
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
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