Vous êtes sur la page 1sur 13

Asterisk, une configuration simple pour bien

débuter
Contenus

 Introduction
 Le status de votre serveur
o Asterisk CLI
o Service Asterisk
 Les fichiers de configuration
o sip.conf
o users.conf
 General
 Templates
 Les Utilisateurs
o extensions.conf
 La section générale
 La section globales
 Les includes
o rtp.conf
 Conclusion

ntroduction

Une fois l’installation terminée et les grandes lignes du firewall configurées, il ne vous reste plus
qu’à configurer votre serveur.
« Plus qu’à », plus facile à dire (écrire) qu’à faire vous me dites..
Rassurez-vous, ce post devrait vous simplifier la vie, en vous proposant au début une
configuration simple d’Asterisk que vous pouvez enrichir petit à petit..

Le but étant de ne pas vous perdre dans la multitude de possibilités et de vous permettre d’avoir
un serveur « online » rapidement.

Objectif 1 : établir une communication en interne

Le status de votre serveur

Avant de pouvoir configurer votre serveur, il est nécessaire de s’assurer que celui-ci fonctionne,
de vérifier son status, de pouvoir l’arrêter ou redémarrer au besoin.

Asterisk CLI

Le moyen le plus rapide de vérifier que notre serveur Asterisk est bien en fonctionnement est de
se connecter à sa ligne de commande,
pour celà il suffit de taper la commande

# asterisk
Résultat de la commande « asterisk »

Si vous souhaitez rester connecté à la console, afin par exemple de taper des commandes, il vous
faut ajouter l’argument « r »

# asterisk -r

Connexion à la commande ligne d’asterisk

Vous pouvez également choisir, le niveau d’information (niveau de verbosité) que vous voulez
recevoir dans la console en ajoutant un ou plusieurs « v »

# asterisk -rv

ou si vous souhaitez beaucoup plus d’information

# asterisk -rvvvvvvvv
asterisk verbosité « v »

Service Asterisk

Dans la même optique, vous pouvez également vérifier le status du service asterisk

# service asterisk status

Comme pour les autres services, les options « start« , « stop« , « restart« , « reload » sont
disponibles
Le service asterisk est démarré au boot de votre system.
L’ordre de démarrage des services pourra avoit son importance si vous décidez par exemple
d’installer un serveur VPN, pour que vos extensions soient joignables via ce tunnel, il faudra
qu’Asterisk démarre après le serveur VPN.

Les fichiers de configuration

Sur « Raspbian« , mais également « Debian », « Ubuntu », les fichiers de configuration (*.conf)
se trouvent dans le répertoire /etc/asterisk.
Asterisk permet de gérer plusieurs protocoles de communications, nous nous intéresserons juste
au protocole SIP.

Nous allons nous focaliser sur les fichiers que je considère les plus important pour notre mise en
route.

 sip.conf
 users.conf
 extensions.conf
 rtp.conf

A noter que pour les trois premiers fichiers, il n’est pas obligatoire de séparer leur contenu,
certains tutoriaux sur le net regroupent l’information dans le fichier principal « sip.conf » et
laisse donc les autres fichiers vides.
J’ai fait le choix de les séparer, un des avantages est qu’ainsi les utilisateurs et extensions
configurés le sont également pour d’autres protocoles.

Veuillez noter également que tout changement dans les fichiers de configuration ne prendra effet
qu’après un reload de la configuration, ce qui se fait soit

 via l’option « reload » du service


 via la commande « sip reload » dans la CLI
 directment depuis votre terminal avec la commande « # asterisk -rx « sip reload » « 

sip.conf

Ce fichier contiendra les options générales de votre configuration comme par exemple:

 la langue de votre serveur, utile si vous utilisez les fichiers audios (répondeur, ivr, …)
language=fr

 les informations réseaux (adresse, port, ..)

bindport=5060
bindaddr=0.0.0.0
srvlookup=yes

