Serveur Asterisk
(VoIP)
Installer Asterisk
x@rpiX:~ $ sudo apt install asterisk
Accéder à la console d'Asterisk
x@rpiX:~ $ sudo asterisk -r Asterisk 16.28.0~dfsg-0+deb11u3, Copyright (C) 1999 - 2021, Sangoma Technologies Corporation and others. ... Connected to Asterisk 16.28.0~dfsg-0+deb11u3 currently running on rpiX (pid = 1712) rpiX*CLI>
Quelques commandes :
help
: liste des commandesquit
: quitter la console
Configurer Asterisk
Documentation : Asterisk : Créer les utilisateurs | Asterisk : Créer le plan de numérotation
Effectuons la configuration suivante :
alice
, numéro :6001
, mot de passe :bonjour
bob
, numéro :6002
, mot de passe :bonjour
martin
, numéro :6003
, mot de passe :bonjour
Créer les comptes sip
Sauvegarder (renommer) le fichier pjsip.conf
x@rpiX:~ $ sudo mv /etc/asterisk/pjsip.conf /etc/asterisk/pjsip.conf.origin
Créer les comptes
Configuration à effectuer :
- Section
transport
protocol=udp
: protocole de transport à utiliser ->UDP
bind=0.0.0.0
: Le serveur pourra communiquer sur toutes ses adresses réseaux- Section
endpoint
context=from-internal
: lorsqu'Asterisk
recoit un appel, il fait le lien entre l'utilisateur et son numéro à l'aide du fichier/etc/asterisk/extensions.conf
contenant le plan de numérotation.disallow=all
: n'autorise aucuncodec
excepté celui indiqué dans la directiveallow
allow=ulaw
: autorise lecodec
ulaw
Utilisez un éditeur pour créer (ou modifier) le fichier /etc/asterisk/pjsip.conf
. Exemple : nano
, ...
x@rpiX:~ $ sudo nano /etc/asterisk/pjsip.conf
Résultat de la modification :
x@rpiX:~ $ sudo cat /etc/asterisk/pjsip.conf [transport-udp] type=transport protocol=udp bind=0.0.0.0 ;Templates for the necessary config sections [endpoint_internal](!) type=endpoint context=from-internal disallow=all allow=ulaw language=fr [auth_userpass](!) type=auth auth_type=userpass [aor_dynamic](!) type=aor max_contacts=1 ;Definitions for our phones, using the templates above [alice](endpoint_internal) auth=alice aors=alice [alice](auth_userpass) password=bonjour; put a strong, unique password here instead username=alice [alice](aor_dynamic) [bob](endpoint_internal) auth=bob aors=bob [bob](auth_userpass) password=bonjour ; put a strong, unique password here instead username=bob [bob](aor_dynamic) [martin](endpoint_internal) auth=martin aors=martin [martin](auth_userpass) password=bonjour ; put a strong, unique password here instead username=martin [martin](aor_dynamic)
Créer le plan de numérotation
Sauvegarder (renommer) le fichier extensions.conf
root@debian:~# mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.origin
Créer le plan de numérotation
Configuration à effectuer :
alice
a pour numéro 6001bob
a pour numéro 6002martin
a pour numéro 6003- Leur téléphone sonnera pendant 10 secondes puis leur répondeur répondra.
- Leur répondeur aura pour numéro 6099.
Syntaxe
exten => number,priority,application([parameter[,parameter2...]])
Utilisez un éditeur pour créer (ou modifier) le fichier /etc/asterisk/extensions.conf
. Exemple : nano
, ...
x@rpiX:~ $ sudo nano /etc/asterisk/extensions.conf
Résultat de la modification :
x@rpiX:~ $ sudo cat /etc/asterisk/extensions.conf [from-internal] exten=>6001,1,Dial(PJSIP/alice,10) exten=>6002,1,Dial(PJSIP/bob,10) exten=>6003,1,Dial(PJSIP/martin,10) ; Après 10 secondes envoi vers la règle 2 exten=>6099,1,VoiceMailMain() ; 6099 Numéro de téléphone du répondeur ; Règles 2 exten=>6001,2,VoiceMail(6001) ; Appel répondeur compte 6001 exten=>6002,2,VoiceMail(6002) ; Appel répondeur compte 6002 exten=>6003,2,VoiceMail(6003) ; Appel répondeur compte 6003
Configurer la boîte vocale
Définir le code d'accès pour chaque boite vocale
Sauvegarder (renommer) le fichier voicemail.conf
x@rpiX:~ $ sudo mv /etc/asterisk/voicemail.conf /etc/asterisk/voicemail.conf.origin
Effectuer la configuration
Chaque boîte vocale aurra pour code d'accès par défaut : 1234
. Utilisez un éditeur pour créer (ou modifier) le fichier /etc/asterisk/voicemail.conf
. Exemple : nano
, ...
x@rpiX:~ $ sudo cat /etc/asterisk/voicemail.conf [general] format=wav49|gsm|wav|ulaw [default] ; Numéro de messagerie => mot de passe d’accès à la messagerie, nom d'utilisateur 6001 => 1234, alice 6002 => 1234, bob 6003 => 1234, martin
Installer le dépôt contenant les sons en français
x@rpiX:~ $ sudo apt install asterisk-core-sounds-fr
Indiquez le fichier asterisk.conf
d'utiliser la langue définie dans pjsip.conf
x@rpiX:~ $ sudo cp /etc/asterisk/asterisk.conf /etc/asterisk/asterisk.conf.origin
La ligne ci-dessous doit être décommentée (il faut supprimer le ;
) dans le fichier /etc/asterisk/asterisk.conf
. Utilisez un éditeur effectuer cette modification dans le fichier /etc/asterisk/asterisk.conf
. Exemple : nano
, ...
Résultat :
x@rpiX:~ $ sudo cat /etc/asterisk/asterisk.conf | grep languageprefix languageprefix = yes ; Use the new sound prefix path syntax.
Charger la configuration
x@rpiX:~ $ sudo asterisk -rx "core restart now"
Effectuer les tests de validation
Visualiser les ports ouverts
x@rpiX:~ $ sudo ss -nlut | grep -E '5060|State' Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 0.0.0.0:5060 0.0.0.0:*
- Le protocole
SIP
qui utilise le port5060/udp
se charge de l'établissement de la communication.
Valider l'installation à l'aide de la console
Lancer la console
x@rpiX:~ $ sudo asterisk -rvvvvvv Asterisk ... Connected to Asterisk ... currently running on rpiX rpiX*CLI>
Visualiser les utilisateurs
debian*CLI> pjsip list aors Aor: <Aor..............................................> <MaxContact> ========================================================================================== Aor: alice 1 Aor: bob 1 Aor: martin 1
debian*CLI> pjsip list auths I/OAuth: <AuthId/UserName.............................................................> ========================================================================================== Auth: alice/alice Auth: bob/bob Auth: martin/martin
Configurer les postes des utilisateurs
Alice est équipée du Softphone microsip
sur PC
,
Bob est équipée de l'application MizuDroid
sur Smartphone Android
,
Martin est équipe d'un téléphone CISCO SPA303
.
Softphone microsip sur PC
- Téléchargez microsip (version portable Lite)
- Décompressez-le
- Configurez :
flèche vers le bas en haut à droite -> Add account ...
Remarque : l'adresse IP de mon serveur Asterisk
est 192.168.1.34
.
Il était également possible d'utiliser un nom ou un alias définit dans un serveur DNS si vous en possédez un actif dans votre réseau.
Sur la console Asterisk
apparaît l'enregistrement du poste avec l'adresse IP
du PC sur lequel a été faite l'installation :
-- Added contact 'sip:alice@192.168.1.201:49637;ob' to AOR 'alice' with expiration of 300 seconds == Endpoint alice is now Reachable
Remarque : pour que l'application fonctionne, il faut qu'elle est l'autorisation d'accéder au micro du PC
. Pour activer cette autorisation :
Paramètres > Confidentialité > Microphone > Activé
Softphone MizuDroid
sur Smartphone Android
Téléchargez l'application, puis effectuez la configuration :
Sur la console Asterisk
apparaît l'enregistrement du poste avec l'adresse IP
de l'équipement Android
sur lequel a été faite l'installation
-- Added contact 'sip:bob@192.168.1.65:18718' to AOR 'bob' with expiration of 90 seconds == Endpoint bob is now Reachable
Téléphone IP 3 lignes Cisco SPA 303
Procédure de configuration minimale
Sur la console Asterisk apparaît l'enregistrement du poste avec l'adresse IP du téléphone :
-- Added contact 'sip:martin@192.168.1.12:5060' to AOR 'martin' with expiration of 3600 seconds == Endpoint martin is now Reachable
Alice appelle Bob
Sur la console Asterisk
:
== Setting global variable 'SIPDOMAIN' to '192.168.1.34' -- Executing [6002@from-internal:1] Dial("PJSIP/alice-00000004", "PJSIP/bob,10") in new stack -- Called PJSIP/bob -- PJSIP/bob-00000005 is ringing -- PJSIP/bob-00000005 is ringing > 0x73d24780 -- Strict RTP learning after remote address set to: 192.168.1.65:18720 -- PJSIP/bob-00000005 answered PJSIP/alice-00000004 ... -- Channel PJSIP/bob-00000005 joined 'simple_bridge' basic-bridge -- Channel PJSIP/alice-00000004 joined 'simple_bridge' basic-bridge ... -- Remotely bridged 'PJSIP/alice-00000004' and 'PJSIP/bob-00000005' - media will flow directly between them ... -- Channel PJSIP/bob-00000005 left 'native_rtp' basic-bridge -- Channel PJSIP/alice-00000004 left 'native_rtp' basic-bridge
- Alice appelle Bob
- Le télephone de Bob sonne
- Bob répond
- Alice et Bob parle
- Bob raccroche
- Alice raccroche
Bob appelle Martin
Sur la console Asterisk
:
== Setting global variable 'SIPDOMAIN' to '192.168.1.34' -- Executing [6003@from-internal:1] Dial("PJSIP/bob-00000004", "PJSIP/martin,10") in new stack -- Called PJSIP/martin -- PJSIP/martin-00000005 is ringing -- PJSIP/martin-00000005 is ringing -- PJSIP/martin-00000005 answered PJSIP/bob-00000004 ... -- Channel PJSIP/bob-00000004 left 'native_rtp' basic-bridge <86608b1f-3b13-4bd5-aa84-e85029638fd1> == Spawn extension (from-internal, 6003, 1) exited non-zero on 'PJSIP/bob-00000004' -- Channel PJSIP/martin-00000005 left 'native_rtp' basic-bridge <86608b1f-3b13-4bd5-aa84-e85029638fd1>
Martin appelle Alice
Sur la console Asterisk
:
== Setting global variable 'SIPDOMAIN' to '192.168.1.34' -- Executing [6001@from-internal:1] Dial("PJSIP/martin-0000000a", "PJSIP/alice,10") in new stack -- Called PJSIP/alice -- PJSIP/alice-0000000b is ringing -- PJSIP/alice-0000000b is ringing -- PJSIP/alice-0000000b answered PJSIP/martin-0000000a ... -- Channel PJSIP/alice-0000000b left 'native_rtp' basic-bridge-- Channel PJSIP/martin-0000000a left 'native_rtp' basic-bridge
Alice appelle Bob, Bob ne décroche pas
Sur la console Asterisk
:
Setting global variable 'SIPDOMAIN' to '192.168.1.34' -- Executing [6002@from-internal:1] Dial("PJSIP/alice-00000001", "PJSIP/bob,10") in new stack -- Called PJSIP/bob -- PJSIP/bob-00000002 is ringing ... -- Nobody picked up in 10000 ms -- Executing [6002@from-internal:2] VoiceMail("PJSIP/alice-00000001", "6002") in new stack ... -- <PJSIP/alice-00000001> Playing 'vm-intro.gsm' (language 'fr') ... -- <PJSIP/alice-00000001> Playing 'beep.gsm' (language 'fr') -- Recording the message ... -- User ended message by pressing # --Playing 'auth-thankyou.gsm' (language 'fr')
- Alice appelle Bob
- Le télephone de Bob sonne
- Bob ne répond pas
- La boîte vocale de Bob répond
- Alice enregistre un message
- Alice appui sur la touche
#
Bob écoute sa messagerie
Sur la console Asterisk
:
== Setting global variable 'SIPDOMAIN' to '192.168.1.34' -- Executing [6099@from-internal:1] VoiceMailMain("PJSIP/bob-00000003", "") in new stack ... -- <<JSIP/bob-00000003> Playing 'vm-login.gsm' (language 'fr') ... -- <&PJSIP/bob-00000010> Playing 'vm-password.gsm' (language 'fr') -- <&PJSIP/bob-00000010> Playing 'vm-youhave.gsm' (language 'fr') ...
- Bob appelle sa messagerie vocale
- Il entre son numéro de téléphone
- Il entre son mot de passe
- Il suit les instruction de sa messagerie vocale pour écouter les messages