Guide d’installation de Trixbox 2.0

 

 

 

Sommaire :

 

Installation. 2

Obtenir Trixbox. 2

Installation du système. 2

Premier démarrage. 3

Configuration d’Asterisk. 5

Accès à l’interface de configuration. 5

Ajouter des extensions. 6

Configurer les appels sortants. 8

Trunks. 8

Routes. 9

Configurer les appels entrants. 10

Création de dial-plans (custom applications) 11

Codecs. 14

Codecs installés par défaut 14

Installation des codecs g723 et g729 : 14

Connaître le codec utilisé pendant un appel 15

Problèmes de transcodage avec iLBC. 18

Administration de Trixbox. 18

Modification des mots de passe par défaut 18

FreePBX. 18

MySQL. 19

Installation des modules disponibles par défaut 19

Divers. 20

Générer du trafic pour tester le fonctionnement d’Asterisk. 20

Commandes utiles. 23

 

 

 

 

 

 

 

 

 

 

Switzernet, Février 2006

 


 

Installation

Obtenir Trixbox

 

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.

 

 

Installation du système

 

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.

 

 

Premier démarrage

 

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é.

 


 

Configuration d’Asterisk

Accès à l’interface de configuration

 

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" :

 

 

 

Ajouter des extensions

 

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).

 

 

Remarque importante pour une utilisation commerciale (but final de notre installation) :

 

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.

Configurer les appels sortants

Trunks

 

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.

 

 

Routes

 

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.

 

 

Configurer les appels entrants

 

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" :

 

 

Création de dial-plans (custom applications)

 

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.

 

 


Codecs

Codecs installés par défaut

 

Par défaut, asterisk supporte (entre autres) les codecs suivants :

 

 

 

Des codecs supplémentaires peuvent être installés sous forme de modules.

 

 

Installation des codecs g723 et g729 :

 

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

 

 

Connaître le codec utilisé pendant un appel

 

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é :

 

 

 

Problèmes de transcodage avec iLBC

 

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 :

 

 

Administration de Trixbox

 

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/

 

 

Modification des mots de passe par défaut

FreePBX

 

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

MySQL

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

Installation des modules disponibles par défaut

 

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.

 

 

Divers

Générer du trafic pour tester le fonctionnement d’Asterisk

 

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 utiles

 

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>