J’ai choisi de garder le port standard 5060 et d’écouter sur toutes les interfaces, ceci parce
que j’ai dans l’esprit d’ajouter plus tard un serveur VPN.
Si ce n’est pas votre cas, vous pouvez renseigner l’adresse IP de votre serveur, que vous
pouvez obtenir avec la commande « ifconfig« 

 les options pour gérer le NAT

qualify=yes
nat=force_rport,comedia
directmedia=update,nonat
localnet=192.168.1.0/255.255.255.0
localnet=10.8.0.0/255.255.0.0
externhost=<yourddns>:5060
externrefresh=15
directmediapermit=192.168.1.0/255.255.255.0
directmediapermit=10.8.0.0/255.255.0.0

Ceci suppose que votre serveur se trouvera derrière votre BBOX et ne sera pas dans la
DMZ.
Deux réseaux locaux (localnet) sont renseignés que vous devrez peut-être adapter selon
votre réseau, dans mon cas:
le premier (192.168.1.0/24) est le réseau de la BBOX3 tandis que le réseau 10.8.0.0/16
est le réseau d’un future VPN.
Pour ces deux réseaux, j’autorise la communication en direct entre les extensions
(directmediapermit).

On peut donc partir sur un fichier assez simple ressemblant à ceci

[general]
language=fr
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
qualify=yes
nat=force_rport,comedia
directmedia=update,nonat
localnet=192.168.1.0/255.255.255.0
localnet=10.8.0.0/255.255.0.0
externhost=<yourddns>:5060
externrefresh=15
directmediapermit=192.168.1.0/255.255.255.0
directmediapermit=10.8.0.0/255.255.0.0
Afin de vérifier que nous n’avons pas fait d’erreur de syntaxe, nous pouvons nous connecter à la
console et tapez la commande afin de reloader la configuration.

sip reload

Cette configuration pose les bases de notre serveur mais on ne peut toujours pas téléphoner avec
cette configuration…

users.conf

Comme vous pouvez-vous y attendre, ce fichier sert à la définition des utilisateurs.


Je divise ce fichier en trois sections

 general
 template
 user

General

Dans cette section, on retrouve les options qui s’appliquent à tous les utilisateurs, on y retrouve
entre autres le(s) protocole(s) authorisés (seulement SIP dans notre cas), les actions autorisées
(forward, park, ..).

[general]
hasvoicemail = yes
hassip = yes
hasiax = no
hasmanager = no
callwaiting = yes
threewaycalling = yes
callwaitingcallerid = yes
transfer = yes
canpark = yes
cancallforward = yes
callreturn = yes
callgroup = 1
pickupgroup = 1

Templates

J’ai décidé de créer un template selon

 le type de téléphone (ip phone, soft-phone)


 et la manière dont ces téléphones vont se connecter (réseau interne, réseau externe, vpn).

Le but derrière la création de ces templates est de faciliter la maintenance et l’ajout de nouveau
utilisateurs, car on y retrouve les options communes.
Je n’ai pas considéré la dimension du contexte, les templates ne permettent que de joindre les
extensions locales (context=User-Internal voir plus loin dans l’article), si besoin un contexte plus
précis sera donné dans la définition des utilisateurs.
IP phone

Ce template sera utilisé par les téléphone IP, souvent connecté au réseau local (192.168.1.0/24)
par cable.

[ip-phone](!)
type=friend
context=User-internal
host=dynamic
qualify=yes
dtmfmode=auto
disallow=all
allow=ulaw
allow=g722
nat=force_rport,comedia
directmedia=update
fromdomain=<yourddns>
defaultexpirey=3600

Soft-phone local

Ce template sera utilisé par les softwares qui permettent d’utiliser le protocole SIP que ce soit sur
ordinateur (Ekiga, Twinkle, …) our sur téléphone mobile (Zoiper, Csip, …) mais toujours
connecté au réseau local (192.168.1.0/24) par wifi ou cable.

