VoIP - TPs Etude et implémentation Auteurs : RUIZ Nicolas, LOR Maurice, Julien FERNANDES Relecture : Version 3.0 23 Novembre 2005 SUPINFO - Ecole Supérieure d Informatique de Paris 23. rue de Château Landon 75010 Paris Site Web : http://www.supinfo.com
Table des matières Chapitre 1 Protocole SIP...3 Configuration de X-lite... 3 Chapitre 1 Protocole SIP...5 Calls softphone-2-softphone... 5 Chapitre 3 Protocole SIP...7 Implémentation basique d une architecture VoIP client/serveur... 7
Chapitre 1 Protocole SIP Configuration de X-lite Objectif: Le but de ce premier TP sera de vous permettre d effectuer une première prise en main d X-lite un logiciel VoIP appelé softphone. Préparation : Téléchargez et installez le softphone sur votre PC. Le fichier d installation se trouve sur le chemin réseau indiqué par votre formateur ou via l URL http://www.xten.com/index.php?menu=download. Lancement et configuration du softphone Lancez le softphone. Effectuez un clic droit sur le GUI. Ceci vous permet de sélectionner : o Le/les SIP Proxy pour votre prochain appel sortant. o Lancer l assistant de configuration audio. o Afficher le log de diagnostic. Parcourez les différents menus afin de vous familiariser avec les options de configurations. Quel bouton utiliserez-vous pour obtenir la fenêtre des menus? - Associez les différents menus à leur description: MENU Recent Calls Phonebook User Settings System Settings Advance system Settings DESCRIPTION 1. Configuration réseau, SIP Proxy, X-Tunnels, etc 2. Paramètres utilisateur typique. 3. Configuration audio avancée, configuration du protocole SIP, et d'affichage entre autres. 4. Permet à l utilisateur de revoir et stocker (50 Max) les appels récent (émis/reçus). 5. Phonebook & Speed Dial List Quels seront les menus nécessaires au bon fonctionnement du logiciel?
Chapitre 1 Protocole SIP Calls softphone-2-softphone Objectif: Le but de ce premier TP sera de vous permettre de configurer une architecture VoIP simple basée sur l utilisation de 2 pc portables équipés de softphones (ici nous utiliserons X-lite de l éditeur X-ten). L utilisation d un hub nous permettra de capturer et d analyser les paquets émis et reçus à l aide du logiciel gratuit «Ethereal» Topologie : Analyseur de paquets (ethereal ) Analyseur de paquets (ethereal ) Softphone 1 192.168.1.X HUB 100 base-t Softphone 2 192.168.1.X Adresse réseau : 192.168.1.0 /24 Masque de sous réseau: 255.255.255.0 Préparation des postes : o Téléchargez et installez la dernière version du logiciel Ethereal (0.10.14) disponible sur le chemin réseau indiqué par votre formateur ou via le lien : http://www.ethereal.com/download.html. (N oubliez pas d installer le plug-in winpcap également). Débranchez les 2 postes du LAN SUPINFO afin de les connecter au HUB. Configurez une adresse IP sur chaque poste et exécutez des tests de connectivité (ping). D après le cours quels seront les types de paquets qui nous serons utiles lors de l analyse des captures Ethereal? Attention à l existence et la configuration d un pare-feu logiciel, notamment sur le filtrage de certains ports. Trouvez les menus où se situent les paramètres nécessaires au TP et à quoi elles servent dans notre exercice.
D après les différents paramètres disponibles dans le menu SIP proxy, Comment comptez vous configurer votre softphone afin de pouvoir l utiliser sans passer par un serveur d abonnés? Indice : Dans notre topologie, il s agit de tenter de faire communiquer 2 comptes SIP directement. Cela implique que chaque softphone devra se comporter comme si le softphone distant jouait le rôle de proxy sip et inversement. Les softphones étant configurés, il est maintenant possible de joindre son correspondant en composant son numéro de téléphone SIP. Essayez de contacter votre correspondant en tapant son numéro. Que se passe-til? Pourquoi? Servez-vous des traces (log) via le menu diagnostic du logiciel pour faire du debug et justifier votre réponse à la question précédente. Indice : Lorsque vous émettez un appel, le softphone transmet une invite SIP via la syntaxe «numéro@proxyaddres» où le proxy address correspondra à l adresse du serveur proxy distant. Essayez de composer un autre numéro toujours vers la même adresse IP, l appel passe-t-il? Pourquoi? Trouvez le paramètre à modifier qui vous permettra de lancer un appel seulement en composant le numéro distant. En renseignant le paramètre vous remarquerez que le softphone n arrive plus à s enregistrer mais cependant vous arrivez tout de même à appeler le correspondant directement en composant son numéro. Expliquez pourquoi. Les autres numéros d appels sont-ils encore joignables? Capture et Analyse des traces d appel : En vous appuyant sur les points précédents, monitorez chaque tentative d appel (échec et réussite), afin de récupérer les paquets échangés entre chaque postes qui pourront vous êtres utiles pour du debug. NB : Le logiciel ethereal permet de capturer uniquement les paquets utiles (types trame d invitation sip, flux udp ). Nous vous conseillons d effectuer une capture sélective afin de ne pas être pollué par d autres flux. Essayez de recomposer les étapes des échanges entre les 2 softphones.
Chapitre 3 Protocole SIP Implémentation basique d une architecture VoIP client/serveur 1. Test du serveur PROXY Afin de tester le bon fonctionnement du serveur SIP installé, nous allons établir des appels entre deux USER AGENT en passant à travers le PROXY SIP, pour cela, modifier la configuration de vos deux abonnés. Démarrer SER : «#serctl start» Configurer dans le fichier hosts le domaine SIP que vous avez choisi. Paramétrer les softphones afin d utiliser le mode PROXY Remplissez les champs usernname et password avec les valeurs que vous souhaitez. Ex : username : 123 --- password : toto Une fois la configuration cliente prête, établissez des appels, et relevez les calls flow de signalisation SIP (Call flow REGISTER, INVITE, CANCEL, BYE et BUSY) : au format TEXTE. Il peut être fort utile d utiliser le binaire ngrep, ngrep comme son nom l indique à la même fonction que grep mais au niveau network, qui vous permettra d intercepter facilement les trames SIP. Vérifiez également que vos abonnés soient bien enregistrés via l utilitaire serctl 2. Authentification des callees Au niveau de l étape précédente, nous avons pu voir que nos abonnées envoient bien une trame REGISTER afin de s enregistrer sur le PROXY/REGISTER SIP, par contre les abonnés sont enregistrés en mémoire et il n y a pas de réelle authentification. Activez le mode DATABASE afin de stocker et d authentifier réellement nos USERS. Démarrer MySQL : «#mysqld_safe &» Exécuter le script : «ser_mysql.sh Modifier le mot de passe MySQL de l'utilisateur ser (mettre «votre mot de passe» à la place de heslo) Générer la libraire mysql.so a partir des sources de SER et la copier dans «/usr/local/lib/ser/modules/» Ajouter deux abonnés avec la commande serctl. Une fois toutes ces étapes réalisées, il ne reste plus qu à activer dans le fichier de configuration principal de SER, le mode DATABASE. Fichier de configuration de SER : «/usr/local/etc/ser/ser.cfg» Dé-commenter les lignes ci-dessous : #loadmodule "/usr/local/lib/ser/modules/mysql.so" #loadmodule "/usr/local/lib/ser/modules/auth.so" #loadmodule "/usr/local/lib/ser/modules/auth_db.so" Dé-commenter et modifier la ligne ci-dessous : #modparam("usrloc", "db_mode", 2) >> modparam("usrloc", "db_mode", 1)
Ajouter ensuite la ligne suivante: modparam("usrloc", "db_url","mysql://ser:votre_mot_de_passe@localhost/ser") Dé-commenter les lignes ci-dessous : #modparam("auth_db", "calculate_ha1", yes) #modparam("auth_db", "password_column", "password") Ajouter en dessous de la ligne du dessus modparam("auth_db", "db_url","mysql://ser: votre_mot_de_passe @localhost/ser") Ajouter a la fin de la partie modules, la ligne ci-dessous : fifo_db_url="mysql://ser:supinfo@localhost/ser" Dé-commenter les 4 lignes du dessous et modifier iptel.org par votre domaine SIP. # if (!www_authorize("iptel.org", "subscriber")) { # www_challenge("iptel.org", "0"); # break; # Sauvegarder le fichier, et redémarrer SER. Afin de surveiller les éventuels problèmes de configuration, vous pouvez voir les traces dans /var/log/message. Une fois SER redémarré correctement, vous pouvez vous enregistrer sur le serveur avec vos comptes SIP précédemment créé. (Relevez les calls flow REGISTER et constatez la différence). Pouvez-vous émettre un appel vers un abonné SIP à partir d un abonné SIP non enregistré ou avec un mot de passe erroné? 3. Authentification du caller Le fait d avoir activer le mode DATABASE ne permet pas de bloquer les appels. Il vous empêchera juste de vous enregistrer, donc vous ne recevrez pas d appels. Nous allons donc demander une authentification de l appelant. Pour cela, on va appliquer cette configuration : Juste entre : «append_hf("p-hint: usrloc applied\r\n");» et «route(1);» if (method=="invite") { if (!proxy_authorize("votre domaine SIP", "subscriber")) { proxy_challenge("votre domaine SIP", "1"); break; Un abonné peut avoir une paire username/password correcte mais mettre n importe quoi dans le champ FROM de son USER AGENT, nous allons donc mettre une fonction qui vérifie l égalité des champs USERNAME et FROM.
Chargez un nouveau module au niveau du fichier de configuration de SER : «loadmodule "/usr/local/lib/ser/modules/uri_db.so"» Puis pour la partie REGISTER, ajoutez les lignes ci-dessous au niveau de la fonction du même nom: entre : «break;» et «}» } else if (!check_to()) { sl_send_reply("403", "Username!=To not allowed"); break; Pour la partie INVITE, ajoutez les lignes ci-dessous : Juste après : «append_hf("p-hint: usrloc applied\r\n");» et «route(1);» if (method=="invite") { if (!proxy_authorize("sip.vivaction.net", "subscriber")) { proxy_challenge("sip.vivaction.net", "1"); break; if (check_from()) { route(1); } else { sl_send_reply("403", "Not allowed"); break; Modifier également «route(1);» par «t_relay()»; 4. Gestion de groupe Pour finir, nous allons activer un autre module qui nous permettra de faires des groupes, auxquelles on ajoutera des abonnés, ce qui nous permettra par exemple de créer un groupe «free-pstn» où seul les membres de ce groupe pourront établir des communications HORS IP. Chargez un nouveau module au niveau du fichier de configuration de SER : «loadmodule "/usr/local/lib/ser/modules/group.so "» Et modifiez la ligne suivante : «if (check_from()) {» par «if ((is_user_in("credentials","free-pstn")) && check_from()) {» Ensuite il ne reste plus qu à ajouter les utilisateurs au sein du groupe «free-pstn» et à valider le bon fonctionnement sur la restriction d appels standard. Testez également la suppression d un utilisateur à un groupe.