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