Guide d’installation de Trixbox 2.0
Sommaire :
Accès à l’interface de configuration
Configurer les appels sortants
Configurer les appels entrants
Création de dial-plans (custom applications)
Installation des codecs g723 et g729 :
Connaître le codec utilisé pendant un appel
Problèmes de transcodage avec iLBC
Modification des mots de passe par défaut
Installation des modules disponibles par défaut
Générer du trafic pour tester le fonctionnement d’Asterisk
Switzernet, Février 2006
Télécharger l’image ISO (trixbox2.0.iso) à partir du site http://www.trixbox.org/ (le lien de téléchargement mène sur sourceforge.net) et graver l’image ISO sur un CDROM.
Trixbox est une distribution linux complète (utilisant CentOS), intégrant entre autres Asterisk, FreePBX, Apache et MySQL. Son installation est donc entièrement automatique.
Au démarrage, insérer le CDROM dans le lecteur et presser sur entrée à l’écran de démarrage de l’installeur. Quand demandé, sélectionner le bon type de clavier (fr_CH-Latin1) :
Ainsi que la localisation (Europe/Zurich) :
Et choisir le mot de passe root :
L’installation se déroule ensuite automatiquement (plusieurs redémarrages seront nécessaires).
Ne pas oublier de retirer le CDROM au premier redémarrage (il s’éjecte automatiquement).
Par défaut, le système s’installe sur le disque entier sans demander de partitionnement.
Paramétrer le réseau pour un serveur statique (la configuration par défaut est en DHCP). Par exemple avec la commande netconfig :
Attention ! Cette opération va complètement effacer les valeurs précédentes !!
Configurer l’adresse IP, masque de réseau, passerelle et serveur DNS et cliquer sur OK.
Il faut alors relancer l’interface réseau avec la commande :
sercice network restart
ou
/etc/init.d/network restart
Le serveur est maintenant fonctionnel et prêt à être configuré.
On accède à l’interface web de configuration de Trixbox en entrant l’adresse du serveur dans un navigateur internet :
Passer en mode administrateur en cliquant sur "switch". Par défaut :
utilisateur : maint
mot de passe : password
Cliquer sur le menu "Asterisk" → "FreePBX" :
puis "Setup" :
On commence par ajouter des extensions (ici generic SIP device). Une extension représente simplement un numéro de téléphone.
Pour chaque extension, indiquer le numéro SIP (où XXXX est le short SIP), le nom qui s’affichera pour les appels passés et le mot de passe SIP ("secret"). Le bouton "submit" enregistre les modifications, mais sans les appliquer.
Après avoir ajouté toutes les extensions, il faut appliquer les modifications sur le serveur, ce qui redémarrera le service asterisk (notez que vous avez des messages de feedback sur l’écran du serveur) :
Maintenant, les téléphones SIP branchés sur le réseau du serveur doivent pouvoir communiquer entre eux (uniquement en utilisant un des codecs supportés par Asterisk).
Par défaut, n’importe qui peut accéder à l’interface web (FreePBX) du serveur par son IP, et peut alors voir toutes les extensions, trunks, … !
Pour y remédier, voici une solution brutale mais rudement efficace : il faut simplement éditer le template de la page FOP (Flash Operator Panel) pour les utilisateurs externes, qui est dans le dossier /var/www/html/user/modules/04_fop et commenter (en html) le template :
# nano /www/html/user/modules/04_fop/fop.tpl
Lors de la prochaine ouverture de la page FOP sur l’interface FreePBX, le fichier flash ne sera alors pas chargé, mais il le sera pour l’interface administrateur (maint).
Autre technique encore plus brutale, mais surtout plus sûre pour nos intérêts : laisser le fichier fop.tpl complètement vide… !!
Pour ne pas laisser l’application flash tourner pour rien (sa génération peut être assez coûteuse en CPU), on peut maintenant totalement la supprimer du lancement du service amportal :
On édite le fichier /usr/sbin/amportal. Dans la partie qui ressemble à un script d’init, on commente les appels aux méthodes run_fop et stop_fop (pour éviter les messages d’erreur éventuels). Normalement, commenter les lignes run_fop, redémarrer amportal puis commenter les lignes stop_fop est suffisant. Si on veut être vraiment sur de ne pas laisser de traces de l’application flash, on peut faire aussi un killall op_server.pl (le script perl qui génère le flash), ou même directement rebooter le serveur.
Un trunk représente un accès du serveur vers l’extérieur. Par exemple vers un serveur spécifique, un routeur… Tous les trunks que nous utilisons ici sont des trunks SIP.
Dans la configuration du trunk, on donne l’adresse du serveur externe auquel on veut se connecter (ici un autre serveur SIP), la liste des codecs autorisés (dans l’ordre de préférence) et le type du serveur externe (peer ou friend). Le type "friend" est la méthode de connexion la plus simple, mais aussi la moins sûre.
Les autres champs peuvent être laissés vides. On déclare un trunk différent pour chaque serveur sortant.
Une route va permettre de diriger un appel sortant vers une destination particulière, par exemple en fonction du numéro composé ("dial pattern"). Par exemple ici, on crée une route qui redirige l’appel vers le trunk "swiss-sip" si le numéro appelé est préfixé d’un 4.
A ce stade, le serveur sera capable d’appeler des appareils externes suivant les trunks définis.
On va maintenant permettre aux appels entrants d’être dirigés sur le bon appareil. On ajoute une route entrante pour chaque extension qui doit être atteignable de l’extérieur.
On entre le numéro SIP comme identifiant de la route, et on indique quoi faire de l’appel entrant. Ici, il est simplement redirigé vers l’appareil concerné.
Notes
Dans l’onglet "General Settings" :
Dans la configuration d’Asterisk, un dial-plan représente la suite d’actions qui se déroule pendant un appel. Toute la configuration d’Asterisk passe par ces dial-plans, même si l’interface FreePBX les cache à l’utilisateur. Pour obtenir des fonctions plus avancées, on doit passer par la création de dial-plans personnalisés.
Au lieu de simplement faire sonner un appareil, on peut définir des actions particulières (par exemple, lire un message, demander une entrée à l’utilisateur…). Ici on définit un dial-plan personnalisé pour les appels entrants, dans l’onglet "Inbound Routes" (qui ne concerne que les appels venant de l’extérieur, et pas les connexions SIP à SIP) :
Dans ce cas, on l’appelle dans le champ "Custom App" de la destination.
La syntaxe d’appel est "nom_du_dial_plan,no_extension,premiere_action. Ici, custom-mes,41215500308,1, qui appelle le plan custom_mes, avec le numéro d’extension qui reçoit l’appel, et on commence l’exécution du plan à la position 1.
Les dials plans sont définis dans le fichier /etc/asterisk/extensions_custom.conf, qu’on peut éditer par le menu "Config Edit" de FreePBX :
On définit le dial-plan custom-mes (le nom de tous les dial-plans personnalisés doit commencer par custom_) :
Son déroulement est assez simple :
[custom-mes]
exten => _4121550.,1,Answer 1. Décrocher l’appel
exten => _4121550.,2,Wait(1) 2. Attendre une seconde
exten => _4121550.,3,Set(fromext=${EXTEN:4}) 3. Mémoriser le numéro appelé dans la variable fromext (moins les 4 premiers chiffres)
exten => _4121550.,4,SayDigits(${fromext}) 4. Dire le numéro
exten => _4121550.,5,Playback(fpm-world-mix) 5. Jouer une musique
exten => _4121550.,6,Hangup 6. Raccrocher l’appel
Chaque ligne du plan commence par l’extension concernée. Ici on utilise "_4121550.", qui matche tous les numéros de la forme 4121550*. Le "_" au début de l’extension signifie qu’elle doit être interprétée comme une expression régulière. Les expressions utilisables sont :
X |
N’importe quel chiffre de 0 à 9 |
Z |
N’importe quel chiffre de 1 à 9 |
N |
N’importe quel chiffre de 2 à 9 |
[1237-9] |
N’importe lequel des caractères entre crochets (ici 1,2,3,7,8,9) |
. |
N’importe quelle suite (un ou plus) de caractères |
! |
N’importe quelle suite (zéro ou plus) de caractères, mais interprété dès que l’expression correspond. |
On donne ensuite pour chaque commande sa priorité d’exécution, et enfin la commande elle-même.
En pratique, on peut créer des plans bien plus compliqués.
Par défaut, asterisk supporte (entre autres) les codecs suivants :
Des codecs supplémentaires peuvent être installés sous forme de modules.
Ces deux codecs sont normalement soumis à une taxe à payer pour l’utilisation.
Identifier le type de processeur, identifié par le mot clé ‘model name’ :
# cat /proc/cpuinfo
model name : Intel(R) Pentium(R) 4 CPU 1.70GHz
Aller dans le répertoire des modules d’asterisk :
# cd /usr/lib/asterisk/modules
Télécharger les codecs correspondant au processeur utilisé :
Pentium 4 :
# wget http://kvin.lv/pub/Linux/Asterisk/built-for-asterisk-1.2/codec_g729-gcc-pentium4.so
# wget http://kvin.lv/pub/Linux/Asterisk/built-for-asterisk-1.2/codec_g723-icc-pentium4.so
Pour les autres processeurs, voir la liste des fichiers disponibles à l’adresse suivante :
http://kvin.lv/pub/Linux/Asterisk/built-for-asterisk-1.2/
Ajouter ces nouveaux codecs au fichier sip.conf :
Aussi ajouter les nouveaux codecs dans le fichier /etc/asterisk/sip_custom.conf (mettre les codecs dans l’ordre de préférence). Créer le fichier s’il n’existe pas :
allow=g723
allow=g729
NB : Ceci n’est pas très utile, pour ne pas dire gênant pour l’instant… Oublier cette étape.
Redémarrer le serveur Asterisk et l’interface FreePBX ; le tout est regroupé sous le service amportal (voir # amportal --help pour plus d’informations) :
# amportal restart
En mode console pour Asterisk (CLI), accessible en tapant # asterisk -r dans un terminal, la commande show channels donne la liste de toutes les communications en cours (un canal [channel] par appareil).
Après avoir trouvé le bon canal, show channel <channel> donne des informations supplémentaires sur la communication.
Note : utiliser la touche tabulation pour compléter le suffixe du canal que l’on veut étudier.
Les champs NativeFormat, WriteFormat et ReadFormat indiquent le codec utilisé.
Pour obtenir le codec correspondant au code précédent, on utilise la commande show codecs, qui liste tous les codecs disponibles.
Ici on voit que le codec utilisé est iLBC.
On peut obtenir la même chose avec plus de détails en utilisant la commande sip show channels, puis sip show channel <channel> avec le canal désiré :
Par défaut, les appareils Grandstream (BudgeTone et HandyTone) sont configurés pour utiliser un frame size de 20ms avec le codec iLBC. Cela pose problème pour le transcodage vers g723. Dans ce cas, aucun son ne sort d’un des appareils, alors que de l’autre côté le son est très mauvais (uniquement des bruits de compression). De plus, du côté du serveur et des routeurs, l’appel semble se dérouler normalement.
Pour remédier à ce problème, il suffit de modifier le frame size utilisé par iLBC à 30ms (ce qui correspond au frame size du codec g723). On le fait directement depuis l’interface web de l’appareil :
A la place du gestionnaire de paquets par défaut (yum), on peut directement utiliser l’interface web de Trixbox pour effectuer les mises à jour et installations de nouveaux paquets.
Il faut d’abord se créer un compte en cliquant sur le bouton "register". Si ça ne marche pas, on peut aussi s’inscrire directement sur les forums Trixbox (c’est le même login) :
http://www.trixbox.org/modules/newbb/
Utilisateur de maintenance :
Depuis la console (en root), lancer la commande
# passwd-maint
Utilisateur : maint
Mot de passe par défaut : password
Utilisateur secondaire (pas d’accès au mode maintenance) :
Depuis la console (en root), lancer la commande :
# passwd-amp
Utilisateur : wwwadmin
Mot de passe par défaut : password
Depuis la console (en root), lancer la commande :
# mysqladmin -p -u root password 'new_password'
Il faudra entrer le mot de passe actuel.
Utilisateur : root
Mot de passe par défaut : passw0rd
Depuis la section Tools de l’interface FreePBX, aller dans Module Admin, et tout installer :
Tous les modules ne sont pas forcément utiles, mais nous anticipons pour la suite ; par exemple nous sommes particulièrement intéressés par les Ring Groups, comme nous allons le voir ci-dessous.
Pour tester la capacité du serveur, au lieu d’utiliser vraiment un grand nombre de téléphones, on peut aussi générer du trafic en utilisant les routes et les groupes de sonneries.
On n’a même pas besoin de créer d’extensions. On commence par déclarer un "ring group" (accessible dans la section Setup) pour chaque appareil désiré, ici on a choisi la plage des numéros 02155090XX. Ce n’est pas un vrai ring group, dans le sens ou il ne fait sonner qu’un seul appareil.
On garde les options par défaut du ring group. La seule différence est que le numéro appelé doit être déclaré comme un numéro externe (on ajoute un # à la fin). Il faut juste changer le time-out sur 60 secondes (cercle bleu) si nous mettons beaucoup de ring groups à la suite (dans notre cas, il y en a une vingtaine).
Pour chaque ring group, on crée ensuite une route entrante :
Jusqu’ici, ces routes sont aussi laissées aux valeurs par défaut. C’est maintenant qu’on met en place le système d’appels en chaîne. Pour obtenir l’effet désiré, chaque route pointe sur le ring group suivant :
Cela crée une chaîne d’appels aussi longue que l’on veut (ici par exemple 9000 → 9002 → 9003 → … → 9020 → 0303). Le numéro 0215500303 est cette fois un "vrai" numéro, qui pointe sur un appareil physique (cela peut être un natel, p.e.), pour pouvoir décrocher finalement l’appel.
Remarque : ne pas oublier de définir ces numéros sur le Cisco entrant ! (voir la documentation à ce sujet)
On voit pourquoi les numéros d’appels des ring groups sont déclarés comme numéros externes. De cette manière, les appels « sortent » de l’Asterisk, sans cela, tout resterait sur le réseau SIP. Le chemin que prennent les appels est donc le suivant :
On appelle le numéro 0215509000 de l’extérieur, mais au lieu de décrocher, l’appel est transféré dans la boucle d’appels. Il y fait un passage pour chacun des ring groups déclarés précédemment, et à la fin on le renvoie sur le 0215500303, qui décroche l’appel.
Si on examine le cheminement des appels sur les routeurs entrant et sortant, on obtient le fonctionnement suivant :
Commandes linux : |
|
Redémarrer le serveur Asterisk |
amportal restart |
Mode console (CLI) d’Asterisk (contacte une instance déjà lancée) / mode verbeux |
asterisk –r |
asterisk -r –vvvvv |
|
|
|
Commandes en mode Asterisk CLI : |
|
Activer/désactiver le debug SIP (affiche beaucoup d’informations sur les connexions) |
sip debug |
sip no debug |
|
Afficher la liste des peers connectés au serveur / les détails d’un peer |
sip show peers |
sip show peer <peer> |
|
Afficher la liste des canaux en cours d’utilisation / les détails d’un canal |
sip show channels |
sip show channel <channel> |
|
Changer la verbosité (zéro pour le minimum de verbosité) |
set verbose <verbosity> |