versione pdf - gnurantuDoc

Transcript

versione pdf - gnurantuDoc
myAsterisk
Stefano Sangalli
Agosto 2006
Asterisk è un applicativo che trasforma un computer con sistema operativo Linux, in standard telefonico
IP (o centralino telefonico). I termini utilizzati di sovente, per qualificare Asterisk, sono IPBX i IPPBX o,
a volte,PABX su IP . Asterisk è stato sviluppato da Mark Spencer della Digium, Inc. È un software libero e
open source, e propone tutte le funzionalità di un PBX classico. Per realizzare la connessione di Asterisk con
la rete di telefonia pubblica, per esempio via ISDN, sono disponibili diverse possibilità, come delle schede
per connessione primaria, o di base, prodotte dalla stessa Digium, o dei modem tradizionali.
Scarica la VERSIONE PDF di questo documento.
Contents
1 Premessa: i protocolli utilizzati
1.1
3
Il protocollo SIP (Session Initiation Protocol) . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.1.1
Esempio di un messaggio SIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.1.2
I messaggi più frequenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.1.3
Architettura di una rete SIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.1.4
Schema di chiamata tra User Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.2
Il protocollo RTP (Real-time Transport Protocol) . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.3
Il protocollo IAX (Inter Asterisk Exchange) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.3.1
Proprietà di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.3.2
La creazione di IAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.3.3
Gli obiettivi di IAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.4
Il protocollo H323 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.5
DUNDI (Distributed Universal Number Discovery) . . . . . . . . . . . . . . . . . . . . . . . .
8
2 Installazione
8
2.1
Installazione asterisk base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.2
Installazione asterisk-oh323 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3
Aggiungere file wav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.4
Aggiungere file mp3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
3 I componenti di Asterisk
10
3.1
I moduli: modules.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
3.2
I canali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
CONTENTS
2
3.3
Il Dialplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.4
Formato del dialplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.5
Sezione general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.6
Sezione globals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.7
Contexts ed extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.8
Come si usa un context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
4 Configurazione
4.1
4.2
12
sip.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
4.1.1
Asterisk come SIP client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
4.1.2
disallow = all . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
4.1.3
allow = <codec> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
4.1.4
allowexternalinvites = yes|no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
4.1.5
allowguest = yes|no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
4.1.6
Autocreatepeer = yes|no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
4.1.7
autodomain = yes|no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
4.1.8
bindaddr = IP Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
4.1.9
bindport = Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.10 callerid = <string> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.11 canreinvite=yes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.12 canreinvite = update|yes|no (global setting) . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.13 checkmwi = Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.14 compactheaders = yes|no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.15 context = <contextname> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.16 defaultexpirey= Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.17 dtmfmode = inband|info|rfc2833 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.18 domain = domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.19 dumphistory = yes|no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
4.1.20 externip = IP Address or a hostname . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
4.1.21 externhost = hostname.tld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
4.1.22 externrefresh = Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
Loading Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
5 APPENDICE A
5.1
VoIP Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
17
1. Premessa: i protocolli utilizzati
3
5.1.1
Dati forniti dal provider: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
5.1.2
Outgoing settings: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
5.1.3
Incoming settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
5.1.4
Register string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
5.2
I CODEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
5.3
Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
5.3.1
19
Dial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 APPENDICE B
6.1
6.2
1
19
freePBX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
6.1.1
I moduli Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
6.1.2
I moduli CID e Number Management . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
6.1.3
I moduli Config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
TrixBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
6.2.1
20
capitolo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Premessa: i protocolli utilizzati
1.1
Il protocollo SIP (Session Initiation Protocol)
Il protocollo SIP (Session Initiation Protocol) instaura, modifica e rilascia una sessione. Esso trova applicazione non solo nella telefonia su IP e nei servizi telefonici supplementari, ma anche nella videocomunicazione, nei giochi interattivi, nella messaggistica istantanea. Il protocollo è stato sviluppato a partire
dal 1999 (Request for Comment 2543 e 3261) per iniziativa di IETF e fa parte della Internet Multimedia
Conferencing Suite.
Il protocollo SIP ha fondamentalmente le seguenti funzioni:
• Invitare gli utenti a partecipare ad una sessione: o localizzare gli utenti o acquisire le preferenze degli
utenti o negoziare le capabilities o trasportare una descrizione della sessione
• Instaurare le connessioni di sessione
• Gestire eventuali modifiche dei parametri di sessione
• Rilasciare le parti
• Cancellare la sessione in qualunque momento si desideri.
SIP è un protocollo text-based, orientato al Web, simile ad HTTP, con una struttura client-server. Per
instaurare una sessione, avviene un three-way handshaking (concettualmente simile a quello che avviene con
il protocollo TCP). Alcune delle caratteristiche importanti del protocollo SIP:
• è impiegabile sia in contesti client-server sia in contesti peer to peer.
1. Premessa: i protocolli utilizzati
4
• è facilmente estendibile e programmabile
• lavora sia con server stateless sia con server stateful.
• e’ indipendente dal protocollo di trasporto.
Un messaggio SIP è una richiesta o una risposta; una sequenza di una richiesta e una o più risposte è
detta transazione: una transazione è identificabile da un transaction-ID, un identificativo che ne specifica la
sorgente, la destinazione e il numero di sequenza.
Il protocollo SIP supporta la mobilità ed è dialog-oriented: un dialogo è una relazione persistente tra entità
paritetiche che si scambiano richieste e risposte in un contesto comune.
1.1.1
Esempio di un messaggio SIP
Gli utenti SIP sono risorse identificabili o localizzabili mediante URI o URL che contengano informazioni sul
dominio, sul nome-utente, sull’host o il numero col quale l’utente partecipa alla sessione. Gli indirizzi sono
stile e-mail. Esempi fittizi possono ad esempio essere:
• sip:[email protected]
• sip:[email protected]:5068
• sip:[email protected]
• ...
Un messaggio SIP è costituito da un’intestazione e da un corpo (rispettivamente detti header e body). A
titolo esemplificativo, consideriamo il seguente messaggio di Invite, in cui header e body sono separati da
una riga vuota:
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 134.102.18.1
From: <sip:[email protected]>; tag = 4711 ’’//identifica l’originatore della richiesta ’’
To: Michele <sip:[email protected]> ’’//identifica la destinazione logica di una richiesta’’
Call-Id: [email protected] ’’//è un valore costante che identifica l’invito’’
Cseq: 49 Invite ’’//ordina le transazioni (..la prossima richiesta avrà Cseq=50)’’
Content-Length: 117 ’’//il body consiste in 117 byte ’’
Content-Type: application /sdp ’’//tipo di media descritto secondo il protocollo [[SDP]]’’
Subject: felicitazioni! ’’//l’oggetto del messaggio’’
Contact: sip:[email protected]:4050 ’’//l’indirizzo al quale si desidera ricevere richieste’’
transport = udp ’’//specifica il protocollo di trasporto, nell’esempio [[User Datagram Protocol|UDP]]’’
v = 0 ’’//indica la versione in uso’’
o = jack 7564657 9823872 IN IP4 134.102.18.1 ’’//l’owner della risorsa con un ID di sessione’’
c = IN IP4 134.102.18.1 ’’//tipo di rete, la versione del protocollo IP e l’IP stesso ’’
t = 0 0 ’’//tempo di start e di stop’’
m = audio 4754 RTP/AVP 0 ’’//tipo di media, num. di porto, protocollo di trasporto e formato ’’
a = rtpmap: 0 PCMU/8000 ’’//attributi audio\video.. se ce ne fossero ’’
s = festa ’’//subject della sessione’’
1. Premessa: i protocolli utilizzati
1.1.2
5
I messaggi più frequenti
Altri messaggi SIP frequenti sono:
• Register: messaggi inviato da uno User Agent quando vuole registrare presso un Registrar Server il
proprio punto di ancoraggio alla rete.
• Bye: utilizzato per porre fine ad un dialogo SIP
• Cancel: per terminare un dialogo se la sessione non ha ancora avuto inizio.
• Invite: già discusso in precedenza, serve ad invitare un utente a partecipare ad una sessione.
• Ack: è un messaggio di riscontro
• Trying e Ringing: messaggi provvisori;mantengono i parametri della richiesta a cui rispondono.
• Subscribe e Notify: utilizzati per E-Presence.
1.1.3
Architettura di una rete SIP
Le entità essenziali di una rete SIP sono:
• SIP User Agent: Schema di chiamata tra User Agents Ingrandisci Schema di chiamata tra User Agents
è un end-point e può fungere da client o da server; i due ruoli sono dinamici, nel senso che nel corso
di una sessione un client può fungere da server e viceversa. Quando funge da client, dà inizio alla
transazione originando richieste. Quando funge da server, ascolta le richieste e le soddisfa, se possibile.
Uno User Agent è in sostanza una macchina a stati, che evolve in dipendenza di messaggi SIP, e registra
informazioni rilevanti del dialogo. Il dialogo ha inizio quando si risponde positivamente al messaggio
di Invite e termina con un messaggio di Bye
• Registrar Server: è un server dedicato o collocato in un proxy. Quando un utente è iscritto ad un dominio, invia un messaggio di registrazione del suo attuale punto di ancoraggio alla rete ad un Registrar
Server.
• Proxy Server: è un server intermedio; può rispondere direttamente alle richieste oppure ”ruotarle” ad
un client, ad un server o ad un ulteriore proxy. Un proxy server analizza i parametri di instradamento
dei messaggi e ”nasconde” la reale posizione del destinatario del messaggio - essendo quest’ultimo
indirizzabile con un nome convenzionale del dominio di appartenenza.
I proxy possono essere stateless o stateful. Quando uno User Agent invia sistematicamente le proprie richieste
ad un proxy ”vicino” (di default) allora il proxy viene detto Outbound-Proxy. Viceversa, un Inbound-Proxy
è un proxy che instrada le chiamate entranti in un dominio. Infine un Forking-Proxy può instradare una
stessa richiesta in parallelo o in sequenza a più destinazioni.
• Redirect Server: reinstrada le richieste SIP consentendo al chiamante di contattare un set alternativo
di URIs.
• Location Server: è un database contentente informazioni sull’utente, come il profilo, l’indirizzo IP,
l’URL.
1. Premessa: i protocolli utilizzati
1.1.4
6
Schema di chiamata tra User Agent
UAC : User Agent Client
UAS : User Agent Server
Calling party
Proxy
Called party
+------+
| UAC |-----INVITE--------+
+------+
+------+
+------+
v
| UAC |
| UAC |------+
+------+ +------+
+------+
|
| UAS |
|
+------+ +------+
+------+
|
+------+
| UAC |-----INVITE----->| UAS |
|
| UAS |
+------+
+------+
|
+------+
|
^
|
+------------------------------------BYE----------------------------+
1.2
Il protocollo RTP (Real-time Transport Protocol)
L’ RTP o Real-time Transport Protocol è un protocollo di trasporto per applicazioni in tempo reale.
Questo protocollo permette distribuzione di servizi che necessitano di trasferimento in tempo reale, come
l’interattività audio e video. Fra questi servizi si trovano anche:
• l’identificazione del payload type
• il sequence numbering
• il timestamping
• il monitoring.
È stato sviluppato da un gruppo di ricerca noto come Audio-Video Transport Working Group, facente capo
alla IETF (Internet Engineering Task Force). Il corrispondente RFC è stato pubblicato nel 1996.
RTP doveva inizialmente essere un protocollo multicast, ma viene più spesso impiegato in applicazioni
unicast. È basato sul protocollo UDP e viene usato in congiunzione con RTCP (RTP Control Protocol).
Rappresenta una delle tecnologie fondamentali nell’industria della telefonia su IP.
Solitamente le applicazioni pongono l’RTP sopra l’UDP per le operazioni di multiplexing e checksum, anche
se può essere usato con altri protocolli di rete e trasporto sottostanti.
I numeri di sequenza (sequence numbers) che troviamo nel protocollo RTP permettono all’utente che riceve
i dati di ricostruire la sequenza dei pacchetti del mittente. Le conferenze multicast multimediali non sono
però la sua unica capacità, anche se è stato implementato per questo. Ad esempio, trovano posto in questo
protocollo la memorizzazione di un flusso dati continuo, le simulazioni interattive distribuite, le misurazioni
e i controlli
1. Premessa: i protocolli utilizzati
1.3
7
Il protocollo IAX (Inter Asterisk Exchange)
IAX è un acronimo che sta per Inter Asterisk Xchange. Si usa per abilitare connessioni VoIP tra i server
Asterisk e tra server e client che utilizzano lo stesso protocollo.
IAX ora è comunemente indicato come IAX2, la seconda versione del protocollo IAX. Il protocollo originale
IAX è obsoleto ed è disapprovato in funzione di IAX2.
1.3.1
Proprietà di base
IAX2 è un protocollo robusto e completo rimanendo al contempo semplice. È indipendente dal codec e
dal numero di flussi quindi può essere usato in teoria per il trasporto di qualunque tipo di dato (questa
caratteristica diventerà utile quando il videotelefono diventerà comune.
IAX2 utilizza un singolo flusso dati UDP (di solito sulla porta 4569) per comunicare tra i due sistemi sia
per il controllo che per i dati. Il traffico voce è trasmesso in banda rendendo più semplice per l’IAX2
l’attraversamento di un firewall e più probabile che lavori dietro una rete con NAT (il protocollo SIP invece
utilizza un flusso fuori banda RTP per il trasporto delle informazioni).
Il protocollo IAX2 supporta il trunking per trasportare su un singolo collegamento dati e segnali per più
canali. Quando è attivo il trunking più chiamate sono unite in un singolo insieme di pacchetti quindi un singolo datagramma IP può trasportare informazioni relative a più chiamate riducendo l’effettivo overhead senza
creare ritardi addizionali. Questo è un vantaggio notevole per gli utilizzatori del VoIP dove le intestazioni
IP occupano una grossa percentuale della larghezza di banda.
1.3.2
La creazione di IAX
Il protocollo IAX2 fu creato da Mark Spencer per Asterisk per il segnale VoIP. Il protocollo crea delle sessioni
interne e queste sessioni possono utilizzare qualunque codec per la trasmissione della voce. Il protocollo InterAsterisk Exchange essenzialmente fornisce il controllo e la trasmissione del flusso di dati su reti IP. IAX è
estremamente flessibile e e può essere utilizzato per ogni tipo di flussi di dati, compreso il video anche se
è stato progettato soprattutto per il controllo delle chiamate vocali sulle reti IP. Il progetto del protocollo
IAX fu basato su vari standard di controllo e trasmissione tra cui il Session Initiation Protocol (SIP, che è
il più comune), Media Gateway Control Protocol (MGCP) e Real-time Transfer Protocol (RTP).
1.3.3
Gli obiettivi di IAX
Il principale obiettivo del protocollo IAX fu quello di minimizzare la larghezza di banda necessaria per la
trasmissione dell’informazione prestando particolare attenzione al controllo, alle chiamate vocali individuali
e al supporto nativo per l’utilizzo trasparente su reti con NAT. La struttura di base del protocollo IAX
permette di miscelare i segnali e più flussi di dati su un singolo flusso UDP tra due computer. Lo IAX è un
protocollo binario ed è organizzato in modo da minimizzare l’overhead in particolare riguardo i flussi voce.
1.4
Il protocollo H323
H.323 is an umbrella recommendation from the ITU-T, that defines the protocols to provide audio-visual
communication sessions on any packet network. It is currently implemented by various Internet real-time
applications such as NetMeeting and Ekiga (the latter using the OpenH323 implementation). It is a part of
2. Installazione
8
the H.32x series of protocols which also address communications over ISDN, PSTN or SS7. H.323 is commonly
used in Voice over IP (VoIP, Internet Telephony, or IP Telephony) and IP-based videoconferencing.
1.5
DUNDI (Distributed Universal Number Discovery)
DUNDi\u2122 is a peer-to-peer system for locating Internet gateways to telephony services. Unlike traditional centralized services (such as the remarkably simple and concise ENUM standard), DUNDi is fullydistributed with no centralized authority whatsoever.
DUNDi is not itself a Voice-over IP signaling or media protocol. Instead, it publishes routes which are in
turn accessed via industry standard protocols such as IAX\u2122, SIP and H.323. DUNDi Core Members
DUNDi Whitepaper General Peering Agreement DUNDi Internet Draft DUNDi Best Practices DUNDi Press
Release DUNDi Mailing List
DUNDi can be used within an enterprise to create a fully-federated PBX with no central point of failure, and
the ability to arbitrarily add new extensions, gateways and other resources to a trusted web of communication
servers, where any adds, moves, changes, failures or new routes are automatically absorbed within the cloud
with no additional configuration.
An Internet Draft of the DUNDi protocol can be found here.
DUNDi can also be used across the entire Internet to form a common E.164 web of trust permitting service
providers to make real phone numbers available on the Internet. This permits true toll bypass with no
subscription charges, no publication of information. An acceptable use policy prevents VoIP ”spam” calls.
DUNDi replaces the usual the role of an entity (like Verisign is in the DNS world) with a common agreement
which establishes a base standard for the quality and use of the network. By removing the need for an
artificial monopoly, DUNDi also removes any artificially high lower-bound on the cost of sharing telephony
services through this network.
The document which regulates the E.164 context is the Digium General Peering Agreement, (GPA\u2122).
Essentially, the GPA permits parties to peer under a specific set of guidelines, for example only publishing
routes for valid phone numbers, and honoring acceptable use policies for routes. The full text of the GPA is
available here.
An implementation of DUNDi already exists in Asterisk\u2122, The Open Source PBX. Asterisk may be
freely downloaded and distributed under the terms of the GNU General Public License (GPL)
2
Installazione
2.1
#
#
#
#
#
#
#
#
Installazione asterisk base
tar -zxvf /zip/asterisk/asterisk-x.tar.gz -C /usr/src/
cd /usr/src/asterisk-x/
make clean
make
make install
make samples
make config
make webvmail
2. Installazione
9
# make progdocs
# make mpg123
#
#
#
#
#
#
#
tar -zxvf /zip/asterisk/asterisk-sounds-y.tar.gz -C /usr/src/
cd asterisk-sounds-y/
make install
tar -zxvf /zip/asterisk/asterisk-addons-z.tar.gz -C /usr/src/
cd asterisk-addons-z/
make
make install
2.2
Installazione asterisk-oh323
Prima di installare il pacchetto asterisk-h323 è necessario predisporre correttamente i pacchetti PWLib e
OpenH323, quindi:
scaricare le ultime versioni stabili da http://www.openh323.org/code.html di PWLib e OpenH323.
Iniziamo installando PWLib:
#
#
#
#
tar -zxvf pwlib_x.tar.gz -C /usr/src
cd /usr/src/pwlib_x
./configure
make
A questo punto è necessario impostare le variabili d’ambiente relative alle directory dove sono stati installati
i sorgenti di PWLib e (dove saranno) OpenH323:
#
#
#
#
#
#
PWLIBDIR=/usr/src/pwlib
export PWLIBDIR
OPENH323DIR=/usr/src/openh323
export OPENH323DIR
LD_LIBRARY_PATH=$PWLIBDIR/lib:$OPENH323DIR/lib
export LD_LIBRARY_PATH
Proseguiamo l’installazione di OpenH323:
#
#
#
#
tar -zxvf openh323_x.tar.gz -C /usr/src
cd /usr/src/openh323
./configure
make opt
A questo punto è possibile scaricare da http://www.inaccessnetworks.com/projects/asterisk-oh323 l’ultima
versione stabile di asterisk-h323 (0.6.6 testata su FC2):
# tar -zxvf asterisk-oh323-x.tar.gz -C /usr/src
# cd /usr/src/asterisk-0h323-x.tar.gz
3. I componenti di Asterisk
10
Impostare la variabile d’ambiente LD LIBRARY PATH aggiungendo:
#
#
#
#
#
#
#
#
PWLIBDIR=/usr/src/pwlib
export PWLIBDIR
OPENH323DIR=/usr/src/openh323
export OPENH323DIR
OH323WRAPLIBDIR=/usr/local/lib
export OH323WRAPLIBDIR
LD_LIBRARY_PATH=$PWLIBDIR/lib:$OPENH323DIR/lib:$OH323WRAPLIBDIR
export LD_LIBRARY_PATH
xxx
2.3
Aggiungere file wav
Per aggiungere nuovi file audio è possibile convertire file .wav in .gsm, e posizionarli nella directory opportuna (di default /var/lib/asterisk/sound/), con il seguente comando:
# sox foo.wav -r 8000 foo.gsm resample -ql
N.B. I file wav devono avere un formato di 16 bit e una frequenza di campionamento di 8000
Hz.
2.4
Aggiungere file mp3
I file mp3 DEVONO avere una frequenza di campionamento a 8KHz e DEVONO essere MONO. Per convertire altri formati:
lame -q -p --mp3input -a --preset 8 in.mp3 8kout.mp3
3
3.1
I componenti di Asterisk
I moduli: modules.conf
Asterisk, al suo avvio, carica un gruppo di moduli che permettono di utilizzare differenti applicazioni. Si
può scegliere quali moduli devono essere caricati con il file modules.conf. [modifica]
3.2
I canali
Asterisk identifica i tipi d’interfaccia sui quali si può telefonare con il termine canal, canale. Un canale può
essere, per esempio, l’interfaccia ISDN (che si chiama canale CAPI) o l’interfaccia Ethernet per il VoIP. Ogni
protocollo VoIP ha un canale diverso, quindi se si vuole telefonare con SIP o H.323, bisogna configurare un
canale SIP e un canale H.323. La configurazione dei canali è fatta con dei file di configurazione *.conf, che
si trovano nella directory /etc/asterisk.
3. I componenti di Asterisk
3.3
11
Il Dialplan
Il dialplan (ovvero ”piano di chiamata”) è la parte più interessante della configurazione di Asterisk, ed anche
quella che richiede più tempo. Nel dialplan si definisce cosa deve fare il PBX quando riceve una chiamata
su uno dei canali.
3.4
Formato del dialplan
Il file /etc/asterisk/extensions.conf contiene il dialplan di Asterisk, cioè un flusso di esecuzione per tutte
le sue operazioni. Il dialplan controlla come le chiamate entranti e uscenti sono trattate e instradate. È
qui che si configura il comportamento di tutte le connessioni che attraversano il PBX. Il contenuto del
file extensions.conf è organizzato in sezioni, che possono essere per delle configurazioni statiche e per delle
definizioni, o per delle componenti eseguibili del dialplan, che si chiamano contesti o contexts. Le sezioni
general e globals e i nomi dei contesti sono interamente definiti dall’amministratore. Un tipo speciale
di contesti sono le macro, che sono delle procedure riutilizzabili d’esecuzione, simili a un linguaggio di
programmazione.
3.5
Sezione general
In questa sezione si può definire qualche opzione generale che concerne l’uso della funzione save dialplan,
che serve a salvare il dialplan se quest’ultimo è modificato in fase d’esecuzione da dei comandi di Asterisk.
[modifica]
3.6
Sezione globals
Nella sezione [globals] si definiscono le variabili globali per il dialplan. In pratica, le variabili globali di
Asterisk non sono impiegate come variabili ma come costanti. Abitualmente sono impiegate per avere un
solo posto nel dialplan dove si possono indicare i valori che si potrebbero voler cambiare per cambiare delle
configurazioni del PBX.
3.7
Contexts ed extensions
La parte principale e più interessante del dialplan è costituita dai contexts. I contexts sono degli insiemi di
extensions (estensioni). Ogni estensione può essere costituita da più linee di istruzione, che Asterisk eseguirà
se un certa condizione è soddisfatta.
3.8
Come si usa un context
Ogni chiamata che giunge ad Asterisk è attribuita ad un context. L’appartenenza di una chiamata ad
un contesto può dipendere dal canale dal quale arriva, dall’ora, dal numero chiamante ed altre differenti
possibilità.
4. Configurazione
4
12
Configurazione
I file di configurazione vengono posizionati di default nella cartella /etc/asterisk, che contiene i seguenti file:
adsi.conf
adtranvofr.conf
agents.conf
alarmreceiver.conf
alsa.conf
asterisk.conf
cdr.conf
cdr_custom.conf
cdr_manager.conf
cdr_mysql.conf
cdr_odbc.conf
cdr_pgsql.conf
cdr_tds.conf
codecs.conf
dnsmgr.conf
dundi.conf
enum.conf
extconfig.conf
extensions.conf
features.conf
festival.conf
iax.conf
iaxprov.conf
indications.conf
logger.conf
manager.conf: AMI- Asterisk Manager Interface
meetme.conf
mgcp.conf
misdn.conf
modem.conf
modules.conf
musiconhold.conf
osp.conf
oss.conf
phone.conf
privacy.conf
queues.conf
res_config_odbc.conf
res_mysql.conf
res_odbc.conf
rpt.conf
rtp.conf
sip.conf
4. Configurazione
13
sip_notify.conf
skinny.conf
voicemail.conf
vpb.conf
zapata.conf
4.1
4.1.1
sip.conf
Asterisk come SIP client
Per registrare Asterisk presso un SIP provider, inserire questa definizione nel file sip.conf:
register => user[:secret[:authuser]]@host[:port][/extension]
oppure
register => fromuser@fromdomain:secret@host
Se invece vogliamo che Asterisk funzioni come SIP server, dobbiamo creare tanti canali quanti ne vogliamo,
come nell’esempio successivo:
[clienttest]
type=friend
callerid="Stefano Sangalli" <1000>
username=clienttest
host=dynamic
secret=********
regcontext=clienttest-internal
regexten=2001
dtmfmode=rfc2833
insecure=very
canreinvite=yes
nat=yes
qualify=yes
context=clienttest-sipphone
pickupgroup=1
callgroup=1
mailbox=1001@default
Di seguito analizziamo singolarmente tutti i parametri che possiamo definire all’interno del file sip.conf.
4.1.2
disallow = all
Disabilita tutti i codec. Pulisce tutto prima di abilitare i codec desiderati nell’ordine giusto.
4. Configurazione
4.1.3
14
allow = <codec>
Abilita i codec nell’ordine di preferenza (Usa DISALLOW=ALL per primo, prima di abilitare i codecs
nell’ordine desiderato)
• all
• g723 - G.723.1
• gsm - GSM
• ulaw - u-Law
• alaw - a-Law
• g726 - G.726-32
• adpcm - ADPCM
• slin - SLIN
• lpc10 - LPC10
• g729 - G.729
• speex - SPEEX
• ilbc - ILBC
4.1.4
allowexternalinvites = yes|no
Abilita/Disabilita INVITE e REFER a domini non locali. Di Default=yes (Nuovo dalla versione 1.2.x)
4.1.5
allowguest = yes|no
Abilita o rifiuta le guest call. Di default è a si. (Può essere settato a ’osp’ se asterisk è stato compilato con
il supporto OSP) (Nuovo dalla versione 1.2.x)
4.1.6
Autocreatepeer = yes|no
Se settato a yes, chiunque può loggarsi come peer (senza il check delle credenziali; comodo per operazioni
con SER). Di default è no.
4.1.7
autodomain = yes|no
Abilita/disabilita la capacità di Asterisk di aggiungere hostnames e indirizzi IP locali alla lista di dominio.
Di default è no. (Nuovo dalla versione 1.2.x)
4.1.8
bindaddr = IP Address
L’inidirizzo IP sulla quale restare in ascolto. Di Default è 0.0.0.0 (Tutte le interfacce di rete)
4. Configurazione
4.1.9
15
bindport = Number
Porta UDP sulla quale restare in ascolto. Di default è la 5060.
4.1.10
callerid = <string>
Questa informazione è utilizzata quando nessun’altra è disponibile. Di default è Asterisk.
4.1.11
canreinvite=yes
Crea una sorta di peer to peer, con non pochi problemi di natting però nel caso non ci sia una VPN.
4.1.12
canreinvite = update|yes|no (global setting)
Permette una sorta di peer to peer della voce dopo la segnalazione, ma è necessaria una VPN per un corretto
funzionamento.
4.1.13
checkmwi = Number
Frequenza globale (in secondi) di controllo della mailbox. Di default è 10 secondi.
4.1.14
compactheaders = yes|no
Indica ad Asterisk se deve inviare o non headers SIP compatti. Di default è no.
4.1.15
context = <contextname>
Questo è il contesto di default da utilizzare nel caso una terminazione ne sia sprovvista. Il contesto nella
sezione di una terminazione è utilizzato per dirigere una chiamata alla destinazione richiesta. Il corpo del
contesto è allocato nel file extensions.conf.
4.1.16
defaultexpirey= Number
Duranta in secondi di default per le registrazioni, sia entranti che uscenti. Di defualt è 120 secondi.
4.1.17
dtmfmode = inband|info|rfc2833
(Global setting) Modalità di invio dei toni dtmf. Di default è rfc2833.
4.1.18
domain = domains
Lista di domini alla quale Asterisk risponde, separati da virgola.
4. Configurazione
4.1.19
16
dumphistory = yes|no
Abilita il salvataggio delle transazioni SIP per LOG DEBUG. Di Default è no.
4.1.20
externip = IP Address or a hostname
Indirizzo da presentare quando siamo dietro a NAT. Se abbiamo un hostname associato ad un indirizzo
dinamico, usare externhost.
4.1.21
externhost = hostname.tld
(Nuovo in Asterisk 1.2.x)
4.1.22
externrefresh = Number
Specifica ogni quanto un DNS ricarichi il valore contenuto in ’externhost’. Di default è 10 secondi.
(Nuovo in Asterisk 1.2.x).
xxx
xxx
xxx
xxx
xxx
4.2
Loading Asterisk
Esistono 3 modi per lanciare Asterisk:
1. /usr/sbin/asterisk ......
2. /etc/rc.d/init.d/asterisk ...
3. /usr/sbin/safe asterisk ......
Digitando:
/usr/sbin/asterisk -h
vedremo a video i possibili parametri per lanciare il file binario:
Asterisk 1.2.10, Copyright (C) 1999 - 2005, Digium, Inc. and others.
Usage: asterisk [OPTIONS]
Valid Options:
-V
Display version number and exit
-C <configfile> Use an alternate configuration file
5. APPENDICE A
-G <group>
-U <user>
-c
-d
-f
-g
-h
-i
-n
-p
-q
-r
-R
-t
-T
-v
-x <cmd>
17
Run as a group other than the caller
Run as a user other than the caller
Provide console CLI
Enable extra debugging
Do not fork
Dump core in case of a crash
This help screen
Initialize crypto keys at startup
Disable console colorization
Run as pseudo-realtime thread
Quiet mode (suppress output)
Connect to Asterisk on this machine
Connect to Asterisk, and attempt to reconnect if disconnected
Record soundfiles in /var/tmp and move them where they belong after they are done.
Display the time in [Mmm dd hh:mm:ss] format for each line of output to the CLI.
Increase verbosity (multiple v’s = more verbose)
Execute command <cmd> (only valid with -r)
Quindi, lanciando il comando
# asterisk -vvvvgc //v indica il livello di debugging)
ci si connetterà ad Asterisk con una console per comandi CLI.
xxx
5
5.1
APPENDICE A
VoIP Provider
Scegliamo Skypho (http://www.skypho.net/) in quanto provvede gratuitamente all’attivazione del servizio e
quindi al rilascio del numero telefonico.
5.1.1
Dati forniti dal provider:
Login 03519966013
Password 939JM.TY
Dominio voip.eutelia.it
Sip Proxy Server voip.eutelia.it
Sip Proxy Socket 5060
Stun Server stun.voip.eutelia.it
Stun Server Socket 3478
Di seguito riportiamo la configurazione del trunk SIP che sia andrà a creare verso il provider scelto:
5. APPENDICE A
5.1.2
18
Outgoing settings:
fromuser=03519966013
host=voip.eutalia.it
secret=939JM.TY
type=friend
user=03519966013
username=03519966013
5.1.3
Incoming settings
context=from-pstn
fromuser=03519966013
host=voip.eutalia.it
insecure=very secret=939JM.TY
type=friend user=03519966013
username=03519966013
5.1.4
Register string
03519966013:939JM.TY:[email protected]
xxx
5.2
I CODEC
xxxxx
+----------------------+----------------------+----------------------+----------------------+
|
CODEC
|
Kbps
|
FRAME LENGTH
|
FRAME PACKET
|
+----------------------+----------------------+----------------------+----------------------+
|
G.729 A
|
8
|
10ms
|
3
|
+----------------------+----------------------+----------------------+----------------------+
|
G.723 1
|
5.6-6.3
|
30ms
|
1
|
+----------------------+----------------------+----------------------+----------------------+
|
G.711 A-law 64k
|
64
|
1ms
|
32
|
+----------------------+----------------------+----------------------+----------------------+
|
G.711 A-law 64k
|
64
|
1ms
|
32
|
+----------------------+----------------------+----------------------+----------------------+
xxxxx
5.3
Applications
Con il comando
6. APPENDICE B
19
CLI> show applications
vengono elencate le applicazioni disponibili
5.3.1
Dial
[Synopsis] Place a call and connect to the current channel
[Description]
Dial(Technology/resource[&Tech2/resource2...][|timeout][|options][|URL]):
This application will place calls to one or more specified channels.
As soon as one of the requested channels answers, the originating channel will be answered, if it has no
These two channels will then be active in a bridged call. All other channels that were requested will th
Unless there is a timeout specified, the Dial application will wait indefinitely until one of the called
the user hangs up, or if all of the called channels are busy or unavailable. Dialplan executing will con
channels can be called, or if the timeout expires.
This application sets the following channel variables upon completion:
DIALEDTIME
- This is the time from dialing a channel until when it is disconnected.
ANSWEREDTIME - This is the amount of time for actual call.
DIALSTATUS
- This is the status of the call: CHANUNAVAIL | CONGESTION | NOANSWER | BUSY | ANSWER | CAN
DONTCALL | TORTURE
For the Privacy and Screening Modes, the DIALSTATUS variable will be set to DONTCAL
if the called party chooses to send the calling party to the ’Go Away’ script. The DIALSTATUS variable w
TORTURE if the called party wants to send the caller to the ’torture’ script.
This application will re
Options:
A(x) - Play an announcement to the called party, using ’x’ as the file.
C
- Reset
6
6.1
APPENDICE B
freePBX
freePBX è ...
6.1.1
I moduli Base
Core
xxx
Feature Codes
xxx
Voice Mail
xxx
6.1.2
I moduli CID e Number Management
Black List
xxx
6. APPENDICE B
CID Lookup
xxx
PB Directory
xxx
PhoneBook
xxx
SpeedDial
xxx
6.1.3
I moduli Config
PHPAGI Config
xxx
6.2
6.2.1
xxx
TrixBox
capitolo 1
20