[soft-phone](!)
type=friend
context=User-internal
host= dynamic
qualify=yes
dtmfmode=auto
disallow=all
allow=ulaw
allow=g722
nat=force_rport,comedia
directmedia=update,nonat
fromdomain=<your-ddns>
defaultexpirey=3600

Soft-phone VPN

[soft-phone-vpn](!)
type=friend
context=User-internal
host=dynamic
qualify=yes
dtmfmode=auto
disallow=all
allow=ulaw
allow=g722
nat=force_rport,comedia
directmedia=no
fromdomain=<your-ddns>
defaultexpirey=3600

External

Un template pour les IP phones ou softphones se connectant de l’extérieur, pour ce dernier type,
il faudra revoir notre firewall afin d’autoriser ces utilisateurs à s’enregistrer..

Les Utilisateurs

Dans cette dernière section, je rattache chaque uilisateur à un template et lui ajoute ces
caractéristiques propres comme

 le numéro d’extension pour le joindre


 l’ID de l’utilisateur (à noter que j’ai opter pour un ID différent du numéro d’extension)
 le mot de passe de l’utilisateur
 le nom du contact qui s’affichera lors des appels
 l’adresse email pour recevoir les messages vocaux

ce qui donne par example pour un soft-phone (en gras le template)

[blablabefddcvgyefjeif-1](soft-phone)
alternateexts= 6001
fullname= Malandra Sebastien
description= Ekiga-cba
;context= User-standard
secret=<mot-de-passe-de-cet-utilisateur>
email= 6001@malandra.noip.me
cid_number = 6001

et pour un IP phone:

[blablabefddcvgyefjeif-2](ip-phone)
alternateexts= 6005
;fullname= Malandra Sebastien
description= TB30-Bureau
;context= User-standard
secret=<mot-de-passe-de-cet-utilisateur>
email= 6005@malandra.noip.me
cid_number = 6005

il ne reste plus qu’à sauver le fichier et s’assurer qu’Asterisk considère les changements avec les
commandes « sip reload » suivies de « sip show peers »
Résultat de la commande sip show peers

J’ai effacé les autres utilisateurs et mis en évidence les 2 utilisateurs dont je donne l’exemple
plus haut, on peut voir sur l’image que le premier utilisateur utilisant l’IP phone est connecté (IP
192.168.1.28) mais que l’autre n’est pas connecté. (pas d’IP et status UNKNOWN)

Maintenant, on a deux utilisateurs mais ceux-ci ne peuvent toujours pas s’appeller, mais ça ne
devrait plus trop tarder..

extensions.conf

Ce fichier que l’on appelle aussi le dialplan (plan d’appel) décrit l’action ou la suite d’actions qui
se passe lorsque l’on essaie de joindre un numéro (une extension).

Il se compose dans ma configuration de différentes sections

 [general] pour la configuration valable pour toutes les extensions


 [globals] pour la définition des variables globales qui peuvent être utilisées dans la définition des
extensions
 [Includes]

La section générale

