{"id":103,"date":"2019-02-26T21:23:41","date_gmt":"2019-02-26T20:23:41","guid":{"rendered":"https:\/\/www.grutt.org\/?p=103"},"modified":"2019-02-26T21:23:42","modified_gmt":"2019-02-26T20:23:42","slug":"sip-server-mon-amour","status":"publish","type":"post","link":"https:\/\/www.grutt.org\/?p=103","title":{"rendered":"SIP Server mon amour"},"content":{"rendered":"\n<p>C&rsquo;est parti pour un nouveau tuto, en plusieurs parties. L&rsquo;id\u00e9e est de commencer par l&rsquo;installation d&rsquo;un SIP Server tout simple, et de le tester. Ensuite nous en installerons un second afin d&rsquo;activer la haute disponibilit\u00e9 pour ce composant et enfin nous l&rsquo;interfacerons avec Media Control Platform (MCP pour les intimes) afin de lui faire jouer quelques guides audio.<\/p>\n\n\n\n<p>Mais commen\u00e7ons par le commencement, une installation de SIP Server dans le plus simple appareil&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Les bases, encore les bases, toujours les bases,&#8230;<\/h2>\n\n\n\n<p>Bon, nous commen\u00e7ons par les pr\u00e9requis classiques sur ce blog : 1 serveur Linux CentOS7 d&rsquo;aplomb, un framework fonctionnel, des sources t\u00e9l\u00e9charg\u00e9es, du courage et&#8230; une licence avec des places SIP activ\u00e9es. Et oui, si l&rsquo;on s&rsquo;est amus\u00e9 \u00e0 <a href=\"https:\/\/www.grutt.org\/2019\/02\/02\/installation-de-flexlm-sur-centos7\/\">installer un FlexLM<\/a> pr\u00e9c\u00e9demment, c&rsquo;est pas pour rien.<\/p>\n\n\n\n<p>Une fois les sources d\u00e9compact\u00e9es, on va de mani\u00e8re classique utiliser les fichiers templates propos\u00e9s pour cr\u00e9er un nouveau mod\u00e8le d&rsquo;application. Je vous recommande chaudement d&rsquo;importer \u00e9galement les m\u00e9tadonn\u00e9es XML car les options de SIP Server sont nombreuses et pas forc\u00e9ment explicites&#8230;<\/p>\n\n\n\n<p>Une fois le template cr\u00e9\u00e9, on cr\u00e9e imm\u00e9diatement l&rsquo;application li\u00e9e pour notre premier SIP Server, ici nomm\u00e9e SIP_Server_1. Le 1 est bien s\u00fbr l\u00e0 car nous cr\u00e9erons ult\u00e9rieurement le 2&#8230;<\/p>\n\n\n\n<p>Je vous conseille de modifier de suite les options li\u00e9es au log car vous risquez de passer quelques heures\/jours \u00e0 les lire. Chacun ses pr\u00e9f\u00e9rences mais personnellement c&rsquo;est :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>&lsquo;verbose&rsquo; \u00e0 &lsquo;all&rsquo; quand le volume vous le permet. Toujours plus pratique quand vous devez investiguer sur un souci qui se pr\u00e9sente de mani\u00e8re al\u00e9atoire<\/li><li>&lsquo;keep-startup-files&rsquo; \u00e0 &lsquo;true&rsquo;, pratique pour avoir rapidement les options de configuration de l&rsquo;application en d\u00e9but de chaque fichier de log, et pas uniquement dans un seul dont vous aurez perdu la trace&#8230;<\/li><li> &lsquo;segment&rsquo; \u00e0 &rsquo;10 MB&rsquo; pour ne pas surcharger votre \u00e9diteur de texte pr\u00e9f\u00e9r\u00e9 et sa coloration syntaxique <\/li><li>&lsquo;expire&rsquo; \u00e0 &rsquo;10\/50\/100&prime;, bref \u00e0 un chiffre et pas une dur\u00e9e. Alors certes, il est compliqu\u00e9 de se repr\u00e9senter la dur\u00e9e que vont couvrir vos logs. Mais au moins vous savez que votre application occupera avec ses logs au maximum &lsquo;expire * segment&rsquo; Mo, et pas une t\u00e9trachi\u00e9e d&rsquo;octets qui rempliront votre disque et ramasseront votre installation. J&rsquo;ai d\u00e9j\u00e0 vu un confserv m\u00e9content des donn\u00e9es que lui envoyait l&rsquo;Interaction Server, et qui produisait un fichier de 10 Mo toutes les 3 secondes&#8230;<\/li><\/ul>\n\n\n\n<p>Pour les options autres que celles li\u00e9es aux logs, je vais me concentrer sur la partie TServer. Je ne vais que les effleurer mais voici quelques unes qui me sont souvent utiles, ou m&rsquo;ont d\u00e9j\u00e0 sorties du p\u00e9trin :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>le tryptique agent-no-answer-timeout\/agent-no-answer-overflow\/agent-no-answer-action : avec celles-ci, vous d\u00e9crivez dans l&rsquo;ordre :<ul><li>au bout de combien de temps on consid\u00e8re une absence de r\u00e9action d&rsquo;un agent \u00e0 un appel qui lui est pr\u00e9sent\u00e9 comme \u00e9tant anormale<\/li><li>quelle action prendre pour l&rsquo;appel (&lsquo;recall&rsquo; par exemple va le renvoyer au dernier objet de distribution, vous pouvez aussi sp\u00e9cifier un DN sp\u00e9cial \u00ab\u00a0routage par d\u00e9faut\u00a0\u00bb)<\/li><li>enfin, que faire pour le statut de l&rsquo;agent, et par exemple le mettre &lsquo;notready&rsquo; ou le d\u00e9connecter avec &lsquo;logout&rsquo;. Ainsi il ne recevra plus d&rsquo;appel si celui-ci s&rsquo;est absent\u00e9&#8230;<\/li><\/ul><\/li><li>wrap-up-time : le temps laiss\u00e9 \u00e0 l&rsquo;agent entre la conclusion d&rsquo;un appel et la pr\u00e9sentation du prochain<\/li><li>sip-port : par d\u00e9faut \u00e0 5060, le port par lequel la signalisation SIP s&rsquo;effectuera<\/li><li>sip-address : par d\u00e9faut \u00e0 vide, il faudra la remplir si vous avez plusieurs cartes r\u00e9seaux sur votre serveur, afin de vous assurer que les communications SIP partent bien sur la bonne patte<\/li><li>dial-plan : pour sp\u00e9cifier l&rsquo;objet \u00e0 utiliser qui d\u00e9finira vos r\u00e8gles de num\u00e9rotation vers l&rsquo;ext\u00e9rieur ou m\u00eame en interne<\/li><\/ul>\n\n\n\n<p>Une fois tout ceci param\u00e9tr\u00e9, il ne vous reste plus qu&rsquo;\u00e0 installer le SIP Server avec le classique &lsquo;.\/install.sh&rsquo; et r\u00e9pondre aux questions en ligne de commande.<\/p>\n\n\n\n<p>Une fois l&rsquo;installation termin\u00e9e, votre application SIP_Server_1 aura d\u00fb \u00eatre mise \u00e0 jour et ressembler \u00e0 ceci :<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2019\/02\/image.png\" alt=\"\" class=\"wp-image-108\" width=\"390\" height=\"362\"\/><\/figure>\n\n\n\n<p>Vous noterez que j&rsquo;ai mis \u00e0 jour la valeur de l&rsquo;option apr\u00e8s &lsquo;l&rsquo; afin que le SIP Server puisse v\u00e9rifier sa licence aupr\u00e8s des 2 FlexLM install\u00e9, au cas o\u00f9 l&rsquo;un d&rsquo;entre eux aurait flanch\u00e9&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C&rsquo;est bient\u00f4t fini ?<\/h2>\n\n\n\n<p>Oui. Et non&#8230;<br><br>On va dire que la partie complexe est presque derri\u00e8re nous, m\u00eame si dans les faits, on peut passer des heures et des jours \u00e0 parfaire les options du SIP Server.<br><br>Ils nous restent quelques \u00e9tapes \u00e0 faire, m\u00eame si rien de tr\u00e8s exceptionnel&#8230;<\/p>\n\n\n\n<p>Tout d&rsquo;abord, ouvrir le port SIP (le 5060 normalement). Cela se fera en 2 lignes de commandes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --permanent --add-port=5060\/udp\nsudo firewall-cmd --reload<\/code><\/pre>\n\n\n\n<p>(Pour ceux qui voudraient de plus amples informations sur firewall-cmd, vous pouvez vous reporter \u00e0 mon article \u00ab\u00a0<a href=\"https:\/\/www.grutt.org\/2019\/01\/11\/trucs-astuces-linux-eudbase-partie-1\/\">Trucs &amp; astuces Linux eudbase \u2013 Partie 1 \/ \u2026<\/a>\u00ab\u00a0)<\/p>\n\n\n\n<p>L\u00e0 vous serez tent\u00e9 de d\u00e9marrer votre SIP Server flambant neuf. Allez-y , je vous attends&#8230;<br><br>Alors, d\u00e9marrage puis extinction ? Et oui, car SIP Server est \u00ab\u00a0un peu\u00a0\u00bb exigeant et ne voudra pas d\u00e9marrer sans Switch associ\u00e9. Et pour d\u00e9clarer un switch, il faut d&rsquo;abord un switching office<br><br><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"239\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2019\/02\/image-1.png\" alt=\"\" class=\"wp-image-113\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"698\" height=\"316\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2019\/02\/image-2.png\" alt=\"\" class=\"wp-image-114\"\/><\/figure>\n\n\n\n<p>Comme vous pouvez le voir, rien de tr\u00e8s original (ne vous focalisez pas sur le nom du T-Server diff\u00e9rent, j&rsquo;ai d\u00fb utiliser une autre VM pour ma capture&#8230;)<br>A ce moment l\u00e0, votre SIP Server devrait d\u00e9marrer. Mais tant que nous y sommes, autant cr\u00e9er le n\u00e9cessaire pour le tester !<br>Nous allons donc cr\u00e9er 2 extensions sur le SIP Server qui serviront ensuite \u00e0 enregistrer 2 SIP Phones.<br>Ces deux extensions seront 00001 et 00002. La configuration sera ultra-basique. Ici un exemple avec 00001 :<br><br><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"629\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2019\/02\/image-3.png\" alt=\"\" class=\"wp-image-115\"\/><\/figure>\n\n\n\n<p>Rien de sp\u00e9cial \u00e0 voir sur l&rsquo;onglet g\u00e9n\u00e9ral. Un peu plus int\u00e9ressant est l&rsquo;onglet \u00ab\u00a0Options\u00a0\u00bb :<br><br><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"913\" height=\"201\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2019\/02\/image-4.png\" alt=\"\" class=\"wp-image-116\"\/><\/figure>\n\n\n\n<p>L&rsquo;option \u00ab\u00a0contact\u00a0\u00bb permet de sp\u00e9cifier l&rsquo;adresse de contact de cette extension&#8230; ou alors en la laissant \u00e0 *, celle-ci sera remplac\u00e9e dynamiquement quand le softphone s&rsquo;enregistera. Elle prendra alors pour valeur : sip:NUMERO_EXTENSION@NOM_MACHINE_CLIENTE:PORT_SIP_CLIENT<br>Cela permettra ainsi au SIP Server de savoir o\u00f9 adresser les appels qu&rsquo;il recevra.<br><\/p>\n\n\n\n<p>L&rsquo;option \u00ab\u00a0sip-cti-control\u00a0\u00bb d\u00e9finira quant \u00e0 elle les actions que le SIP Phone aura le droit d&rsquo;effectuer. Dans cet exemple du \u00ab\u00a0talk,hold,dtmf\u00a0\u00bb, cela signifie que le t\u00e9l\u00e9phone vous permettra de passe un appel ^^, de mettre l&rsquo;appel en attente et enfin d&rsquo;envoyer des fr\u00e9quences vocales.<\/p>\n\n\n\n<p>Maintenant que les extensions sont d\u00e9finies, il ne nous reste plus qu&rsquo;\u00e0 d\u00e9marrer le SIP Server et \u00e0 le tester gr\u00e2ce \u00e0 2 SIP Phones. Dans l&rsquo;exemple ci-dessous, j&rsquo;utiliserai <a href=\"https:\/\/www.counterpath.com\/x-lite\/\">X-Lite de CounterPath<\/a>.<br>Une fois celui-ci install\u00e9 sur deux machines diff\u00e9rentes <strong>ayant acc\u00e8s au serveur o\u00f9 vous avez install\u00e9 SIP Server<\/strong>, il vous restera \u00e0 cr\u00e9er un compte sur chaque X-Lite, un pour chaque extension.<br><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"445\" height=\"734\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2019\/02\/image-5.png\" alt=\"\" class=\"wp-image-117\"\/><\/figure>\n\n\n\n<p>Comme vous pouvez le constater, seules 2 options seront importantes :<br>&#8211; User ID qui sera en fait votre extension<br>et<br>&#8211; Domain qui sera l&rsquo;adresse IP de votre SIP Server<br>Et l\u00e0, sous vos yeux z\u00e9bahis :<br><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"396\" height=\"102\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2019\/02\/image-6.png\" alt=\"\" class=\"wp-image-118\"\/><figcaption>Le premier signe de la victoire<\/figcaption><\/figure>\n\n\n\n<p>Et pour valider cela, passons un appel :<br><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"388\" height=\"325\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2019\/02\/image-7.png\" alt=\"\" class=\"wp-image-119\"\/><figcaption>Deuxi\u00e8me signe de victoire<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"325\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2019\/02\/image-8.png\" alt=\"\" class=\"wp-image-120\"\/><figcaption>Et on peut m\u00eame mettre, en attente, c&rsquo;est g\u00e9nial \ud83d\ude42<\/figcaption><\/figure>\n\n\n\n<p>Nous voil\u00e0 donc avec un SIP Server certes basique, mais fonctionnel.<br>Dans la prochaine partie de ce tuto, nous attaquerons un point plus \u00ab\u00a0fun\u00a0\u00bb, en tout cas plus complexe : la mise en place de la HA pour le SIP Server.<br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>C&rsquo;est parti pour un nouveau tuto, en plusieurs parties. L&rsquo;id\u00e9e est de commencer par l&rsquo;installation d&rsquo;un SIP Server tout simple, et de le tester. Ensuite nous en installerons un second afin d&rsquo;activer la haute disponibilit\u00e9 pour ce composant et enfin nous l&rsquo;interfacerons avec Media Control Platform (MCP pour les intimes) afin de lui faire jouer &hellip; <a href=\"https:\/\/www.grutt.org\/?p=103\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;SIP Server mon amour&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,5,9,8],"tags":[],"class_list":["post-103","post","type-post","status-publish","format-standard","hentry","category-genesys","category-linux","category-sip","category-tutos"],"_links":{"self":[{"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/posts\/103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.grutt.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=103"}],"version-history":[{"count":4,"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/posts\/103\/revisions"}],"predecessor-version":[{"id":121,"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/posts\/103\/revisions\/121"}],"wp:attachment":[{"href":"https:\/\/www.grutt.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.grutt.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.grutt.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}