Cours:Asterisk

From Wiki

Jump to: navigation, search

Contents

Architecture

Clients SIP

Editer le fichier sip.conf pour ajouter la description des deux SIP-phones afin de leur permettre d’émettre et de recevoir des appels.

File: sip.conf

[general]
context=default
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
 
[1000]type=frienddefaultuser=1000secret=torototocontext=localcontexthost=dynamic 
[1001]type=frienddefaultuser=1001secret=torototocontext=localcontexthost=dynamic

Services

Objectif : décrocher, répéter «1» et raccrocher lorsque le premier SIP-phone contacte Asterisk quelle que soit sa demande.

File: extensions.conf

[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=no
priorityjuymping=no
 
[localcontext]exten => _.,1,Answer()exten => _.,2,Wait(1)exten => _.,3,PlayBack(digits/1)exten => _.,4,HangUp()

Objectif : Permettre une communication téléphonique entre les deux SIP-phones.

File: extensions.conf

[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=no
priorityjuymping=no
 
[localcontext]exten => _1XXX,1,Dial(SIP/${EXTEN})exten => _1XXX,2,HangUp()

Observer les échanges réseau réalisés pour chaque client et pour le serveur Asterisk. Observer les échanges protocolaires SIP.

Voicemail

Objectif : Fournir une messagerie aux clients.

File: extensions.conf

[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=no
priorityjuymping=no
 
[localcontext]
exten => _1XXX,1,Dial(SIP/${EXTEN},20)
exten => _1XXX,2,VoiceMail(${EXTEN}@local_mb)                                                               exten => _1XXX,3,PlayBack(vm-goodbye)exten => _1XXX,4,HangUp()
exten => 888,1,VoicemailMain(${CALLERID(num)}@local_mb)exten => 888,2,HangUp()

File: sip.conf

[1000]
type=friend
defaultuser=1000
secret=torototo
context=localcontext
host=dynamic
mailbox=1000@local_mb 
[1001]
type=friend
defaultuser=1001
secret=torototo
context=localcontext
host=dynamic
mailbox=1001@local_mb

File: voicemail.conf

[general]
format=wav49|gsm|wav
serveremail=asterisk
attach=yes
skipms=3000
maxsilence=10
silencethreshold=128
maxlogins=3
emaildateformat=%A, %B %d, %Y at %r
sendvoicemail=yes ; Allow the user to compose and send a voicemail while inside 
 
[zonemessages]
eastern=America/New_York|'vm-received' Q 'digits/at' IMp
central=America/Chicago|'vm-received' Q 'digits/at' IMp
central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours'
military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'
european=Europe/Copenhagen|'vm-received' a d b 'digits/at' HM
 
[local_mb]1000 => 1234,flo,flo@localhost1001 => 1234,david,david@polymorf.fr
File:Asterisk voicemail email.png

Horloge parlante

Objectif : Fournir un numéro spécial pour l'horloge parlante.

File: extensions.conf

exten => 123,1,Answer()
exten => 123,2,SayUnixTime(,Europe/Paris,AdBY kM)
exten => 123,3,HangUp()

Suivi d'appels

Objectif : Mise en place d'une facturation via suivit d'appels.

File: cdr.conf

[general]
enable=yes
[csv]
usegmtime=yes
loguniqueid=yes
loguserfield=yes
tail /var/log/asterisk/cdr-csv/Master.csv 
"","1000","1001","localcontext","""David"" <1000>","SIP/1000-00000000","","Hangup","","2010-03-16 
10:17:30","2010-03-16 10:17:30","2010-03-16 10:17:44",14,14,"ANSWERED","DOCUMENTATION","1268734650.0",""

Conférences téléphoniques

Objectif : Avoir un numéro spécial pour la salle de conférence téléphonique.

File: extensions.conf

exten => 234,1,Answer()
exten => 234,2,ConfBridge(1,scM,1234)
exten => 234,3,HangUp()

File: meetme.conf

[rooms]
conf => 1,1234,4567

Transfert d'appel

Objectif : Permettre le transfert d'appel entre clients, et vers un espace parking.

File: extensions.conf

[localcontext]
include => parkedcallsexten => _1XXX,1,Dial(SIP/${EXTEN},20,tT)[...]

File: features.conf

[general]
parkext => 700			; What extension to dial to park	(all parking lots)
parkpos => 701-720		; What extensions to park calls on. (defafult parking lot)
context => parkedcalls		; Which context parked calls are in (default parking lot)

Dans ce scénario, lorsque A appel B, celui-ci décroche et peut :

  • Placer A en attente dans un parking-lot (700..720) ;
  • Placer A en attente de C ; dans ce cas, B transfert A vers C et :
    • Se retrouve en communication avec C pour lui indiqué que A souhaite lui parler ; lorsque C valide, B met B et C en liaison.

Filtrage dans les extensions

Il s'agit de filtrer les extensions en fonction du callerID. L'utilisation de jokers (* ou ?) est aussi possible avec "_"

File: extensions.conf

exten => 123,1,Answer()
exten => 123/1000,2,SayUnixTime(,Europe/Paris,kM)exten => 123/1001,2,SayUnixTime(,Europe/Paris,AdBY)exten => 123/1002,2,SayUnixTime(,Europe/Paris,AdBY kM)exten => 123,3,HangUp()

Standard téléphonique

Il s'agit ici de proposer à l'appelant (dans notre cas, lorsqu'il compose un numéro invalide) un fichier son de menu : typiquement, "tapez 1 pour avoir la date, 2 pour avoir l'heure, et 3 pour rejoindre l'audio-conférence". En fonction des chiffres entrés par l'utilisateur, des redirections vers les bon labels sont fait (GotoIf). Le parcours des valeurs possibles se fait de façon séquentielle côté serveur : lorsque l'appelant entre 3, il passe en réalité dans le cas "false" de 1, puis "false" de 2 etc.

File: extensions.conf

[...]
 
[localcontext]
include => parkedcalls
exten => _1XXX,1,Dial(SIP/${EXTEN},20,tT)
exten => _1XXX,2,VoiceMail(${EXTEN}@local_mb)                                                               
exten => _1XXX,3,PlayBack(vm-goodbye)
exten => _1XXX,4,HangUp()
 
exten => 888,1,VoicemailMain(${CALLERID(num)}@local_mb)
exten => 888,2,HangUp()
 
exten => _.,1,Answer()exten => _.,2,Goto(localcontext,666,1) 
exten => 666,1,Read(dig,/usr/share/asterisk/sounds/menu,1)exten => 666,2,GotoIf($["${dig}" = "1"]?menucontext,123,1 : 3)exten => 666,3,GotoIf($["${dig}" = "2"]?menucontext,321,1 : 4)exten => 666,4,GotoIf($["${dig}" = "3"]?menucontext,234,1 : 1)exten => i,1,Goto(666,1) 
[menucontext]exten => 123,1,SayUnixTime(,Europe/Paris,AdBY)exten => 123,2,HangUp() 
exten => 321,1,SayUnixTime(,Europe/Paris,kM)exten => 321,2,HangUp() 
exten => 234,1,ConfBridge(1,scM,1234)exten => 234,2,HangUp()

Architecture VoIP distribuée

Cette deuxième architecture vise à déployer un réseau plus réaliste. Dans cet exercice, le serveur Asterisk n’est plus directement joignable par tous les équipements de téléphonie IP. De plus, nous supposons l'existence de plusieurs sites distincts possédant chacun leur IP-PBX.

Enregistrement des serveurs SIP entre eux

Sur la machine asterisk1 :

File: sip.conf

[...]
register => asterisk1@10.0.2.1
 
[asterisk2]
type=friend
defaultuser=asterisk2
secret=
context=fromasterisk2
host=dynamic
[...]

Mise à jour du plan de numérotation distant

Pour permettre aux appels de sortir, sur la machine asterisk1 :

File: extensions.conf

[localcontext]
include => parkedcalls
exten => _1XXX,1,Dial(SIP/${EXTEN},20,tT)
exten => _1XXX,2,VoiceMail(${EXTEN}@local_mb)                                                               
exten => _1XXX,3,PlayBack(vm-goodbye)
exten => _1XXX,4,HangUp()
 
exten => _2XXX,1,Dial(IAX2/asterisk2/${EXTEN},20,tT)

Et pour les recevoir, sur la machine asterisk2 :

File: sip.conf

[asterisk1]
type=friend
defaultuser=asterisk1
secret=
context=fromasterisk1host=dynamic

File: extensions.conf

[fromasterisk1]include => parkedcalls
exten => _2XXX,1,Dial(SIP/${EXTEN},20,tT)
exten => _2XXX,2,VoiceMail(${EXTEN}@local_mb)                                                               
exten => _2XXX,3,PlayBack(vm-goodbye)
exten => _2XXX,4,HangUp()

Interconnexion via IAX avec SIP en fallback

IAX (Inter-Asterisk eXchange protocol) a été conçu à l'origine pour permettre les communications (voix et contrôle) entre serveurs Asterisk. La version actuelle est IAX2 (désignée IAX dans la suite). Toutefois, aujourd'hui sa portée s'étend aussi aux clients compatibles. IAX a été dès le début pensé pour permettre le transport de la voix, du contrôle même s'il permet le transport d'autres types de données. Il est de fait optimisé pour minimiser la bande passante nécessaire aux appels (via des mécanismes de Trunk ou l'emploi d'un protocole binaire au lieu du textuel SIP), permettre l'échange d'informations de plans de numérotation et surtout limiter les problèmes liés au NAT et aux pare-feux (en utilisant un seul port UDP pour toute les informations, en lieu et place d'un port pour SIP, d'un port pour RTP...). Actuellement, IAX reste un protocole propriétaire mais il a été soumis à l'IETF en vue d'une "standardisation".

File: iax.conf

[general]
bandwidth=low
disallow=lpc10
jitterbuffer=no
forcejitterbuffer=no
autokill=yes
 
register => asterisk2:torototo@10.0.1.1
 
[asterisk1]
type=friend
defaultuser=asterisk1
secret=torototo
auth=plaintext
context=fromasterisk1
host=dynamic

File: extensions.conf

[...]
exten => _1XXX,1,Dial(IAX2/asterisk1/${EXTEN},20,tT)[...]

Trunking

Il suffit de rajouter trunk=yes dans le contexte affecté par la communication IAX.

Fallback SIP

Modifier extensions.conf de la façon suivante :

File: extensions.conf

exten => _1XXX,1,Dial(IAX2/asterisk1/${EXTEN},20,tT)
exten => _1XXX,2,Dial(SIP/asterisk1/${EXTEN},20,tT)

QoS

Marquage SIP

Modifier sip.conf de la façon suivante :

File: sip.conf

[general]
context=default
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
tos_sip=cs3           tos_audio=ef

Marquage IAX

File: iax.conf

[general]
bandwidth=low
disallow=lpc10
jitterbuffer=no
forcejitterbuffer=no
autokill=yes
tos=efregister => asterisk2:torototo@10.0.1.1
 
[asterisk1]
type=friend
defaultuser=asterisk1
secret=torototo
auth=plaintext
context=fromasterisk1
host=dynamic

Configuration des Cisco

File: running-config

[.......]
class-map match-all VOICE
 match protocol rtp
!
!
policy-map COMPRESS
 class VOICE
   compress header ip rtp
!
interface FastEthernet0/0
 ip address 10.0.0.1 255.255.255.0
 service-policy output COMPRESS
 duplex auto
 speed auto
!
interface FastEthernet0/1
 ip address 10.0.2.254 255.255.255.0
 duplex auto
 speed auto
!
router ospf 1
 router-id 10.0.0.1
 log-adjacency-changes
 network 10.0.1.0 0.0.0.255 area 0
 network 10.0.0.0 0.0.255.255 area 0
!
[....]
  • Les paquets sont bien dans la classe de service
rt-voip#show policy-map interface fa0/0
 FastEthernet0/0 
 
  Service-policy output: COMPRESS
 
    Class-map: VOICE (match-all)
      434 packets, 92876 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol rtp
      compress:
          header ip rtp
 
    Class-map: class-default (match-any)
      93 packets, 11856 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any
  • Malgré cela dans la capture Wireshark nous n'avons pas vu de compression d'entête.
Personal tools