Ressources informatiques

Ressources informatiques

Ressources informatiques

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 :

Configurer Asterisk

Documentation : Asterisk : Créer les utilisateurs | Asterisk : Créer le plan de numérotation

Effectuons la configuration suivante :

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 :

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 :

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:*   

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

Configurer microsip

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 :

Configurer mizudroid

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
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')

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')
...