Asterisk The Open Source PBX Corso di Applicazioni Telematiche A.A. 2009-10 Prof. Simon Pietro Romano Università degli Studi di Napoli Federico II Facoltà di Ingegneria
Asterisk http://www.asterisk.org È un PBX (Private Branch exchange) opensource ibrido VoIP e TDM Può svolgere le funzioni di: SIP Proxy Server Gateway SIP H.323 Gateway tra rete VoIP e PSTN/ISDN (mediante l hardware opportuno...) Permette di realizzare a basso costo un centralino VoIP per la propria LAN casalinga/aziendale 2
PBX analogici Apparati ad alta affidabilità Permettono le comunicazioni intra-aziendali Permettono le comunicazioni da e verso la rete esterna PSTN Forniscono altre funzionalità accessorie come segreteria telefonica, trasferimento di chiamata, collegamenti fax, messaggi di benvenuto, 3
PBX analogici 4
PBX digitali Sono di fatto elaboratori elettronici Permettono le comunicazioni intra-aziendali su reti digitali LAN Consentono di comunicare con altre realtà VoIP utilizzando la rete Internet Implementano tutte le funzionalità tipiche dei PBX analogici, aggiungendo molte altre caratteristiche tipiche di un sistema digitale Se dotati di hw ad hoc, possono fungere da gateway ed interconnettere reti VoIP con la rete telefonica tradizionale Costi contenuti 5
PBX digitali 6
Asterisk: introduzione (1/2) Asterisk è un software open source in grado di realizzare un centralino telefonico evoluto su un comune PC Scritto originariamente da Mark Spencer su piattaforma Linux. Disponibile anche per OpenBSD, FreeBSD e MacOS X Esiste qualche progetto per portarlo sotto Windows (Celliax, AstWind, AsteriskWin32) È stato progettato per interfacciare qualsiasi tipo di apparato telefonico standard (sia hw che sw) con qualsiasi applicazione telefonica standard È uno strumento flessibile e potente per costruire applicazioni ritagliate sulle esigenze più complesse 7
Asterisk: introduzione (2/2) Opera da middleware, connettendo le tecnologie per la telefonia alle applicazioni per telefonia e ad Internet, consentendo di realizzare ambienti telefonici misti Fornisce il supporto: Alle comunicazioni SIP Alle comunicazioni H.323 Alle comunicazioni TDM Mediante Asterisk è possibile rendere interoperabili architetture VoIP eterogenee Implementa numerosi servizi ( applicazioni ) supplementari 8
Architettura (1/2) Architettura modulare È possibile aggiungere/eliminare funzionalità senza compromettere la stabilità del sistema È sempre presente un componente core (scritto in C) che gestisce funzionalità di base quali: Instaurare le comunicazioni tra gli utenti Lanciare applicazioni che gestiscono i servizi Caricare i moduli Ottimizzare le perfomance sotto ogni condizione di carico Sono disponibili delle API per la definizione di moduli per: Canali. Gestiscono il tipo di connessione (VoIP, ISDN, ) Applicazioni. Aggiungono nuove funzionalità (Conferenze, Voicemail, ) Codec. Supporto dei vari formati audio (GSM, MP3, ) File. Per la gestione dell I/O sul filesystem 9
Architettura (2/2) 10
Canali Un canale definisce il tipo di interfaccia sul quale instaurare una comunicazione Asterisk è in grado di gestire canali VoIP, ISDN e di telefonia tradizionale Canali supportati: VoIP: SIP, H.323, IAX, SCCP, MGCP ISDN PRI: 4ESS, BRI (ISDN4Linux), DMS100, Telefonia tradizionale: FXS, FXO, E&M, 11
Applicazioni Authentication Blacklists Call Forward on Busy Call Forward on No Answer Call Queuing Call Recording Call Transfer Call Waiting Caller ID Calling Cards Conference Bridging Database Integration Dial by Name Do Not Disturb ENUM Fax Transmit and Receive Macros Music On Hold Music On Transfer Route by Caller ID SMS Messaging Spell / Say Three-way Calling Time and Date Transcoding Trunking VoIP Gateways Voicemail 12
Codec Audio ADPCM 64 kbps G.711 (A-Law & μ-law) 64 kbps G.723.1 (pass through) 5.3 or 6.3 kbps G.726 16 or 24 or 32 kbps G.729 (through purchase of commercial license) 8 kbps GSM 13 kbps ilbc 13.3 or 15.2 kbps LPC-10 6 kbps Speex 16 kbps Video (passthrough) H.261 H.263(+) H.264 13
Gestione dei moduli I moduli che gestiscono i vari tipi di canale e quelli che controllano il funzionamento di alcune applicazioni richiedono la presenza di opportuni file di configurazione Ad esempio, per ciascun protocollo VoIP, esiste un file di configurazione che specifica indirizzo e numeri di porto utilizzati, utenti abilitati, parametri sulla gestione del traffico, ecc.. Comune a tutti i file di configurazione dei canali è l indicazione di come questi interagiscono con il dialplan 14
Installazione Download dell ultima release stabile dal sito http://www.asterisk.org Archivio.tar.gz oppure svn checkout Compilare i sorgenti: # cd asterisk # more README #./configure [--enable-xyz --disable-zyx] # make menuselect # make # make install # make samples L ultimo comando genera dei template di file di configurazione nella directory /etc/asterisk Il file README costituisce un ottima guida all installazione e fornisce informazioni sulle dipendenze da soddisfare Modificare i file di configurazione opportuni Eseguire Asterisk: # asterisk -gcvvvvvvvv 15
Configurazione Tutti i file di configurazione si trovano nella directory /etc/asterisk asterisk.conf modules.conf sip.conf extensions.conf Sono file di testo organizzati per sezioni Per alcuni canali/applicazioni è possibile interfacciarsi a database esterni 16
Il dialplan È responsabile del routing delle chiamate alle applicazioni È immagazzinato nel file extensions.conf È diviso in contesti, ciascuno dei quali contiene un insieme di estensioni che definiscono il comportamento del PBX in base alle chiamate Le estensioni hanno la seguente struttura: exten => <extension_number>,<priority>,<application>[(args)] Esempio: [voip] exten => 123,1,Wait(3) exten => 123,2,Answer exten => 123,3,Playback(demo-congrats) exten => 123,4,Hangup 17
Funzionalità SIP (1/2) Per usufruire delle funzionalità SIP è necessario: Creare gli account per i client, abilitandoli ai servizi, nel file di configurazione sip.conf Creare le opportune estensioni nel dialplan Configurare opportunamente gli User Agent Esempio di creazione degli account in sip.conf [utente1] type=friend ; friend=tx & rx, user=rx only, peer=tx only secret=mypasswd host=dynamic nat=yes context=voip mailbox=1234@voip-voicemail [utente2] type=friend host=dynamic nat=yes context=voip 18
Funzionalità SIP (2/2) Configuriamo il dialplan per inoltrare chiamate extensions.conf [voip] exten => 100,1,Dial(SIP/utente1,10) exten => 100,2,VoiceMail(1234@voip-voicemail) exten => 200,1,Dial(SIP/utente2) exten => 900,1,Dial(SIP/utente1&SIP/utente2) ;Voice Mail exten => 1001,1,Ringing exten => 1001,2,Wait(2) exten => 1001,3,VoicemailMain(1234@voip-voicemail) e l applicazione di voicemail voicemail.conf [voip-voicemail] 1234 => 5555,alessandro,utente1@mail.com 19
Pattern & wildcard Una estensione può anche corrispondere ad un pattern e può comprendere una o più wildcard Un estensione è interpretata come pattern se inizia con il carattere _ (underscore) Wildcard: X matches any digit from 0-9 Z matches any digit from 1-9 N matches any digit from 2-9 [1237-9] matches any digit or letter in the brackets (in this example, 1,2,3,7,8,9) [a-z] matches any lower case letter [A-Z] matches any UPPER case letter. matches one or more characters! matches zero or more characters immediately 20
Esempio: IVR (Interactive Voice Response) [ivr] exten => s,1,ringing exten => s,2,wait(2) exten => s,3,answer exten => s,n,playback(hello-world) exten => s,n(date),datetime exten => s,n(main),playback(vm-enter-num-to-call) exten => s,n,waitexten(5) exten => s,n,goto(s,main) exten => s,n(end), Playback(vm-goodbye) exten => i,1,playback(invalid) exten => i,2,goto(s,main) Exten => 0,1,Goto(s,main) exten => 1,1,Goto(s,date) exten => 2,1,Echo exten => 2,2,Goto(s,main) exten => 9,1,Goto(s,end) 21
Estensioni e priorità speciali Asterisk prevede alcune estensioni predefinite h se configurata, è invocata quando l utente termina la chiamata ( hang-up ) i gestisce tutte le estensioni non valide ( invalid ) t gestisce i timeout s quando una chiamata proviene dalla PSTN, Asterisk non ha modo di conoscere il numero composto dall utente e, quindi, di invocare l estensione relativa. In tutti gli scenari in cui non è possibile determinare il numero chiamato, viene invocata l estensione s ( start ) Per ogni estensione, le applicazioni vendono eseguite in ordine di priority. Qualora si vogliano apportare delle modifiche, per evitare di ri-numerare manualmente tutte le priority, è possibile definire la priorità successiva con n ( next ) 22
Riferimenti D. Gosmar, G. Innamorato, D. Osler, S. Osler. Asterisk e Dintorni la guida italiana al VoIP Open Source E-book disponibile gratuitamente in rete http://www.voip-info.org Articoli, forum, blog disponibili in rete 23
Domande? 24