[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=yes
priorityjumping=no

La section globales

[globals]
DIAL_OPTS = g
MY_DIAL_STATUS = ANSWER
TIMEOUT = 45

Les includes

#include « z_submenu.conf
#include « z_localset.conf »
#include « z_user_context.conf »
#include « z_outgoing_context.conf »
Rien ne vous oblige à créer des includes mais je trouvais qu ça permettait d’avoir une
configuration claire.

Le fichier z_submenu.conf

Dans ce fichier, comme pour la configuration des templates pour les users, ceci permet de définir
une suite d’instructions et de pouvoir l’appeler, évitant ainsi de devoir répéter les mêmes
instructions. L’autre avantage qui peut s’avérer parfois un problème est que l’on peut changer le
flow de toutes ces extesions, juste en changeant ces flows.

Dans ma configuration, je m’en sers principalement pour ne pas devoir répéter le suite
d’instructions, si personne ne décroche dans les 20 secondes, envoyer l’appel vers la messagerie.

[subDialVm]
exten => start,1,NoOp()
same => n,GoSub(subDialer,start,1(${ARG1},20))
same => n,GotoIf($[« ${GOSUB_RETVAL} » = « ANSWER »]?DialOk)
same => n,GoSub(subVoicemail,start,1(${ARG2},LocalSets,${GOSUB_RETVAL}))
same => n(DialOk),Hangup()

[subDialer]
exten => start,1,NoOp()
same => n,Dial(${ARG1},${ARG2},${DIAL_OPTS})
same => n,Return(${DIALSTATUS})

[subVoicemail]
exten => start,1,NoOp() ; vmbox, context, dialStatus
same => n,GotoIf($[« ${ARG3} » = « ANSWER »]?VmOk)
same => n,Set(VmMessage=${IF($[${ARG3} = BUSY]?b:u)})
same => n(VmOk),VoiceMail(${ARG1}@${ARG2},s,${VmMessage})
same => n,Hangup()

Le fichier z_localset.conf

Dans ce fichier, j’ai décidé d’inclure la configuration des extensions locales que ce soit des IP
Phones, des soft-phones connecté par cable, wifi ou VPN et de les regrouper dans un contexte
appelé « LocalSets »

Si je reprends l’exemple des 2 extensions données plus haut 6005 et 6012, celà donne ceci:

[LocalSets]
exten => 60XX,1,GoSub(subDialVm,start,1(SIP/${EXTEN}))

Les deux « XX » dans 60XX, représente n’importe quel chiffre entre 0 et 9, entrement dit les
extensions entre 6000 et 6099.

j’ai également inclu des extensions spéciales:

 un test d’echo sur l’extension 6000, ceci permet de vérifier la qualité audio de vos appels
 pour le VoiceMail, l’extension 150 afin d’écouter vos messages vocaux
 pour les fax
 pour les appels venant de l’extérieur (ligne OVH dans mon cas)

Nous reviendrons sur ces extensions plus tard dans notre configuration.

Le fichier z_user_context.conf

Ce fichier me permet de jouer avec les contextes de mes utilisateurs, celui qui nous attribuons à
nos users lors de la création.
Ce contexte permet de limiter ce qu’un utilisateur peut faire, par exemple il

 ne peut joindre que les extensions locales


 ne peut joindre que les numéros nationaux résidentiel
 ne peut joindre que les numéros résidentiel en France (Italie, Suisse, ..)
 ne peut joindre que les réseaux mobiles belges (français, italien, suisse, ..)
 ….

Dans notre template, nous avons définit le contexte « User-Internal » qui est définit comme ceci

[User-internal]
include => LocalSets

Pour nos deux utilisateurs, nous avons utilisé, bien que pour le moment commenté (précédé d’un
« ; »),
le contexte « User-Standard », ce qui leur permettra de joindre les extensions internes mais
également le monde extérieur.

[User-standard]
include => User-internal
include => out_SupportOVH
include => out_national
include => out_BE_internationnal_0032
include => out_BE_internationnal_+32
include => out_FR_internationnal_0033
include => out_FR_internationnal_+33
include => out_LU_internationnal_0035
include => out_LU_internationnal_+35
include => out_IT_internationnal_0039
include => out_IT_internationnal_+39

En combinant ces différents contextes, on arrive à donner des accès très précis.
A ce stade, comme les utilisateurs utilisent le contexte « User-internal », ils peuvent s’appeler.

Le fichier z_outgoing_context

Dans ce fichier, on retrouve la configuration permettant de joindre le monde exterieur.


On retrouve donc les contextes « out_SupportOVH, » « out_national »,
« out_BE_internationnal_0032 », « out_FR_internationnal_0033 », …
Cette configuration n’est pour le moment pas utilisée, elle le sera dés lors que nous aurons
enregistrer notre ligne SIP chez OVH et mis à jour les utilisateurs pour utiliser le contexte
« User-Standard ».

A titre d’exemple, voici à quoi ressemblent certains de ces contextes

 out_SupportOVH – permet de joindre le support OVH (0033972101007)[out_SupportOVH]

exten => _0033972101007,1,NoOp(${LigneSip}/N_${EXTEN}, ${TIMEOUT}, $


{DIAL_OPTS})
same => n,Set(LigneSip=SIP/sip-ovh-line1)
same => n(dial),NoOp(${LigneSip})
same => n,NoOp(Limiting maximum call duration)
same => n,Set(TIMEOUT(absolute)=3300);
same => n,Dial(${LigneSip}/${EXTEN}, ${TIMEOUT}, ${DIAL_OPTS})
same => n,Congestion(3)

 Le réseau résidentiel belge

[out_national]
exten => _0ZX.,1,NoOp(${LigneSip}/N_${EXTEN}, ${TIMEOUT}, ${DIAL_OPTS})
same => n,Set(LigneSip=SIP/sip-ovh-line1)
same => n(dial),NoOp(${LigneSip})
same => n,NoOp(Limiting maximum call duration)
same => n,Set(TIMEOUT(absolute)=3300);
same => n,Dial(${LigneSip}/${EXTEN}, ${TIMEOUT}, ${DIAL_OPTS})
same => n,Congestion(3)

 Pour joindre le réseau résidentiel français

[out_FR_internationnal_+33]
exten => _[+3]3[12345].,1,NoOp(${LigneSip}/N_${EXTEN}, ${TIMEOUT}, $
{DIAL_OPTS})
same => n,Set(LigneSip=SIP/sip-ovh-line1))
same => n(dial),NoOp(${LigneSip})
same => n,NoOp(Limiting maximum call duration)
same => n,Set(TIMEOUT(absolute)=3300);
same => n,Dial(${LigneSip}/${EXTEN}, ${TIMEOUT}, ${DIAL_OPTS})
same => n,Congestion(3)

