TableOfContents

Avant propos

Cette page présente l'installation du logiciel Asterisk qui est un commutateur téléphonique privé (PABX) que nous utilisons à l'AUF pour notre système de voix sur IP (["VoIP"]).

Cette page se concentre sur les aspects spécifiques à l'installation "AUF". Pour des informations plus générales, voir :

Infrastructure matériel et réseau nécessaire

Installer une machine Debian sur la DMZ. Dans un premier temps, si possible, prendre une machine qui ne fait rien d'autre, cela permettrait de voir la charge (une petite machine de test suffit) et d'éviter de casser d'autres choses autour. Une fois que tout sera testé, vous pourrez déployer sur une machine de production qui fait éventuellement autre chose.

La machine doit :

Note : si votre DMZ est en IP privée, ajoutez un DNAT vers cette machine pour le protocole IAX (4569/UDP).

Note 2 : suivant les clients SIP que vous utilisez, vous pourrez fixer sur ces clients les ports SIP et RTP. Avec x-lite par exemple on peut forcer 5060 et 8000, ce qui simplifie un peu les règles de pare-feu. Ceci étant, avoir des clients IAX simplifie beaucoup la vie ! Si possible, évitez d'utiliser le protocole SIP.

Installation du système Asterisk de base

Debian Sarge ne dispose pas de la dernière version d'Asterisk, mais un backport est facile à réaliser. Nous l'avons fait, et pour installer Asterisk il faut :

  1. Ajouter la source de paquets suivante dans le fichier /etc/apt/sources.list:

    # Source pour le système Asterisk à ajouter dans /etc/apt/sources.list :
    deb http://voip.ca.auf.org/asterisk ./
  2. Comme après toute modification de sources.list, mettre à jour la liste des paquets disponibles dans les sources :

    # aptitude update
  3. Installer asterisk avec
    # aptitude install asterisk
    # aptitude install asterisk-prompt-fr

Il faut maintenant le configurer pour l'intégrer au réseau VoIP de l'AUF.

Création d'une clé privée / clé publique pour l'interconnexion

Afin d'être intégré au système VoIP de l'AUF, vous devez disposer d'un couple de clés, privée et publique. La clé publique sera diffusée sur l'ensemble des autres noeuds VoIP de l'Agence afin qu'ils vous autorisent à appeler leurs postes. La clé privée sera, comme son nom l'indique, connue de votre serveur Asterisk seul.

ATTENTION : si vous avez déjà vos clés Asterisk (par exemple dans le cas d'une migration ou d'une ré-installation), conservez-les ! Faites-en une copie quelque part.

  1. Pour générer vos clés :
    $ /usr/sbin/astgenkey -q -n auf-implantation

    Note : astgenkey nécessite openssl. Si astgenkey ne marche pas, faites un aptitude install openssl

  2. Puis copiez vos clés pour que Asterisk les prennent en compte :
    # cp auf-implantation.pub auf-implantation.key /var/lib/asterisk/keys
    # chown -R root.asterisk /var/lib/asterisk/keys/*
    # chmod 644 /var/lib/asterisk/keys/*.pub
    # chmod 640 /var/lib/asterisk/keys/*.key

Conservez précieusement le fichier auf-implantation.key : sans cette clé privée vous ne pourrez plus appeler d'autres systèmes !

Indiquez votre clé publique sur ["/Clefs"] et prévenez-moi (ThomasNoël) afin que je l'ajoute à la liste des clés à distribuer. Notez bien : tant que votre clé publique n'a pas été distribuée vous ne pourrez pas appeler les sites distants car ils refuseront votre identification.

Interconnexion : installation de la configuration AUF d'Asterisk

Nous avons créée un paquet asterisk-config-auf qui va configurer pour vous toute la base du système. Il suffit donc de faire :

Le système va alors vous demander le nom de votre noeud VoIP. Nous avons décidé de nommer les noeuds auf-implantation, où implantation peut être simplement le nom de la ville, ou bien un nom plus distinctif s'il y a plusieurs serveurs VoIP AUF dans cette ville. Quelques exemples : auf-dakar, auf-paris, auf-bap1 et auf-bap2, auf-caimaurice, etc. Attention, choisissez bien votre nom car il sera compliqué de le changer ensuite.

Quelques explications techniques sur le paquet asterisk-config-auf :

