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.
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
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
# asterisk -rvvvvvvvv
asterisk verbosité « v »
Service Asterisk
Dans la même optique, vous pouvez également vérifier le status du service asterisk
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.
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
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
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«
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).
[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
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
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
[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).
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.
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
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
[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)
[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)
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.
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.