Un mot d’explication pour certaines options de la configuration

1. Pour appeler le réseau externe, nous devons nous enregistrer sur un serveur permettant de
faire la passerelle entre notre serveur Asterisk et le reste du monde, dans cet exemple, nous
utilisons une ligne SIP de chez OVH, appelée ici « sip-ovh-line1 », nous verrons plus tard dans
cette série comment la configurer.
2. Nous fixons un timeout à 3300 sec (50 min) par appel, après ces 50 minutes la communication
est coupée,
ceci est lié aux conditions d’OVH qui facture à partir de la 3601 secondes, cette valeur peut donc
être adaptée à la hausse.
3. Afin de facilité la configuration, il est possible d’utiliser des « patterns », nous avons déjà utilisé
le « X » dans la configuration des LocalSets, nous en tulisons d’autres dans cette configuration.

X pour n’importe quel chiffre entre 0-9


Z pour n’importe quel chiffre entre 1-9
N pour n’importe quel chiffre entre 2-9
[1237-9] pour n’importe quel chiffre ou lettre entre les [ ], (dans cet exemple,
1,2,3,7,8,9)
[a-z] n’importe quelle lettre minuscule
[A-Z] n’importe quelle lettre majuscule
. suivi de un ou plusieurs chiffre(s)/lettre(s)

rtp.conf

Ce fichier dicte à Asterisk quel range de ports « rtp » il doit utiliser pour les communications
audio.
Je considère cette configuration importante car nécessaire à la bonne configuration de votre
firewall, particulièrement important quand vous connecterez votre serveur au monde extérieur.
Si vous avez une doute, je vous renvois vers le billet décrivant la configuration de votre firewall
en suivant ce lien

Conclusion

Cette configuration simple d’Asterisk, vous permet permet globalement de l’utiliser à l’intérieur
de votre réseau, par exemple

 comme Talkie-Walkie si vous installer les clients SIP sur vos téléphone mobiles
 comme interphone

Cette configuration ne vous permet pas d’être joignable ou de joindre le monde extérieur, c’est le
but du prochain billet.

Vous aimerez peut-être aussi