Lancement du serveur

  1. Activer le démarrage automatique d'asterisk au démarrage de la machine dans /etc/default/asterisk :

    # A modifier dans /etc/default/asterisk :
    RUNASTERISK=yes
  2. Lancer le serveur :
    # /etc/init.d/asterisk start
    Starting Asterisk PBX: asterisk.

Premiers tests

Configurez un client (IAX de préférence) et enregistrez-le sur votre Asterisk avec le compte "test" (mot de passe "test"). Essayez d'appeler le 600 (echo).

Si la clé publique a été distribuée auparavant, essayer d'appeler 0033600 (echo Paris) et 001600 (echo Montreal) et demander à quelqu'un d'essayer d'appeler votre echo puis votre poste (00xxx100).

Dès que ça marche, supprimez le compte test (dans les fichiers /etc/asterisk/auf/*.local).

Configuration des comptes clients

Pour chaque poste client qui sera installé dans votre implantation (softphone ou téléphone IP), vous devez créer un compte. Tout se passe dans /etc/asterisk/auf. Les fichiers dont le nom se termine par .local sont ceux que vous devez adapter.

  1. /etc/asterisk/auf/sip.local : les comptes SIP locaux

  2. /etc/asterisk/auf/iax.local : les comptes IAX locaux. Note : si vous avez installé votre Asterisk avant le 10 janvier 2007, ce fichier est un lien symbolique vers sip.local. Cependant, vous pouvez rapidement avoir besoin d'une configuration différente : faites-en un fichier séparé.

  3. /etc/asterisk/auf/extensions.local : les associations entre numéro de téléphone et compte local à appeler

  4. /etc/asterisk/auf/voicemail.local : les boites vocales

Quand vous touchez à ces fichiers, n'oubliez pas ensuite de faire un /etc/init.d/asterisk reload. Attention, lors d'un reload si iax.conf a changé Asterisk oublie les clients qui étaient actuellement enregistrés : il faudra attendre au plus 2 minutes afin que tous les clients (les téléphones IP) se soient bien ré-enregistrés. Autrement dit : essayez de faire vos reload en heure creuse.

Configuration détaillée pour un téléphone IP matériel

A ajouter dans `/etc/asterisk/auf/iax.local`
; section à ajouter pour chaque poste

[prenom.nom]
; type=friend veut dire qu'il peut appeler _et_ être appelé
type=friend
; callerid : comment sera vu l'utilisateur par les personnes qu'il voudra contacter
; Il faut être TRES PRECIS ici, attention aux guillemets (") et aux signes < et >
; Prenom NOM : doit faire au maximum 16 caractères, uniquement ASCII (aucun accent)
;              afin de bien s'afficher sur un téléphone IP (écran LCD de 16 caractères)
; 00pppnnn   : numéro du poste, avec préfixe international. Uniquement des chiffres, aucun espace
callerid="Prenom NOM" <00pppnnn>
; Cette boite doit exister dans voicemail.local
mailbox=206@AUF
; Paramètres d'authentification. Note : on met le mot de passe en clair
user=prenom.nom
secret=mot_de_passe
; host=dynamic : l'adresse IP du poste sera connue lors de la connexion de celui-ci
; Si vous êtes sûr de vous, vous pouvez donner l'adresse ou le nom IP du poste,
; ainsi le téléphone n'aura même pas besoin d'être enregistrer pour _recevoir_ des appels
host=dynamic
; Contexte dans lequel se place ce poste (en gros, indique quels sont les numéros
; qu'il aura le droit d'appeler : ils doivent être dans le même contexte que lui)
context=AUF
; Codec : on n'accepte que le codec ulaw (belle qualité, quasiment pas de compression.
; Asterisk effectuera la compression si besoin, par exemple pour une communication 
; internationale avec un pays à faible bande passante.
disallow=all
allow=ulaw
A ajouter dans `/etc/asterisk/auf/extensions.local`
; nnn est le numéro local du poste (sans le préfixe international)
exten => nnn,1,Macro(AUFDial,prenom.nom)
A ajouter dans `/etc/asterisk/auf/voicemail.local`
; nnn  : le numéro local du poste concerné
; PASS : le mot de passe, idéalement 3 ou 4 chiffres (et uniquement des chiffres !)
; Note : on met un "-" devant le mot de passe afin qu'Asterisk ne tente pas de le 
;        changer ; nous cherchons cependant une solution permettant aux personnes
;        de modifier leur mot de passe...
nnn => -PASS,Prenom NOM,prenom.nom@auf.org

Annexes

Annexe 1 : suivi et débogage du serveur

Les commandes de base :

Asterisk dispose d'un mode console, en ligne de commande, très pratique et qu'il est conseillé d'approfondir si vous voulez vraiment vous amuser avec Asterisk. Ce mode console est disponible avec asterisk -r ou rasterisk. En ajoutant l'option -v vous pouvez de plus déboguer en direct (affichage des logs sur la console). Plus vous mettez de -v plus le niveau de débogage est élevé. Pour bien comprendre comment fonctionne Asterisk il est donc conseiller de lancer carrément la commande suivante :

Vous êtes alors en mode ligne de commande. Ca fonctionne un peu comme un Cisco. Tapez help pour avoir la liste des commandes, la touche [Tab] ou ? pour la complétion automatique, etc.

Une commande extrémement utile est reload :

qui va demander à asterisk de relire tous ses fichiers de configuration. Vous pouvez être plus précis en ne demandant que la recharge de certains modules, par exemple :

Annexe 2 : quand tout est cassé, réinstallation complète d'Asterisk

  1. Suppression complète (n'oubliez pas de copier au moins votre clé privée !) :
    # /etc/init.d/asterisk stop
    # mkdir -p /root/asterisk
    # cp -a /etc/asterisk /root/asterisk/etc
    # cp -a /var/lib/asterisk/keys /root/asterisk/keys    # (on fait une copie des clés)
    # apt-get --purge remove asterisk asterisk-sounds-main
    # apt-get --purge remove asterisk-config-auf asterisk-config-auf-connexions
    # rm -rf /etc/asterisk /var/lib/asterisk /var/spool/asterisk /var/run/asterisk
  2. Reinstallation :
    # aptitude install asterisk asterisk-config-auf
  3. Reconfiguration : reprendre les clés et les configurations des postes clients (sip.local, iax.local, extensions.local)

Annexe 4: installation d'un timer pour Asterisk (notamment pour "MeetMe")

Note : avec un peu de chance, cela ne sera plus nécessaire en Asterisk 1.4. Espérons !

Pour certaines utilisations, Asterisk a besoin d'un système de timing précis. C'est le cas pour le chouette système de conférence MeetMe (voir /etc/asterisk/meetme.conf). Il existe des timers matériels et des émulations logicielles. Nous allons utiliser cette dernière solution et installer le module ztdummy (un "faux périphérique zaptel"). La procédure la suivante :

  1. vérifier que vous avez un noyau 2.6 (c'est une bonne idée car le 2.6 gère mieux les problèmatiques temps réel). Si vous ne compilez pas sur la machine où est installé Asterisk (ce qui serait mieux), vérifiez que vous avez bien exactement le même noyau sur les deux machines, et que la machine où vous allez compiler le module possède la source "deb http://voip.ca.auf.org/asterisk ./" dans son sources.list).

  2. installer les sources du module :
    • # aptitude install zaptel-source
  3. compiler les sources et installer le paquet :
    • # module-assistant build zaptel
        ... patienter, ça peut durer quelques minutes.
      # module-assistant install zaptel    (si vous avez compilé sur la machine Asterisk)

    Note : si vous avec compilé sur une autre machine, copiez /usr/src/zaptel-module*.deb sur la machine avec Asterisk puis installez le paquet avec dpkg -i zaptel-module-*.deb

  4. incorporer le module dans le noyau :
    • # modprobe ztdummy
  5. vous devez voir une ligne Zapata Telephony Interface Registered on major 196 dans les logs (visible avec dmesg | tail).

  6. faites un test de MeetMe si possible (vous n'aviez pas installé ztdummy sans savoir ce qu'était MeetMe, n'est-ce pas ? ;-) )

  7. si tout marche, ajouter ztdummy à la liste des modules à incorporer au noyau lors du démarrage du serveur (dans /etc/modules)

Annexe 5 : paquets asterisk-config-auf*

Les sources et l'actualité du développement ici : http://trac.sn.auf.org/asterisk-auf

Annexe 6 : statistiques

Voir la sous page ["/Stats"] : mise en place d'un système de statistiques pour Asterisk