Carrozzi 2008_Sett
Transcript
Carrozzi 2008_Sett
PROGETTAZIONE E REALIZZAZIONE DI UNA RETE VoIP CON ASTERISK Facoltà di Ingegneria Corso di laurea in Telecomunicazioni Relatore Prof. Roberto Cusani Canditato Gabriele Carrozzi 789502 A/A 2007/2008 INDICE RINGRAZIAMENTI Sono tante le persone che mi hanno aiutato e sostenuto in questi anni di studi e nella realizzazione di questa tesi che non sarà facile trovare per tutti una parola speciale. Innanzitutto ringrazio i miei genitori : se sono arrivato sin qua lo devo ai sacrifici che hanno fatto per consentirmi di portare a termini gli studi Ringrazio la mia famiglia tutta che mi è stata vicina e mi ha aiutato ad andare avanti anche nei momenti difficili. Per avermi dato l’opportunità di svolgere la tesi in ambiente lavorativo ringrazio il mio relatore Prof. Roberto Cusani e la Jnet2000 che si è fidata delle mie capacità . Un grazie va anche a tutti i ragazzi della Jnet2000 per gli innumerevoli consigli,per la pazienza che hanno avuto nei miei confronti e soprattutto per essersi dimostrate persone su cui poter far affidamento. Un saluto speciale va anche a tutti gli amici con cui ho condiviso gioie e dolori della carriera universitaria e in particolare ad Armando con cui ho condiviso anche l’esperienza della tesi. INDICE INDICE C CA AP PIITTO OLLO O 11 ...................................................................................................................................... 3 INTRODUZIONE ............................................................................................................................... 3 C CA AP PIITTO OLLO O 22 ...................................................................................................................................... 5 IL VoIP................................................................................................................................................. 5 2.1 INTRODUZIONE ...................................................................................................................... 5 2.2 I PROTOCOLLI ........................................................................................................................ 7 2.2.1 PROTOCOLLO RTP .......................................................................................................... 8 2.3 H.323 ........................................................................................................................................ 10 2.3.1 TERMINALI E ENDPOINT .............................................................................................. 12 2.3.2 GATEWAY ......................................................................................................................... 14 2.3.3 GATEKEEPER .................................................................................................................. 15 2.3.4 UNITA’ MCU .................................................................................................................... 16 2.3.5 SUITE PROTOCOLLARE H.323 ...................................................................................... 16 2.3.6 SEGNALAZIONE RAS ...................................................................................................... 18 2.3.7 CALL CONTROL SIGNALING(H.225) ............................................................................ 19 2.3.8 MEDIA CONTROL E TRASPORTO ................................................................................. 20 2.3.9 SVOLGIMENTO DI UNA CHIAMATA H.323 ................................................................. 21 2.4 IL SIP ....................................................................................................................................... 22 2.4.1 ARCHITETTURA SIP ....................................................................................................... 25 2.4.2 INDIRIZZI SIP ................................................................................................................. 25 2.4.3 METODI E RISPOSTE SIP............................................................................................... 27 2.4.4 INSTAURAZIONE DI UNA SESSIONE SIP ..................................................................... 32 2.5 SIP vs H.323 ............................................................................................................................ 33 2.5.1 ARCHITETTURA .............................................................................................................. 34 2.5.2 INTEROPERABILITA’...................................................................................................... 34 2.5.3 CODIFICA DEI MESSAGGI ............................................................................................ 35 2.5.4 PROTOCOLLO DI TRASPORTO..................................................................................... 35 2.5.5 FUNZIONAMENTO CON LINEE PSTN .......................................................................... 35 2.5.6 UTILIZZO RISORSE ......................................................................................................... 36 C A P I CAPITTO OLLO O 33 .................................................................................................................................... 37 3.1 INTRODUZIONE .................................................................................................................... 37 3.2 ARCHITETTURA ................................................................................................................... 38 3.3 DISPOSITIVI HARDWARE .................................................................................................. 42 3.4 LO IAX .................................................................................................................................... 44 3.5 GESTIONE DELLE CHIAMATE .......................................................................................... 51 1 INDICE C CA AP PIITTO OLLO O 44 .................................................................................................................................... 54 4.1 INTRODUZIONE .................................................................................................................... 54 4.2 PROGETTAZIONE ................................................................................................................. 55 C CA AP PIITTO OLLO O 55 .................................................................................................................................... 66 5.1 INTRODUZIONE .................................................................................................................... 66 5.2 INSTALLAZIONE ASTERISK .............................................................................................. 67 5.2.1 COMPILAZIONE ZAPTEL ............................................................................................... 69 5.2.2 COMPILAZIONE LIBPRI................................................................................................. 70 5.2.3 COMPILAZIONE ASTERISK ........................................................................................... 71 5.3 CONFIGURAZIONE ASTERISK .......................................................................................... 72 5.3.1 CREAZIONE CENTRALINO VoIP ROMA ....................................................................... 72 5.3.2 COSTRUZIONE TRUNK IAX CED-ROMA E CED-OPERATORE VoIP ........................ 96 5.3.3 COSTRUZIONE TRUNK IAX TERNI-ROMA ................................................................ 103 5.4 CONCLUSIONI..................................................................................................................... 105 INDICE DELLE FIGURE ............................................................................................................... 106 BIBLIOGRAFIA ............................................................................................................................. 108 2 INTRODUZIONE CAPITOLO 1 INTRODUZIONE La dicitura “Voice over IP” (VoIP) viene associata al trasporto delle comunicazioni vocali in reti che usano il protocollo cardine della rete Internet, l’Internet Protocol (IP). Tali comunicazioni possono essere realizzate tra utenti che impiegano terminali telefonici o computer equipaggiati con opportuni programmi applicativi che presentano all’utente l’interfaccia uomo- macchina di un telefono. Il segnale vocale digitalizzato viene opportunamente trattato ed inserito in pacchetti IP, utilizzando protocolli end-to-end specifici per il trattamento di comunicazioni real-time per il flusso dei dati (Real Time Protocol – RTP), mentre sono stati sviluppati protocolli specifici per la segnalazione, adibita allo scambio tra terminali e tra questi e nodi specializzati di rete, di informazione di controllo per l’instaurazione delle chiamate base e per i servizi a valore aggiunto. Il termine “Internet Telephony” o “IP Telephony”viene usato per indicare l’applicazione del VoIP per l’erogazione di servizi telefonici su rete Internet, caso di notevole interesse per i considerevoli vantaggi di riduzione dei costi delle chiamate di lunga distanza, compatibilmente con i limiti di qualità della rete Internet. È ormai trascorso qualche anno dal debutto commerciale, risalente al 1995, dei primi prodotti VoIP messi sul mercato dall’azienda israeliana Vocaltec, ancora attiva sul mercato, mentre già negli anni 1991-1992 le prime esperienze di comunicazione real-time in voce su reti IP erano rese possibili dalla disponibilità di applicazioni “public domain” in Internet per la realizzazioni di comunicazioni audio e video in tempo reale e in conferenza tra più di due partecipanti (VIC,VAT, NEVOT e NV erano i nomi delle applicazioni usate tra l’altro per realizzare conferenze multimediali sulla dorsale multicast Mbone creata in modalità overlay su Internet). 3 INTRODUZIONE Il VoIP ha subito un’accelerazione negli ultimi anni resa possibile dalla crescente diffusione delle connessioni internet veloci, dette anche a banda larga, con abbonati che inviano e ricevono chiamate in modo del tutto analogo a quello con cui il servizio veniva erogato attraverso la vecchia rete analogica commutata. A tutt'oggi le installazioni di reti VoIP in edifici terziari ed abitazioni civili sono poche, mentre le grandi corporation utilizzano sempre più spesso la telefonia IP, realizzando reti telefoniche dedicate per collegare fra di loro le proprie sedi, previa conversione a valle delle stazioni di commutazione dei normali segnali analogici in entrata in pacchetti IP, e viceversa per le comunicazioni in uscita. In questo modo, di fatto, realizzano una rete digitale interna al gruppo, che si presta molto bene ad essere modificata ed adattata per fornire i più disparati tipi di servizi. Proprio in quest’ambito si è svolta la mia tesi in quanto ho dovuto progettare un’infrastruttura VoIP che permettesse di chiamare le altre sedi dell’azienda come se si trovassero tutte nello stesso edificio e di effettuare la conversione dei dati VoIP in segnali digitali per poter essere instradati nella PSTN. Lo strumento utilizzato per creare questa rete VoIP è l’ Asterisk un progetto open source della Digium che fornisce tutti gli strumenti necessari ad una corretta progettazione . Nel primo capitolo di questa tesi dopo un’introduzione sulle caratteristiche del VoIP saranno analizzati protocolli su cui fa affidamento nonché tutte le entità funzionali di una tipica architettura di rete basata su tale standard. Nel secondo capitolo saranno presentati l’Asterisk , le sue funzionalità, la descrizione e la configurazione base del suo dialplan, l’uso di contesti, estensioni, applicazioni. Nel terzo sarà illustrato il progetto realizzato, con tutte le azioni svolte e in maniere dettagliate il perché delle scelte effettuate Nel quarto ed ultimo capitolo si parlerà della realizzazione della rete progettata e il perché non sia stato possibile, al momento , attenersi totalmente alle specifiche di progetto. 4 IL VoIP CAPITOLO 2 IL VoIP 2.1 INTRODUZIONE Voice over IP (Voce tramite protocollo Internet), acronimo VoIP, è una tecnologia che rende possibile effettuare una conversazione telefonica sfruttando una connessione Internet o un'altra rete dedicata che utilizza il protocollo IP, anziché passare attraverso la rete telefonica tradizionale (PSTN).La telefonia via Internet permette una maggiore efficienza nell’uso della rete, grazie all’utilizzo della commutazione di pacchetto che, a differenza della commutazione di circuito, non assegna staticamente le risorse disponibili durante l’intera durata di una comunicazione ma ne consente la condivisione con altri sistemi di comunicazione dati,quali testo e video. Figura 2.1 -Esempio di una rete a commutazione di pacchetto 5 IL VoIP I sistemi IP offrono, inoltre, mezzi più economici(ormai ogni casa ha un accesso ad internet) per la fornitura di connessioni telefoniche permettendo di aggirare,per esempio, il sistema delle tariffe d’accesso internazionali. Il Voip è un sistema aperto in quanto lo standard IP non è proprietario ma è il risultato di accordi presi tra sviluppatori Hardware e Software che ne hanno sancito l’uso indiscriminato da parte di tutti permettendo ad imprese di vario tipo di sviluppare HW e SW innovativi ed in grado di integrarsi perfettamente con la rete. Ciò ha permesso la nascita di applicazioni impensabili con la vecchia rete a commutazione di pacchetto come ad esempio la possibilità di portare il proprio telefono VoIP ovunque sia disponibile una connessione Internet avendo la possibilità quindi di effettuare e ricevere chiamate, mantenendo il numero telefonico, come se si fosse a casa propria. In parallelo con la conversazione telefonica si possono scambiare flussi video in tempo reale (videoconferenza), possono essere inviati e ricevuti messaggi o files e si può partecipare a conferenze audio tra più persone in modo semplice ed a costi molto bassi. Il VoIP presenta ancora molti colli di bottiglia che ne frenano lo sviluppo. Il problema di fondo di tale tecnologia è che la rete Internet è una rete Best Effort e non dà quindi nessun tipo di garanzia né in termini di ritardo, ne di perdita ne di ordine sulla ricezione e tantomeno sulla possibilità di ricostruzione dei pacchetti di dati ricevuti. Risulta quindi necessario assicurare che il “flusso audio” mantenga la corretta coerenza temporale. Questi problemi saranno però sempre meno rilevanti, grazie a tecnologie che permettono di assegnare una priorità diversa a certi pacchetti dati, garantendo la qualità del servizio (QoS). Altre problematiche sono quelle relative all’affidabilità: i telefoni tradizionali senza cavo di alimentazione (la quasi totalità dei telefoni fissi) sono alimentati dalla linea telefonica, e in caso di black-out continuano a funzionare grazie a batterie e generatori all’interno delle centrali telefoniche. I telefoni VoIP (apparecchi, simili ad un tradizionale telefono, che si collegano direttamente ad un modem-router connesso ad Internet) hanno bisogno della corrente elettrica per funzionare e non sarebbero quindi disponibili durante un blackout con il risultato che sarebbe impossibile qualsiasi telefonata. Le connessioni Internet a “banda larga”, inoltre, possono essere meno affidabili di una linea telefonica. Nel caso di ritardi nell’invio o nella ricezione dei pacchetti o nel caso di una perdita degli stessi la 6 IL VoIP comunicazione vocale viene momentaneamente interrotta. Questi fenomeni si presentano in modo più evidente quando applicazioni VoIP utilizzano reti altamente congestionate o le distanze tra i punti finali sono molto lunghe. Uno dei problemi più rilevanti di questa tecnologia è che al momento risulta ancora difficile fornire un rintracciamento geografico veloce di una chiamata tramite VoIP, questo a causa della particolare natura delle reti IP che difficilmente permettono di individuare la posizione geografica degli utenti (si pensi ad esempio all’uso del proprio telefono VoIP da un HotSpot Wireless). Le chiamate di emergenza quindi non possono essere facilmente indirizzate verso le centrali più vicine. Inoltre nel caso in cui chi chiama non sia in grado di fornire un indirizzo preciso i servizi di emergenza non possono rintracciare il chiamante in alcun altro modo. Sono però in fase di studio e sperimentazione alcune soluzioni per aggirare il problema simili a quelle già applicate nella telefonia mobile. A questo va aggiunto che i canali di telecomunicazione hanno un’intrinseca limitatezza in termini di capacità nel trasportare dati, per cui è necessario adottare delle strategie di codifica. In quest’ottica gli organismi internazionali preposti alla standardizzazione hanno sviluppato e approvato protocolli sempre più leggeri ed efficaci,emanando opportune raccomandazioni e definendo i terminali e le componenti tecniche necessarie per la comunicazione multimediale su diversi tipi di sottoreti. 2.2 I PROTOCOLLI La Tecnologia VoIP richiede, in generale, due tipologie di protocolli di comunicazione che lavorano in parallelo: 1. uno per il Trasporto dei Dati (pacchetti voce su IP (detti anche voice stream o voice payload)) 2. uno per la Segnalazione (handshake, la sincronizzazione, la ricostruzione del frame audio, altre funzioni a supporto della comunicazione) Nella maggioranza dei casi, per la prima tipologia si adotta il protocollo Real Time Protocol (RTP). 7 IL VoIP Per la seconda tipologia, invece, la scelta è ampia e variegata, ed è proprio lì che si combatte la battaglia più “aspra” tra i produttori di hardware e software. Nel seguito sarà illustrato prima il protocollo RTP per poi passare ad un’ampia panoramica sui protocolli maggiormente usati per la segnalazione. 2.2.1 PROTOCOLLO RTP Il real time protocol (RFC3550)è lo standard per la trasmissione di traffico sensibile ai ritardi lungo le reti a pacchetto e consente il trasferimento in tempo reale punto-a-punto di informazioni audio,video e dati su reti unicast o multicast. Aggiunge alle informazioni dell’UDP e dell’IP altri dati quali informazioni sulla sequenzialità e sulla cronologia in modo da permettere al ricevitore di ricreare la sequenza originaria al fine di mascherare problemi quali il ritardo, il jitter e la perdita di pacchetti. Il protocollo non permette nativamente di sincronizzare più sessioni multimediali tra loro data la natura monoflusso del RTP. Questo ostacolo può essere aggirato appoggiandosi su una rete multicast che permette il dialogo tra N soggetti instaurando più sessioni RTP. Nella fattispecie ogni sessione è identificata da una coppia di indirizzi di livello di trasporto(indirizzo IP + numero porta) con indirizzo di destinazione comune a tutti i partecipanti. Utilizzando due sessioni RTP è possibile ad esempio fare in modo che alcuni partecipanti ricevano sia l'audio che il video, mentre altri ricevano solo uno dei due. L'header di un pacchetto RTP è composto da una parte fissa ed un'estensione utilizzata per scopi sperimentali. Figura 2.2-Header del pacchetto RTP 8 IL VoIP La parte fissa dell'header si articola su 12 byte e contiene i seguenti campi: V (Version): indica la versione di RTP utilizzata P (Padding): se il bit vale uno, il pacchetto contiene almeno un byte addizionale di riempimento non facenti parte del payload, l'ultimo byte di padding contiene il valore di quanti byte padding sono presenti. X (extension): se impostato ad uno, indica la presenza di un'estensione dell'header. CC (CSRC Count): è il numero di CSRC presenti dopo la parte fissa dell'header. M (Marker): l'interpretazione di questo bit è legata al profilo. PT (Payload Type): identifica il contenuto del pacchetto, nel profilo è fissata staticamente la corrispondenza tra il codice e il formato del payload Numero di sequenza: è incrementato di uno per ogni pacchetto inviato;può essere utilizzato dal destinatario per accorgersi della perdita di pacchetti e per ricostruire l'ordine corretto della sequenza. Timestamp: riflette l'istante di campionamento del primo ottetto dei dati. L'istante di campionamento deve essere derivato da un clock che si incrementa monotonamente e linearmente nel tempo per permettere i controlli di sincronizzazione e le misure dell'incertezza sugli arrivi dei pacchetti (arrival jitter). SSRC: identifica la stazione trasmittente. CSRC: questo campo è opzionale ed è presente solo se un elemento della rete ha unito in un unico flusso contributi provenienti da diverse sorgenti; al suo interno sono elencati gli SSRC delle singole stazioni. In ogni sessione la stazione che genera/riceve traffico RTP acquisisce un codice univoco, il SSRC, che permette alla stazione stessa di essere univocamente identificata all'interno della sessione real-time in esame. 9 IL VoIP Al RTP è sempre affiancato un protocollo di controllo di nome RTCP. RTCP (Real-Time Control Protocol) monitorizza l’invio dei dati e controlla e identifica i servizi. Riconosce dunque automaticamente il tipo di compressione utilizzato sulla linea e segnala al mittente ed al destinatario eventuali problemi riscontrati sulla rete o sulla stazione di lavoro (identificandone la fonte) , tenendole sotto controllo e fornendo feedback circa la qualità di ricezione e distribuzione dei dati (n° dei pacchetti ricevuti o persi sul jitter, ecc.) . 2.3 H.323 L’ H.323 è una raccomandazione ITU-T nella quale vengono descritte le specifiche per costruire un’infrastruttura di trasmissione dati multimediali, quali audio e video,a commutazione di pacchetto che non prevede però controllo della qualità del servizio ( in particolare la rete IP). Figura 2.3- Esempio schematico Architettura H.323 10 IL VoIP H.323 fa parte della famiglia degli standard H.32x che si occupano della comunicazione sui diversi tipi di rete in particolare : H.310 comunicazioni multimediali su Broadband ISDN H.320 comunicazioni multimediali su ISDN (a “banda stretta”) H.321 comunicazioni multimediali su ATM H.322 comunicazioni multimediali su LAN H.324 comunicazioni multimediali su PSTN Questo standard si occupa delle segnalazioni ,del controllo delle chiamate,della trasmissione e del controllo di informazioni multimediali ed infine il controllo di ampiezza di banda nelle conferenze in tempo reale punto – punto e multipunto. Gli elementi fondamentali di un sistema H.323 (vedi fig. 2.3): Terminal : sono le postazioni per gli utenti che, per essere conformi allo standard ,devono consentire almeno una comunicazione audio real-time bi-direzionale Gateway : sono gli elementi necessari per passare da una rete a commutazione di pacchetto ad una a commutazione di circuito;devono tradurre sia i protocolli di segnalazione sia il formato dei dati trasmessi. Gatekeeper : sono il cervello di una rete H.323. Non sono obbligatori ma necessari per fornire importanti servizi come l’instradamento delle chiamate, l’autorizzazione e l’autenticazione dei terminali e dei gateway,il controllo della banda l’accounting nonché la traduzione di indirizzi alias con per l’identificazione dei terminali. Multipoint Control Unit (MCU) : forniscono le funzionalità per rendere possibili conferenze tra più partecipanti: tutti i partecipanti devono stabilire una connessione con l’MCU che controlla e gestisce le risorse a disposizione. All’interno dello standard viene utilizzato il termine endpoint per indicare indistintamente un terminale ,un gateway o un MCU . Più endpoint controllati da uno stesso gatekeeper costituiscono la Zona. Una zona deve includere almeno un terminale mentre non è importante la tipologia delle rete che può essere costituita anche da più sottoreti collegate da un router(vedi figura sottostante). 11 IL VoIP Figura 2.4- Esempio di zona H.323 2.3.1 TERMINALI E ENDPOINT L’elemento di rete mostrato nella fig. 2.5 è definito dalle specifiche H.323 come terminale di rete. I terminali devono avere un’unità di controllo del sistema,un’ unità di trasmissione multimediale, un codec audio,un’interfaccia per la rete a commutazione di pacchetto. A questi requisiti necessari può aggiungersi la presenza di un codec video e di applicazioni relative ai dati utente. Le funzionalità e le unità che caratterizzano un terminale sono: System Control Unit :definisce le funzionalità H.225 e H.245 di controllo della chiamata,di scambio delle operazioni,dei messaggi e dei comandi che permettono l’utilizzo del terminale stesso. Media trasmission: si occupa della formattazione relativa alle trasmissioni audio ,video,dati,gli stream di controllo e i messaggi sull’interfaccia di rete. Queste unità elaborano a loro volta i segnali audio ,video,dati,gli stream di controllo e i messaggi provenienti dall’interfaccia di rete. Codec Audio: codifica il segnale audio per la trasmissione in rete e decodifica il segnale audio digitale in ingresso. Questa unità richiede operazioni di encoding e 12 IL VoIP decoding del segnale voce G.711 cui si aggiungono le la trasmissione e la ricezione di dati in formato a-law e µ-law. E’ possibile supportare operazioni di codifica definite dalle specifiche G.722,G.723.1,G.728,G.729. Interfaccia di rete: Interfaccia della rete a pacchetti che può utilizzare servizi di trasmissione TCP e UDP in modalità sia unicast che multicast. Codec Video: Se necessario è possibile definire questa unità per la codifica e la decodifica di segnali video in base a standard H.261/H.263. Canali Dati: supporta applicazioni quali l’accesso ai database,il trasferimento di file e di audiographics conferencing (funzionalità che permette di modificare un’immagine da parte di più pc contemporaneamente. Figura 2.5-SCHEMA DI UN TERMINAL H.323 13 IL VoIP 2.3.2 GATEWAY Il gateway H.323 riflette le caratteristiche di un unità SCN (Switched Circuit Network) e di un endpoint H.323 . Un gateway di questo tipo traduce opportunamente i formati di trasmissione audio,video e dati ,oltre a gestire sistemi e protocolli di comunicazione come ad esempio le operazioni di impostazione e terminazione della chiamate sia per quanto riguarda la rete IP sia per l’unità SCN. I gateway sono necessari quando è prevista un interconnessione con un unità SCN. In sintesi, i dispositivi endpoint sono in grado di comunicare tra loro utilizzando la rete a pacchetto senza connettersi ad un opportuno gateway. Il gateway svolge funzionalità di terminale H.323 o di unità MCU,che sarà descritta nei prossimi paragrafi, all’interno di una rete a pacchetto e di terminale SCN o di unità MCU all’interno di una rete a circuito come mostrato dalla fig. 2.6. Figura 2.6-Esempio di Gateway per PSTN 14 IL VoIP 2.3.3 GATEKEEPER Le unità H.323 gatekeeper definiscono quei servizi opzionali di controllo sia in fase di precall che a livello di chiamata stessa(call level) per comunicazioni tra dispositivi endpoint H.323. I gatekeeper sono logicamente separati rispetto alle altre unità della rete . Nel caso in cui siano implementati più gatekeeper l’interconnessione tra questi dispositivi è definita in base a modalità non standard. L’unità gatekeeper utilizza una sequenza di messaggi query/response LQR(Location Confirmation) per l’individuazione di utenti a livello locale. Le comunicazioni tra gatekeeper sono state definite nelle versioni più recenti del protocollo come ad esempio le versione 4 e 5 del H.323. Il protocollo H.323 v3, Annex G/H.255.0,fornisce proprio funzionalità interdominio (Communication between Administrative Domains);le clausole di questo protocollo definiscono funzionalità gatekeeper H.323 che consentono di effettuare operazioni scalabili di risoluzione degli indirizzi e di trasmissione di opportune forme di pricing, allo scopo di favorire la diffusione delle reti H.323 su larga scala. Un gatekeeper ,all’interno di uno scenario di rete H.323,esegue le operazioni indicate di seguito: Address Traslation : fornisce gli indirizzi IP degli endpoint ricavandoli da alias H.323 oppure da indirizzi E.164 ovvero i numeri telefonici standard. Admission Control : definisce l’accesso alla rete autorizzato tramite messaggi ARQ/ACF/ARJ (Admission ReQuest, Admission ConFirm, Admission ReJect). Bandwidth Control : riguarda la gestione dei requisiti di banda relativi ai terminali endpoint tramite messaggi BRQ/BCF/BRJ (Bandwidth ReQuest, Bandwidth ConFirm , Bandwidth ReJect). Zone Management : Definisce funzionalità a servizio di terminali registrati,gateway e unità MCU. Il gatekeeper offre anche la possibilità di definire le seguenti funzionalità : 15 IL VoIP Call Control Signaling : riguarda l’impostazione,il mantenimento e la terminazione di conversazioni tra endpoint. Call Authorization : consente ai gatekeeper di limitare l’accesso a particolari terminali e gateway oppure limitare l’accesso in base a policy che dipendono da data e ora. Bandwidth Management : permette al gatekeeper di rifiutare una chiamate quando la larghezza di banda disponibile non è sufficiente. Call Management : questi servizi includono un elenco delle chiamate attive che viene utilizzato per indicare se un dispositivo endpoint è occupato. 2.3.4 UNITA’ MCU L’unità MC(Multipoint controller) supporta funzionalità di conferenza tra tre o più endpoint nell’ambito di conferenze multipunto. I servizi MC trasmettono le capability di ciascun terminale coinvolto nella conferenza e le possono modificare nel corso del processo. Le operazioni MC possono essere implementate su un dispositivo terminale ,gateway,gatekeeper oppure su un entità separata MCU (Multipoint Controller Unit). MCU è quindi, un particolare nodo terminale che supporta operazioni di multiconferenza ed è in generale composto da un unità MC e da una o più unità MP(Multipoint Processor). Il dispositivo MP riceve gli stream audio,video e/o dati, e li distribuisce a sua volta verso quei dispositivi endpoint che partecipano alla multiconferenza. Ciò comporta che un unità MCU,se deve supportare conferenze multipunto a livello centralizzato , è composta generalmente da un unità MC e da un unità MP audio,video e dati. 2.3.5 SUITE PROTOCOLLARE H.323 Come si può vedere dalla figura 2.7 la suite protocollare H.323 si basa su più protocolli che supportano le funzionalità di call admission ,setup,teardown e trasporto sia degli stream multimediali che dei messaggi impiegati all’interno di uno scenario di rete H.323. Questi protocolli sono supportati da opportuni meccanismi di trasporto dei dati all’interno della 16 IL VoIP rete sia robusti che best effort. Come appare evidente dalla figura i protocolli di che trattasi, possono essere suddivisi in due sottocategorie a seconda del protocollo di trasporto usato: Reliable : sono quelli che usano come protocollo di trasporto il TCP ovvero si appoggiano su un canale connesso e a consegna garantita. UnReliable : sono quelli che usano come protocollo di trasporto l’UDP ovvero si appoggiano su un canale non connesso e a consegna non garantita Figura 2.7-Suite Protocollare H.323 La suite protocollare H.323 può essere divisa in tre aree principali relative alle funzionalità di controllo che applicano: RAS(Registration,Admission,Status) Signaling : definisce il controllo che precede una chiamata all’interno di un’architettura H.323 basata su gatekeeper Call Control Signaling : meccanismo impiegato per impostare, mantenere e terminare conversazioni tra endpoint. Media Control and Trasport : meccanismo che definisce un opportuno canale di rete affidabile H.245 allo scopo di trasmettere i messaggi di controllo relativi ai dati multimediali. Meccanismi di trasporto avvengono mediante il protocollo UDP. Nei prossimi paragrafi saranno presentate in breve le tre forme di segnalazione sopra indicate. 17 IL VoIP 2.3.6 SEGNALAZIONE RAS Il sistema di segnalazione RAS definisce il controllo che precede una chiamata all’interno di una rete H.323 in cui è definita una zona e nella quale vengono utilizzati gatekeeper. Viene stabilito un canale RAS tra gli endpoint presenti e il gatekeeper attraverso una rete IP prima dell’instaurazione degli altri canali, indipendentemente sia dai meccanismi di segnalazione di controllo della chiamate,sia dai canali di trasporto dei media .La trasmissione è di tipo unreliable e definisce opportune procedure di registrazione,accesso alla rete ,modifica delle larghezza di banda oltre alla funzionalità di stato e de-registrazione di seguito illustrate: Gatekeeper Discovery: è una procedura manuale o automatica attraverso la quale un endpoint si registra presso un gatekeeper. Il metodo manuale prevede la configurazione su un endpoint dell’indirizzo IP del gatekeeper. In questo caso la registrazione può avvenire immediatamente anche se solo presso il gatekeeper predefinito. Il metodo automatico consente di modificare nel tempo la relazione tra end-point e gatekeeper ma richiede un meccanismo denominato auto-discovery che introduce un piccolo ritardo nell’instaurazione del canale. Registrazione : è la procedura che consente a endpoint, gateway ed unità MCU di appartenere a una determinata zona e di segnalare al gatekeeper i propri indirizzi IP e alias. La registrazione e de-registrazione vengono effettuate al termine della procedura di discovery e prima di effettuare una qualsiasi chiamata ,attraverso lo scambio di messaggi request,confirm e reject a seconda dello stato della transizione. Endpoint location : è un meccanismo utilizzato da endpoint e gatekeeper per ricavare informazioni sul contatto nel caso fossero disponibili solo quelle di alias. Opportuni messaggi location, vengono inviati all’indirizzo del canale RAS del gatekeeper oppure vengono inviati in multicasting all’indirizzo multicast del gatekeeper discovery. Admission Control : è un meccanismo con il quale si scambiano messaggi tra endpoint e gatekeeper per definire le operazioni di base che riguardano l’autorizzazione a effettuare una chiamata e il controllo della larghezza di banda 18 IL VoIP all’interno di una rete H.323. I gatekeeper rispondono a questi messaggi con una conferma o un rifiuto. Informazioni di stato: è un meccanismo con il quale il gatekeeper può utilizzare il canale RAS per ricavare lo stato(offline,online) di un terminale endpoint. In genere l’intervallo tra un’interrogazione e la successiva è di 10 sec. 2.3.7 CALL CONTROL SIGNALING(H.225) Nelle reti H.323 le procedure di controllo della chiamate si basano sulle Raccomandazione ITU(International Telecomunication Union) H.225 che definiscono le specifiche sull’utilizzo e il supporto dei messaggi di segnalazione Q.931. I terminali si scambiano messaggi con lo scopo di connettere ,gestire e disconnettere le chiamate. I messaggi più comuni sono: Setup: l’entità chiamante avverte l’entità chiamata che vuole stabilire una connessione; Call Proceeding: l’entità chiamata informa la chiamante dell’inizio delle procedure di instaurazione della chiamata; Alerting: risposta dell’entità chiamata che avvisa il chiamante che sta squillando il telefono; Connect: indica all’entità chiamante che il chiamato ha risposto alla sua telefonata; Release Complete: il terminale che inizia la disconnessione avverte l’altro terminale che la chiamata è stata rilasciata(sempre che il canale sia ancora aperto e attivo); Facility: un messaggio Q.932 che serve per richiedere l’acknoledgement (cioè il messaggio di verifica e conferma) di servizi supplementari. All’interno di una rete H.323 è possibile instradare il canale di segnalazione di una chiamate in due modi differenti: DECS(Direct Endpoint Call Signaling) GKRCS(GateKeeper-Routed Call Signaling) 19 IL VoIP Il metodo DECS prevede che i messaggi di segnalazione vengano trasmessi direttamente tra due endpoint. Questo metodo è indicato nel caso sia presente un piano di numerazione privato centralizzato che definisca le connessione tra endpoint. Il metodo GKRCS prevede invece che i messaggi di call signaling tra gli endpoint debbano passare obbligatoriamente per il gatekeeper. In questo caso gli endpoint forniscono le informazioni di sorgente (es. parametri ID utente) a motori di routine RE(Route Engine)presenti nei gatekeeper attraverso i quali è possibile associare le chiamate in ambito inter-aziendale. 2.3.8 MEDIA CONTROL E TRASPORTO La trasmissione end-to-end dei messaggi di controllo tra entità H.323 è gestita dal protocollo H.245 che provvede alla creazione di canali logici per la trasmissione audio,video,dati e informazioni di controllo del canale. Per ciascuna chiamata un endpoint stabilisce con un altro endpoint un canale H.245 che risulta affidabile(reliable) e viene impostato su IP ed è assegnata dinamicamente una porta TCP in fase di segnalazione di chiamata. Su questo canale di controllo si effettuano lo scambio della capability della rete,l’apertura e la chiusura dei canali logici,la comunicazione delle modalità di trasmissione e il controllo dei messaggi. Il meccanismo H.245consente di determinare anche le capability di rete distinguendole tra fase di trasmissione e di ricezione sia in termini di negoziazione delle funzionalità di rete sia per determinare il codec da utilizzare durante la comunicazione . Nel caso in cui si adotti la modalità di segnalazione GKRS è possibile utilizzare due diverse topologie di instradamento del canale di controllo di chiamate: Direct H.245 Control: prevede l’esecuzione delle operazione direttamente tra i terminali che partecipano alla trasmissione Gatekeeper Routed H.245 control: prevede l’esecuzione delle operazioni tra ciascun endpoint e i rispettivi gatekeeper. Qui di seguito sono indicate brevemente le procedure e i messaggi che definiscono le operazioni di controllo H.245. 20 IL VoIP Capability Exchange : procedure che consentono di scambiare in modo sicuro i servizi erogabili dai due endpoint Master-Slave Termination: procedure che consentono di stabile quale endpoint è da considerare master e quale slave durante una comunicazione Round-Trip Delay: procedure che consentono di determinare il ritardo di trasmissione tra il dispositivo terminale di partenza e quello di arrivo. Logical Channel Signaling: Apre e chiude il canale logico che trasmette le informazioni audio video e dati. Questo viene impostato prima della trasmissione vera e propria per garantire che i terminali siano pronti e in grado di riceve e decodificare le informazioni. 2.3.9 SVOLGIMENTO DI UNA CHIAMATA H.323 Tutti i terminali all’interno della Zona di un Gatekeeper lo devono contattare prima di effettuare una chiamata. Questa operazione viene effettuata inviando un pacchetto UDP broadcast a cui il gatekeeper risponde. A questo punto il terminale è a conoscenza dell’indirizzo IP del gatekeeper e può inviare una richiesta di registrazione in un pacchetto RAS. Dopo che la registrazione è stata accettata, e cioè il terminale è stato autenticato, il telefono può finalmente inviare un’altra richiesta, questa volta per riservare la banda necessaria ad effettuare una chiamata. Il gatekeeper può accettare la richiesta (se la banda è sufficiente) o rifiutarla, garantendo così la QoS. Il terminale, dopo tale operazione e se la richiesta è stata accettata, può finalmente iniziare la chiamata inviando la richiesta stessa con il numero al gatekeeper sul canale di segnalazione della chiamata(su cui viene utilizzato Q.931). Una volta che la chiamata è stata accettata dal terminale remoto, il gatekeeper avvisa il chiamante e rilascia il controllo della chiamata. Spetta ora ai due terminali negoziare attraverso il canale di controllo della chiamata (H.245) il codec da utilizzare per la comunicazione e gli altri parametri necessari. Se i due terminali trovano un accordo, vengono utilizzati due canali RTP ed uno RTCP per il controllo delle congestioni e, in caso di video, della sincronizzazione tra video ed audio. 21 IL VoIP Alla fine della conversazione la chiamata viene terminata con le segnalazioni sul canale Q.931. Figura 2.8- -schema segnalazione H.323 2.4 IL SIP Il SIP(Session Initiation Protocol) è un protocollo di segnalazione che controlla le operazioni di avvio,modifica e di terminazione di sessioni interattive multimediali. Le sessioni multimediali possono riguardare svariate forme di comunicazione come per esempio chiamate audio e video tra due entità,sessioni di chat o di videogiochi. Le estensioni del protocollo SIP consentono anche la definizione di trasmissioni relative a servizi di instant messaging ,servizi di presenza e notifica di eventi. Il protocollo SIP è basato su messaggi di testo ed è simile ai protocolli HTTP e SMTP(Simple Mail Transfer Protocol , protocollo standard per la trasmissione via internet di e-mail). Il SIP è un protocollo peer-to-peer ;ciò significa che le funzionalità di rete ,come per esempio le operazioni di routing di una chiamata e di gestione della sessione ,sono distribuite su tutti i nodi della rete SIP inclusi i terminali endpoint e server di rete. Una soluzione di questo genere si contrappone al modello di telefonia tradizionale nel quale i dispositivi terminali di utente dipendono completamente da switch centralizzati per quanto 22 IL VoIP riguarda la fase di impostazione della sessione di chiamata e di implementazione dei servizi di rete. Il protocollo SIP è stato definito dal gruppo di lavoro IETF(Internet Engineering Task Force) MMUSIC( Multiparty Multimedia Session Control) nel RFC 2543 del marzo 1999. Nel giugno del 2002 lo stesso organismo IETF ha pubblicato nuova specifiche SIP nel RFC 3261. La tecnologia IP è ancora in fase di sviluppo e nel prossimo futuro sarà necessario aggiungere nuove funzionalità di segnalazione. L’estensibilità del protocollo SIP evidenzia questa necessità. A differenza del protocollo H.323, il SIP agisce in modo molto più specializzato occupandosi solo della segnalazione e integrandosi per le altre funzioni VoIP con gli altri protocolli definiti per le reti IP. Tra essi i più importanti coinvolti nel VoIP sono: ReSource reserVation Protocol (RFC (1)2205) per la prenotazione delle risorse di rete RTP/RTCP per il trasporto di informazioni real time e riscontro al trasmettitore della QoS a livello di rete osservato al ricevitore Real Time Streaming Protocol(RFC 2326) per il controllo del trasporto di streaming di dati multimediali Session Announcement Protocol(RFC 2974 ) per l’annuncio di sessioni multimediali attraverso comunicazioni multicast Session Description Protocol (RFC 2327) per la descrizione delle sessioni multimediali Media Gateway Control Protocol (RFC 3525) per la descrizione del protocollo usato per la comunicazione fra elementi di un gateway multimediale decomposto per aumentarne la scalabilità SIP può essere usato anche insieme ad altri protocolli si segnalazione come H.245 e H.225 usati nell’architettura H.323. Le sessioni di cui si occupa il protocollo SIP sono conferenze multimediali ,chiamate telefoniche su IP e distribuzione multimediale ed in questo caso può essere usato sia per iniziare una sessione, sia per invitare utenti a partecipare a sessioni già aperte. Il SIP prevede la mobilità dell’utente quindi può soddisfare e ridirigere le richieste di connessioni 23 IL VoIP verso la posizione corretta dell’utente. E’ inoltre indipendente dai protocolli dei livelli sottostanti e può trasmettere i messaggi sia usando l’UDP che il TCP. SIP utilizza molte funzionalità del protocollo HTTP v.1.1 definite nel RFC 2616 . In particolare impiega dei messaggi di forma testuale con codici di risposta e molti campi d’intestazione simili a quelli utilizzati dal protocollo http nei servizi web con una conseguente migliore integrazione tra VoIP e Web. Per diminuire i tempi di call setup si usa il protocollo di trasporto UDP ,anziché TCP ,che abbatte i tempi necessari all’instaurazione di una chiamate. A questo si aggiungono meccanismi di time-out che garantiscono l’affidabilità alla trasmissione dei messaggi di segnalazione sfruttando il principio di richiesta- risposta su cui si basa il protocollo. In altre parole ,visto che ogni richiesta implica una risposta ,il chiamante si accorge che l’eventuale richiesta è andata persa ,controllando se la risposta arriva entro un certo tempo dall’istante di trasmissione della richiesta,cioè entro un time-out. In caso negativo, il chiamante assume che la richiesta non è arrivata al chiamato e quindi procede con la ritrasmissione. D’altro canto, al chiamato viene notificata la corretta ricezione della risposta mediante un messaggio, ACK ,di riscontro da parte del chiamante . Nel caso in cui il chiamante registrasse per molte volte il fallimento della trasmissione dei messaggi di segnalazione, può decidere di aprire una connessione TCP da utilizzare proprio per questi messaggi di segnalazione. Allo scopo di ridurre ulteriormente i tempi di Set Up, il protocollo SIP combina in un singolo scambio di messaggi, le funzioni di ricerca della posizione dell’utente nella rete, la notifica della volontà di instaurare una sessione SIP e le sue caratteristiche in termini di media coinvolti e proprietà delle informazioni prodotte (tipo di codifica etc.). Infine, il protocollo offre un meccanismo di autenticazione e controllo in modo che il software che gestisce le chiamate in arrivo possa rifiutare tentativi di chiamata non desiderati. L’instaurazione di una comunicazione multimediale tramite SIP consta di 5 fasi: User Location: per la determinazione del terminale da usare per la comunicazione User Capabilities: per la determinazione dei media e dei relativi parametri da usare User Availability: per la determinazione della disponibilità del chiamato di accettare la comunicazione 24 IL VoIP Call Setup: per l’inizializzazione della chiamata Call Handling: per permettere il trasferimento e la terminazione delle chiamate 2.4.1 ARCHITETTURA SIP I principali componenti dell’architettura su cui si basa il protocollo SIP sono: Proxy server:è un programma che agisce sia da client che da server allo scopo di fare richieste a favore di altri utenti; le richieste, prima di essere inviate ad altri server, vengono processate. Redirect server: è un server che accetta richieste SIP, mappa l’indirizzo in uno o più nuovi indirizzi (eventualmente nessuno se non ha informazioni sulla richiesta ricevuta) e li restituisce all’utente richiedente. Registrar: è un server che accetta richieste di registrazione. User agent client (UAC): è un’applicazione che inizia la richiesta per l’instaurazione di una sessione SIP User agent server (UAS): è un’applicazione che contatta l’utente quando riceve una richiesta SIP invia una risposta. Per ottenere informazioni sulla possibile locazione di un utente chiamato, l’architettura SIP si basa su un opportuno servizio il location service come mostrato in figura 2.9. Nell‘architettura presentata si deve tener presente che chiamante e chiamato sono identificati da indirizzi SIP . Ciò comporta che quando un utente vuole effettuare una chiamata, prima localizza il server appropriato a cui mandare la richiesta poi gli inoltra la richiesta stessa. La richiesta può essere ridiretta o può provocare una catena di richieste SIP da parte di proxy (maggiori dettagli saranno presentati nei paragrafi successivi.). 2.4.2 INDIRIZZI SIP La forma degli indirizzi SIP è simile a quella adottata per la posta elettronica e segue la definizione URL (Uniforme Resource Locators) data dalla RFC 1738 . Il loro formato è: sip:user:password@host:port;optinon 25 IL VoIP Figura 2.9- ARCHITETTURA SIP dove : SIP indica il protocollo del servizio a cui si riferisce l’indirizzo User è l’utente del servizio Password è l’eventuale parola segreta per l’accesso al servizio Host è il terminale usato dall’utente per accedere al servizio Port specifica la porta con la quale ci si connette al servizio per contattare l’utente Option indica campi opzionale che posso essere inseriti dopo port (preceduti da punto e virgola)che possono specificare ad esempio il tipo di terminale oppure il protocollo di trasporto utilizzato per trasmettere messaggi di segnalazione. Esempi di indirizzi sono : sip:[email protected]:5067 sip:ann:[email protected] sip:[email protected];transport=tcp sip: [email protected];user=phone 26 IL VoIP 2.4.3 METODI E RISPOSTE SIP Il protocollo SIP ,essendo pienamente integrato con la filosofia internet, è basato sul modello Client-Server con procedure di richiesta e relative risposte. Il formato dei messaggi utilizzato dal protocollo è conforme alle specifiche stabilite dalla RFC 2822 oltre a presentare molti campi definiti per il protocollo di applicazione http v-1.1. Sia le richieste sia le risposte quindi, utilizzano messaggi composti da una Start-line,uno o più campi d’intestazione (header),una linea vuota che indica la fine dei campi d’intestazione e un corpo dei messaggi opzionale. Le richieste implementate dal protocollo SIP sono le seguenti: INVITE. Tale metodo indica che un utente o servizio è invitato a partecipare ad una sessione. Il corpo del messaggio di questo comando contiene una descrizione della sessione alla quale il chiamato è invitato. Tale descrizione è fatta mediante l’utilizzo del protocollo SDP. ACK. Questo metodo conferma che il client ha ricevuto una risposta finale ad una richiesta INVITE. Il corpo del messaggio ACK può contenere la descrizione della sessione scelta dopo lo scambio di informazioni contenuto nel corpo dei messaggi INVITE e della relativa risposta. Qualora, invece, il corpo del messaggio sia vuoto, la sessione sarà configurata con i para metri indicati nella richiesta INVITE. OPTIONS. Con questo metodo un terminale può chiedere ad un’entità UAS o ad un Proxy SIP le funzionalità (capabilities) implementate. BYE. É usato dall’entità UAC per indicare al server che vuole terminare la chiamata CANCEL. Questo metodo è usato per cancellare una richiesta pendente individuata in maniera univoca dai valori dei campi Call-ID, To, From e Cseq, senza influenzare le altre richieste pendenti o completate. 27 IL VoIP REGISTER. Esso permette al client di far conoscere al proxy o al redirect server a quale indirizzo può essere raggiunto: tale indirizzo viene indicato nel campo Contact della richiesta. Dopo aver ricevuto ed interpretato il messaggio di richiesta ,il ricevente risponde con un messaggio SIP il cui contenuto informativo principale è dato dallo Staus Code e Reason Phrase contenuti nel campo Start Line. Lo status code è un intero a tre cifre che indica il risultato del tentativo di capire e soddisfare la richiesta . La Reason Phrase da una breve descrizione testuale ,comprensibile all’essere umano,dello Staus Code che è pensato per una facile interpretazione da parte delle macchina. La prima cifra dello Staus Code definisce la classe della risposta mentre le ultime due non hanno un ruolo preciso. Le principali classi di risposta sono le seguenti: 1xx = Provisional. Queste risposte indicano che il server o il proxy contattato sta effettuando altre azioni e non ha ancora una risposta definitiva. Il client dovrebbe aspettare un’ulteriore risposta dal server che dovrebbe essere trasmessa senza un’ulteriore sollecitazione. La risposta 1xx dovrebbe essere inviata se il server si aspetta di impiegare più di 200 msec per ottenere la risposta finale. 2xx = Success. Questa classe di risposte è generata quando la richiesta ha avuto successo. 3xx = Redirection. Queste risposte danno informazioni sulla nuova locazione dell’utente, o sui servizi alternativi che possono soddisfare la chiamata. 4xx = Request failure. Sono risposte che indicano un esito negativo della richiesta in un particolare server. Dopo questa risposta il client non deve riprovare la stessa richiesta verso lo stesso server senza averla modificata. La stessa richiesta potrebbe però avere successo se diretta ad un altro server. 5xx = Server failure. Sono risposte che il server invia quando egli stesso commette errori, su richieste che apparentemente sono corrette. 6xx = Global failure. Indicano che un server, dopo aver acquisito informazioni definitive su di un particolare utente, ha dedotto che la richiesta non potrà essere esaudita. In particolare,questa risposta indica che la chiamata, così com’è, non potrà essere accettata da nessun server. Esempi di eventi che generano questa 28 IL VoIP risposta sono: il server avendo contattato l’utente ha visto che questo è occupato e non desidera ricevere la chiamata, il chiamato non esiste, alcuni parametri della chiamata non sono accettabili. Le applicazioni non devono necessariamente comprendere tutti i codici di risposta ma devono riconoscere almeno la classe a cui appartengono. Il formato dei messaggi di richiesta è mostrato nella Fig. 2.10, dove si nota come nella Start Line (in questo caso indicata come Request Line) sia presente il metodo(nell’esempio INVITE), il Request-URI e la versione del SIP (2.0). In particolare il Request-URI contiene l’indirizzo presso il quale il chiamato è momentaneamente raggiungibile. Figura 2.10-Formato del messaggio relativo al metodo INVITE Nella parte iniziale tale indirizzo è generalmente uguale a quello inserito nel campo To dell’intestazione;successivamente quando i Proxy o Redirect Server dispongono 29 IL VoIP d’informazioni sull’indirizzo attuale del UAS associato al chiamato ,questo viene inserito nella Request Line. Dopo la Start Line sono presenti altri campi fra i quali possiamo citare : TO. Questo campo contiene l’indirizzo logico del chiamato a cui è destinata la richiesta. Questo indirizzo può non essere quello definitivo, in quanto il chiamato può spostarsi nella rete. FROM. Richieste e risposte devono contenere il campo FROM indicante chi ha iniziato la richiesta. Call-ID. Identifica univocamente un particolare invito SIP o tutte le registrazioni di un particolare client. CONTACT. Questo campo fornisce uno o più URL dove l’utente può essere contattato per ulteriori comunicazioni. Content-type. Indica il protocollo usato nel corpo del messaggio. Nell’esempio viene indicato che il corpo del messaggio ha le informazioni codificate secondo il protocollo SDP. CSeq. Questo campo deve essere aggiunto dal client ad ogni richiesta. Cseq contiene il metodo della richiesta e una sequenza decimale scelta dal client, unica all’interno di un singolo valore di Call-ID. Richieste consecutive riferite a metodi diversi ma aventi lo stesso Call-ID devono contenere sequenze di numeri crescenti e contigui. VIA. Indica il percorso fatto dalla richiesta fino ad un certo momento. Questo previene il formarsi di loop ed assicura che le risposte seguano lo stesso percorso delle richieste. Nel campo dati del messaggio è presente una descrizione dei media coinvolti nella chiamata ;tale descrizione viene costruita utilizzando il protocollo SDP. Per sessioni multimediali la descrizione enumera i tipi di media e formati presenti nella sessione. Per sessioni unicast la descrizione enumera i tipi di media e formati che il chiamante vuole usare e specifica dove vorrebbe che fossero inviate le informazioni relative ai diversi media. In ogni caso, se il destinatario accetta la comunicazione, risponde mediante un messaggio con una descrizione simile a quella ricevuta elencando i media che vuole utilizzare. Per una sessione multicast il 30 IL VoIP chiamato invia una descrizione di sessione solo se è in grado di ricevere i media indicati dal chiamato o se vuole ricevere i dati in unicast. Nel caso si desideri cambiare i parametri di una sessione già attiva, uno dei partecipanti alla chiamata deve inviare una richiesta INVITE con lo stesso Call-ID, ma con un CSeq maggiore dell’ultima richiesta fatta, inserendo nel corpo la descrizione SDP con i nuovi parametri. Il messaggio di risposta presentato nella Fig. 2.11 è relativo alla richiesta precedente; si può osservare come i campi (To,From,Call-ID,CSeq)che identificano la transazione SIP siano copiati dal messaggio di richiesta a quello di risposta. Ciò consente alle risposte di essere messe in relazione con le richieste. Figura 2.11-Formato dei messaggi di risposta Da notare che la richiesta ACK successiva ad un INVITE non fa parte della transazione e non genera risposte. Nel messaggio possiamo ulteriormente notare come il chiamato inserisca nel corpo del messaggio i parametri desiderati per la sessione alla quale è stato invitato usando per la descrizione, anche in questo caso, il protocollo SDP. 31 IL VoIP 2.4.4 INSTAURAZIONE DI UNA SESSIONE SIP La procedura per l’instaurazione di una sessione SIP consiste nella trasmissione di due richieste da parte del chiamante, INVITE ed ACK, e delle risposte al messaggio di INVITE trasmesse dal chiamato. In particolare, la richiesta INVITE serve al chiamante per comunicare al chiamato l’intenzione di voler aprire una sessione SIP con lui. Il chiamato notifica di accettare l’invito all’apertura della sessione inviando un messaggio di risposta positivo (cioè di classe 2xx).La conferma della corretta ricezione di tale messaggio di risposta viene notificata al chiamato dal chiamante mediante il messaggio ACK. Come abbiamo precedentemente detto, nel corpo della richiesta INVITE viene inserita una descrizione della sessione, in genere in formato SDP, che fornisce al chiamato sufficienti informazioni per aderire alla sessione. Lo scambio di messaggi necessari per l’instaurazione di una chiamata può avvenire secondo due modalità Proxy server; in questo caso è il server a processare il messaggio di chiamata per inoltrarlo al chiamato o al Proxy Server successivo più vicino ad esso(vedi Fig. 2.12) Redirect server fornisce al chiamante le informazioni necessarie per contattare il chiamato(vedi Fig. 2.12) 32 IL VoIP Figura 2. 12-Chiamata SIP mediante Proxy Server Figura 2.13-Chiamata SIP mediante Redirect Server 2.5 SIP vs H.323 33 IL VoIP È facile intuire come SIP ed H.323 abbiano sia dei vantaggi che degli svantaggi evidenti. Il principale pregio di H.323 è di essere stabile e collaudato ma la sua realizzazione risulta eccessivamente costosa. È stato infatti scelto dalle grandi aziende di telecomunicazioni per sostituire linee telefoniche tradizionali su larga scala. H.323 inoltre offre delle specifiche per la realizzazione dei Gateway che sono già presenti in commercio. SIP, per pensare di sostituire H.323 in tutti gli scenari, soprattutto quelli più grandi, necessità di un supporto sempre crescente da parte non solo della comunità Open Source e di poche piccole aziende ma anche che l’interesse si allarghi a tutti i grandi operatori e, c’è da dire, che tutto ciò si sta pienamente verificando. D’altronde H.323 ha una struttura più rigida e non si presta a sviluppi futuri o ad altri utilizzi, al contrario di SIP. In generale H.323, essendosi diffuso prima, ha trovato mercato nella sostituzione di centralini analogici, nella gestione delle video-conferenze a livello aziendale e ovunque ci fosse bisogno di un servizio affidabile. SIP ha invece offerto una possibilità a molti sviluppatori e produttori di hardware di affacciarsi al mondo del Voice over IP (VoIP) con un protocollo semplice da gestire e da controllare. Dal punto di vista progettuale si può quindi affermare che i due protocolli stanno raggiungendo un livello di complessità paragonabile e si stanno dimostrando ugualmente validi. SIP infatti nella sua architettura possiede entità simili a quelle presenti in H.323 per gestire più User Agent.Esistono quindi notevoli differenze tra i due protocolli ed è utile evidenziare le più importanti. 2.5.1 ARCHITETTURA La struttura di SIP può essere definita modulare. SIP si occupa direttamente solo della segnalazione delle chiamate, della locazione degli utenti e della registrazione degli UA mentre altre funzionalità come QoS,directory access, service discovery risiedono in protocolli ortogonali. H.323 al contrario, utilizzando protocolli esistenti, ha creato una soluzione monolitica. In un sistema utilizzante H.323 tutto risulta già integrato. 2.5.2 INTEROPERABILITA’ 34 IL VoIP Un'altra differenza tra SIP e H.323 è la interoperabilità tra le diverse versioni. Ogni nuova versione di H.323 mantiene infatti la compatibilità con le precedenti , sono state previste inoltre delle direttive per lo sviluppo di tale modifiche. SIP invece durante il suo sviluppo ha abbandonato alcune convenzioni tipiche delle prime versioni del protocollo. Questo approccio rappresenta in parte un vantaggio poiché errori progettuali possono essere risolti definitivamente, ma compromette la compatibilità con le precedenti versioni. 2.5.3 CODIFICA DEI MESSAGGI H.323 utilizza una codifica binaria dei messaggi, tale codifica è preferibile perché sicuramente più compressa di un messaggio intelligibile come nel caso di SIP. Questo si traduce in un consumo inferiore di banda che viene vanificato dal traffico voce che occupa una porzione della banda di gran lunga più elevata. Il vantaggio di utilizzare testo ascii per i messaggi sta nella facilità di modifica del protocollo e nel suo debugging poiché il contenuto è immediatamente comprensibile. Inoltre possono essere inclusi altri tipi di informazioni come URL in maniera rapida. 2.5.4 PROTOCOLLO DI TRASPORTO Sia SIP che H.323 possono utilizzare TCP oppure UDP come protocollo di trasporto. Con H.323 viene utilizzato TCP per la segnalazione della chiamata e il controllo della stessa per la criticità dei ruoli che svolgono. RAS invece, che viene utilizzato per le richieste di un terminale al gatekeeper, utilizza UDP poiché la registrazione ad un servizio può essere in genere ripetuta e l'utilizzo di UDP permette invii broadcast per l'individuazione della locazione del gatekeeper. SIP richiede una sola porta per il controllo ed in genere viene scelto UDP per il minore overhead. 2.5.5 FUNZIONAMENTO CON LINEE PSTN All'interno delle raccomandazioni H.323 sono presenti specifiche direttive per la comunicazione con linee analogiche. H.323 è stato realizzato prendendo come esempio la 35 IL VoIP tecnologia PSTN e protocolli come Q.931 che gestiscono il controllo della chiamata sulle linee ISDN PRI e BRI. H.323 gestisce attraverso i media gateway la comunicazione con linee tradizionali, nonostante sia completamente basato sullo scambio di pacchetti. Il protocollo SIP invece non prevede nulla del genere per il semplice fatto che non si occupa di specifiche hardware ma di stabilire un protocollo per creare delle sessioni. Pur essendo possibile implementare dei gateway tuttavia non sono rilasciate specifiche per la realizzazione di tali apparati. 2.5.6 UTILIZZO RISORSE Sia SIP che H.323 si basano su protocolli già esistenti, RTP e RTCP, per lo scambio dei frame dati . In questo modo tre porte UDP sono già utilizzate. Nel caso di SIP un'altra porta è necessaria per il controllo e lo stesso si può dire di H.323 ma solo se la comunicazione tra due telefoni è diretta e questa è già stata inizializzata. Sfortunatamente questo caso si presenta solo in configurazioni molto semplici, non appena vengono coinvolti gatekeeper e gateway il numero di porte richieste per gestire il controllo della comunicazione sale a tre. 36 L’ASTERISK CAPITOLO 3 L’ASTERISK 3.1 INTRODUZIONE Asterisk è un software open source sviluppato dalla Digium in ambiente linux per la realizzazione di un centralino VoIP e TDM in grado di gestire sia le moderne comunicazioni VoIP sia interfacce per le gestione di linee PSTN(analogiche e digitali). Nasce da un idea di Mark Spencer che nel 2001 ne rilasciò una prima versione e contemporaneamente fondò Digium, una società di produzione elettronica. Per favorire lo sviluppo e la diffusione del progetto mise i file sorgenti a disposizione della comunità internet. Il nome Asterisk proviene dal mondo Unix e Dos dove con il carattere jolly (*) si rappresenta ogni tipo di file. La scelta del nome non è casuale in quanto asterisk è stato progettato per interfacciare qualsiasi tipo di apparato telefonico standard (sia hardware che software) con qualsiasi applicazione telefonica standard in modo semplice e consistente. Trattandosi di un progetto Open Source Asterisk è rilasciato sotto licenza GNU GPL ed è completamente distribuibile e modificabile da chiunque. Ciò ha comportato lo sviluppo di moltissime soluzioni e un continuo miglioramento e attualizzazione del progetto grazie a centinaia di sviluppatori in tutto il mondo. A differenza di altri prodotti commerciali infatti è reso possibile a chiunque di applicare delle modifiche al codice sorgente e di renderle pubbliche all’interno della CVS( Concurrent Versions System). Chiaramente tali patch vengono prima testate da più sviluppatori e inserite nella CVS solo se sono di interesse generale. 37 L’ASTERISK Una delle applicazioni chiave offerte dai sistemi asterisk based è quella di riuscire ad integrarsi agevolmente con piattaforme telefoniche esistenti sia per la realizzazione di servizi altrimenti impensabili sia molto semplicemente per collegare fra loro diversi centralini ,situati in diverse sedi ,con enorme flessibilità di programmazione. Il sistema operativo di riferimento dell’asterisk è linux in quanto questo può mantenere la compatibilità con diverse architetture hardware e ne può favorire la diffusione poiché è rilasciato sotto licenza GNU GPL quindi completamente disponibile. Sfruttando le caratteristiche del sistema operativo su cui è installato, asterisk supporta comunicazioni VoIP su TCP/IP utilizzando le connessioni ethernet, SLIP o PPP presenti oppure su FRAME RELAY. Offre inoltre il supporto della tecnologia TDM senza ritardi o disturbi, su schede non intelligenti (non implementano soluzioni hardware per la comunicazione o la connessione dei flussi VoIP). Queste schede sono molte economiche in quanto tutta la potenza di calcolo richiesta dall’applicazione viene demandata alla macchina su cui sono installate. Tutto ciò è stato reso possibile dal grande sviluppo ,in termini di potenza di calcolo , che le CPU hanno avuto negli ultimi anni(alcuni anni fa sarebbe stato delittuoso solo pensarlo). Il core di asterisk è completamente progettato in C sia per garantire la compilazione sul maggior numero di piattaforme disponibili sia per la grande ottimizzazione del codice compilato e le conseguenti performance ottimali. Il linguaggio C è inoltre di gran lunga il più conosciuto dagli sviluppatori Open Source e anche il più diffuso in quanto esistono attualmente compilatori e tool professionali completamente gratuiti. 3.2 ARCHITETTURA Il progetto di asterisk, come centralino VoIP in grado di interfacciarsi con qualsiasi dispositivo hardware o software , è stato costruito basandosi su un’architettura modulare con parti ben definite ed indipendenti. Una struttura di questo tipo permette infatti di aggiungere o eliminare funzionalità senza compromettere la stabilità del sistema. Conseguentemente per costruire un sistema asterisk stabile non è necessario caricare tutti i moduli ,le applicazioni e i canali disponibili che nella maggior parte dei casi appesantiscono il sistema essendo superflui per la particolare applicazione. Per garantire prestazioni e 38 L’ASTERISK stabilità del sistema esiste ,come è logico pensare,un componente core sempre presente che gestisce le funzionalità di base comuni. Le funzionalità core,come mostrato in Fig. 3.1 vengono implementate nei seguenti moduli: Gestore delle chiamate(PBX Switching Core): a prescindere dal tipo di canale deve essere possibile instaurare una comunicazione tra le “due parti” di una chiamata. Tale funzionalità viene gestita dal core di Asterisk che astrae dalla gestione dei protocolli per la comunicazione con i vari dispositivi ma gestisce invece solo i flussi di dati per garantire la comunicazione. Gestore applicazioni: una volta aperto un canale di comunicazione è possibile metterlo in collegamento con un altro canale o in alternativa lanciare un’applicazione che agisce su di esso. Tali applicazioni possono spaziare dalla voicemail al demone per la comunicazione PPTP tra un modem remoto e il computer su cui sta girando Asterisk. Traduttore di codec: al core di Asterisk spetta anche il compito di effettuare la traduzione di differenti codec audio. La gestione dei codec da parte di Asterisk è infatti centralizzata. Per fare ciò il core di Asterisk sfrutta moduli esterni ognuno in grado di gestire una codifica differente. Gestore dell'input/output e della schedulazione: allo stesso tempo tutte le varie operazioni che il centralino svolge devono essere sincronizzate e schedulate in maniera efficiente sotto qualsiasi condizione di carico. Per interagire con il core di Asterisk esistono quattro diverse categorie di moduli che formano delle API (Application Programming interface) ben definite. Queste categorie di moduli permettono al core di ignorare dettagli come i codec utilizzati e il tipo di tecnologia da cui il chiamante si connette. Dynamic Module Loader: la gestione dei moduli è dinamica e quindi i moduli possono essere caricati a seconda delle esigenze e delle configurazioni. I moduli comunicano con il core di Asterisk mediante interfacce di programmazione API API dei canali: gestiscono la tecnologia su cui sta avvenendo la chiamata a seconda del suo tipo: ISDN, E1, T1, VoIP o altra tecnologia. 39 L’ASTERISK API delle applicazioni: API a cui tutti i moduli che gestiscono un applicazione devono attenersi. Ciascuno di questi moduli viene lanciato dal gestore delle applicazioni. API dei codec: per gestire ogni singolo codec deve essere creato un modulo che si adatta a questa interfaccia. In questo modo il gestore dei codec può codificare e decodificare diversi formati audio per mettere in comunicazione differenti canali di trasmissione. API per i formati di file: gestiscono la lettura e la scrittura di numerosi formati di file sul file system FIGURA 3.1-Architettura interna di Asterisk Vediamo ora come interagiscono tra loro i diversi moduli nelle operazioni: All’avvio, il Dinamic Module Loader carica e inizializza i driver per ognuno dei canali, il formato dei file supportati, i record con i dettagli di chiamata di ogni back – end, codec, applicazioni e si collega con le API interne appropriate. In seguito il PBX Switching Core inizia ad accettare le chiamate dalle interfacce e le tratta in accordo con il dialplan, utilizzando l’Application Launcher per 40 L’ASTERISK chiamare i telefoni, connettersi alla voicemail, effettuare chiamate esterne ecc. Il nucleo ha anche uno Scheduler and I/O Manager standard a disposizione delle applicazioni e dei driver. Il Codec Translator permette a canali che utilizzano codec diversi di parlare tra loro. La maggiore utilità e flessibilità di Asterisk deriva dalle applicazioni, dai codec e dai channel driver di cui sono dotate le varie interfacce di programmazione. L’utilizzo di una struttura a due livelli consente agli sviluppatori di aggiungere funzionalità , semplicemente creando o modificando moduli che si adattano ad una delle quattro API. Ciò permette ad asterisk di comportarsi come un gateway per qualsiasi nuova tecnologia di trasmissione dati,di fruire delle gestione di un codec per tutte le tecnologie che lo usano o di sfruttare un’applicazione per ogni dispositivo ad esso collegato . Asterisk agisce come una soluzione MIDDLEWARE tra le tecnologie telefoniche(es. protocolli ISDN,SIP,H.323,linee analogiche etc…) e le applicazioni telefoniche,video o altro (es,voicemail,IVR,music hold etc..). La possibilità di usare moduli caricati dinamicamente permette ad esempio sia di gestire una comunicazione VoIP con codec molto compressi sia di mantenere la massima qualità per canali che utilizzano codec meno complessi. I moduli che gestiscono i vari tipi di canali e i moduli che configurano il funzionamento di alcune applicazioni hanno bisogno di parametri che vengono inseriti nei rispettivi file di configurazione. Per ogni tipo di canale infatti devono essere fissati parametri legati al tipo di protocollo utilizzato e ciò comporta che per ogni protocollo VoIP esista un differente file di configurazione nel quale si specificano per es. l’indirizzo IP e porta d’ascolto,gli utenti che si possono collegare al sistema e i parametri sulla gestione del traffico. Per altri moduli come quelli che gestiscono schede hardware i parametri riguardano la segnalazione che la scheda utilizza. Comune a tutti i file di configurazione è l’indicazione di come questi interagiscono con il dialplan (meccanismo di instradamento e commutazione) o più semplicemente come una chiamata in ingresso potrà interagire con la struttura del centralino. Anche alcune applicazioni hanno bisogno di essere configurate quando il loro funzionamento è 41 L’ASTERISK sufficientemente articolato da non poter essere determinato da semplice parametri inseriti al momento della chiamata dell’applicazione stessa. Così mentre applicazioni come Dial (applicazione che permette l’esecuzione della chiamata) non necessitano di un file di configurazione altre come MusicOnHold (permette l’ascolto della musica d’attesa a file Mp3) richiedono dei parametri. I moduli per la gestione dei dispositivi hardware vengono caricati staticamente o dinamicamente nel kernel . Utilizzando questi driver, un modulo che impiega le API del canali di Asterisk, riesce a gestire il dispositivo hardware e a metterlo in comunicazione con il gestore delle chiamate(il centralino). Per tutte le schede supportate esiste quindi un driver a cui corrisponde un modulo in grado di comunicare con il core di Asterisk. 3.3 DISPOSITIVI HARDWARE Le schede telefoniche disponibili per Asterisk permettono di interfacciarlo alle tecnologia TDM sia essa BRI,PRI o RTB. Dove è stato possibile, Asterisk si è basato sul supporto nativo di Linux per la telefonia in modo da utilizzare direttamente questi dispositivi. Sono supportati infatti: Dispositivi che supportano l'interfaccia ISDN4Linux Dispositivi ISDN supportanti Common ISDN Interface tramite codice rilasciato sotto GPL ma non incluso nella CVS di Asterisk Apparati con l'interfaccia Linux Telephony che supporta dispositivi per singole linee analogiche PSTN. La Digium si è invece dedicata alla realizzazione di schede per il supporto delle tecnologie Primary RateInterface (PRI) E1 e T1 che hanno aumentato considerevolmente l'interesse della comunità per il progetto. Queste due tecnologie (E1/T1) permettono la gestione rispettivamente di 30 e 24 canali telefonici. Tali linee sono presenti in tutto il mondo è in Italia vengono chiamate flussi primari. Lo standard E1 utilizza una banda di 2.048 MBps e si basa sulle raccomandazioni G.704 e G.732. Per la segnalazione delle chiamate a livello di rete viene utilizzato Q.931 come in 42 L’ASTERISK H.323 che gestisce comandi come CONNECT, CONNECT ACKNOWLEDGE e CALLPROCEDING in grado di stabilire lo stato della chiamata. A livello datalink viene invece utilizzato Q.921 che è stato realizzato basandosi su HDLC. A livello fisico, dove la linea fisica lo consente, un flusso primario può essere gestito da un singolo doppino. Per permettere l’integrazione con le linee analogiche tradizionali sono stati progettati altri due tipi di schede(di solito si trovano integrate nella scheda TDM): FXS (Foreign eXchange Subscriber): è l’interfaccia analogica dal punto di vista della rete, per intenderci la presa dove si collega un telefono analogico, in altre parole una FXS “punta” all’utente) FXO (Foreign eXchange Office):è l’interfaccia analogica dal punto di vista del telefono, per intenderci una FXO “punta” verso la centrale telefonica,per la comunicazione con linee urbane o telefoni Tutte le schede realizzate da Digium supportano l'interfaccia Zaptel che sfrutta, come scritto precedentemente, la potenza di calcolo del computer per emulare molte delle funzionalità DSP non presenti sulla scheda. L'architettura risultante è pseudoTDM e richiede meno capacità di elaborazione sulla scheda stessa. E' possibile inoltre implementare echo canceler, controller HDLC ed altro direttamente via software riducendo di molto il tempo di progettazione di una nuova scheda e consentendo di distribuire aggiornamenti e migliorie per la gestione della stessa anche a distanza nel tempo. FIGURA 3.2-TDM400P scheda per asterisk presente nel nostro server 43 L’ASTERISK Le schede sono progettate in modo da supportare i seguenti protocolli e raccomandazioni per la comunicazione VoIP: SIP H.323 MGCP: Media Gateway Control Protocol: un protocollo che gestisce la segnalazione e il controllo di connessioni VoIP (utilizzabile con Cisco Call Manager) SCCP: Skinny Cisco Control Protocol: standard proprietario Cisco per il supporto dei servizi sui propri telefoni I primi due protocolli sono stati illustrati in maniere approfondita nel precedente capitolo ,gli ultimi due non vengono utilizzati molto se non in alcune soluzioni proprietarie mentre lo IAX è un nuovo protocollo nato proprio in ambito asterisk e verrà presentato nel prossimo paragrafo. 3.4 LO IAX IAX è un acronimo che sta per Inter Asterisk eXchange. È il protocollo de facto utilizzato da Asterisk. IAX ora è comunemente indicato come IAX2, la seconda versione del protocollo IAX, in quanto il protocollo originale è obsoleto. Può essere usato con ogni tipo di media stream, incluso i video, ma è rivolto principalmente al controllo delle chiamate vocali su rete IP. Il principale obiettivo del protocollo è 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 dello 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 (cioè l’intestazione aggiuntiva presente nei pacchetti, per poterli adeguatamente trasmettere) in particolare riguardo i flussi voce. 44 L’ASTERISK Il protocollo è di tipo peer-to-peer sia per quanto riguarda la segnalazione che per i media stream,ciò significa che piuttosto che esaminare comandi in formato testo, IAX utilizza solo dati binari, essendo questo il modo naturale con cui le macchine comunicano tra loro. Tutte le segnalazioni hanno luogo nel livello data link (Toni doppi e multifrequenziali sono spesso trasmessi attraverso lo stesso percorso con tutte le altre segnalazioni in modo da poterli ritrasmettere in modo affidabile all’altro terminale). Il trasporto delle informazioni non utilizza il protocollo RTP: il progetto base di IAX prevede di fare il multiplexing della segnalazione e dei media stream attraverso una singola associazione UDP tra due host. A differenza di altri protocolli, la cui architettura prevede la separazione tra i componenti di controllo e quelli relativi ai media stream, qui, nella struttura IAX, viene utilizzata la stessa porta UDP, la 4569. Dunque, come abbiamo già detto, IAX è un protocollo binario: la ragione per cui si scelse questa strada è legata principalmente all’efficienza in banda, in particolare per le chiamate vocali (basti pensare che con IAX è possibile triplicare il numero di chiamate che si possono effettuare rispetto ad altri sistemi più complessi, come H.323 o SIP:per esempio, utilizzando IAX e il codec G.729 è possibile effettuare almeno 103 chiamate con una banda di 1 Mbit). Altri benefici sono la robustezza contro gli errori da ‘buffer overrun’, la risoluzione della maggior parte dei problemi che si possono presentare nell'integrazione di piattaforme VoIP con firewalls e routers NAT e una implementazione molto compatta. La figura 3.3 illustra il flusso basilare di messaggi tra due host allo scopo di dar vita ad una chiamata. L’host A inizia la chiamata inviando un messaggio NEW all’host B, che risponde con un messaggio ACCEPT, seguito da un ACK, cioè un riscontro, da A a B. Segue un messaggio RINGING, con cui B informa A che il suo telefono sta squillando. Anche qui c’è un ACK inviato da A a B, come conferma della ricezione del messaggio RINGING. Infine, quando la cornetta è sollevata, l’host B invia un messaggio di risposta (ANSWER) ad A, che conferma con un ACK. A questo punto una comunicazione full-duplex (cioè nelle due direzioni) è instaurata tra A e B. 45 L’ASTERISK FIGURA 3.3-semplice chiamata tra due host In IAX, la più piccola unità di comunicazione è il frame e ne esistono di due tipi: I Full Frame possono essere usati per inviare segnalazioni, e informazioni audio e video attendibili (dunque è previsto l’invio di ack). Ci sono due tipi di informazioni di controllo che sono trasmesse attraverso i full frame: i Control Frame (si occupano della sessione di controllo, come per esempio il controllo dei dispositivi connessi ai terminali IAX) e gli IAX Control Frames (si occupano della gestione dei terminali). I Mini Frame sono usati per trasportare media stream con un minimo overhead: hanno un header di soli 4 byte per ciascun pacchetto (1 bit di tipo frame, 15 per il numero di origine chiamata, 16 di timestamp) e in questo modo aumenta il numero di chiamate che possono essere gestite a parità di banda. Va notato che le Mini Frame sono trasmesse in rete in modo 'unreliable', ossia non si prevede un ack di una Mini Frame inviata da parte del nodo ricevente. Intervallate alle Mini Frame vengono trasmesse le già citate Full Frame, che sono di dimensioni maggiori ma vengono 'confermate' del nodo ricevente. Ciò permette anche un meccanismo di controllo dello stato delle connessioni. Se uno dei due nodi dopo un certo periodo di tempo (15 46 L’ASTERISK secondi) non riceve più Full Frame dall'altro, gliene invia una di 'ping' per verificare che sia attivo. Dopo un certo lasso di tempo ne invia ancora e dopo un predeterminato numero di tentativi, presume che l'altro nodo si sia scollegato e chiude la connessione UDP. Sono previste anche funzioni di trunking di più canali nella stessa comunicazione: IAX unisce i dati di più canali in un unico insieme di pacchetti, riducendo non solo il numero degli header, ma anche quello dei pacchetti. Questa funzione, particolarmente importante nelle reti wireless è interessante se si vuole affiancare alla chiamata VoIP uno scambio di media stream diversi, come ad esempio il video. Un Full Frame non ha limiti sul tipo di informazioni, quindi può trasmettere segnalazioni oppure altri dati. Ciò implica che può essere utilizzato per una trasmissione affidabile dei dati come nel caso dell'invio di un file. In tale situazione l'utilizzo di Mini Frame sarebbe poco consigliato perché non fornirebbe garanzie di ricezione. I vari campi presenti in un Full Frame sono visibili nello schema seguente. FIGURA 3.4-Pacchetto IAX Full Frame Il bit F sarà ad 1 per specificare che si tratta di un Full Frame.Segue l'id della chiamata dell'host inviante il frame. Il bit R viene impostato quando il frame è ritrasmesso. La ritrasmissione avviene quando la conferma non è stata ricevuta entro il timeout. Basandosi sul protocollo di trasporto UDP infatti la trasmissione non è assicurata e quindi può essere necessario inoltrare più volte ciascun messaggio. Viene inviato anche l'id della chiamata per il ricevente e il TimeStamp completo. E' necessario inoltre specificare il numero del frame trasmesso. Il parametro si chiama Oseqno. Ogni frame ha infatti un numero di sequenza che parte da 0 e cresce ad ogni invio. 47 L’ASTERISK Il ISeqno ha lo stesso significato, ma viene utilizzato per l'ordinamento dei frame in arrivo piuttosto che quelli in uscita. In particolare con ISeqno l'host specifica il frame che si aspetta di ricevere. Il meccanismo di scambio dei Full Frame infatti prevede sempre la ricezione di una conferma. Il bit C determina come interpretare il valore SubClass. Se impostato ad 1 Subclass è interpretato come potenza di 2, in caso contrario come un integer di 7 bit senza segno. E' inoltre possibile specificare il tipo di frame che viene inviato inserendo uno dei seguenti valori nel campo Frame Type: FIGURA 3.5-Valori assumibili dal campo Frame Type Quando un FullFrame è utilizzato per trasferire DTMF, il campo Subclass contiene il DTMF effettivamente trasferito. Nel caso siano trasferiti invece dati voce, il campo Subclass conterrà il tipo di codec utilizzato a cui è associato un altro codice. I codec audio disponibili e riconosciuti sono tutti quelli supportati da Asterisk. Nel caso vengano trasferiti dati video il campo SubClass viene invece impostato diversamente. 48 L’ASTERISK I codec disponibili per il video e i relativi codici binari sono: FIGURA 3.6-Codifiche video Oltre a trasmettere Dati, i Full Frame vengono utilizzati per il controllo delle chiamate. Per gestire la segnalazione dei vari eventi ai terminali e cioè lo stato di occupato, risposto, congestione, ringing etc. vengono utilizzati i Control Frames. Tali frame gestiscono gli eventi tra i due partecipanti alla chiamata e non riguardano il protocollo di trasmissione dei frame, ma la condizione in cui si trova il terminale. Tali stati vengono comunicati ai dispositivi IAX compatibili. FIGURA 3.7-valori Control Frame Altri utilizzi dei full frame sono per la trasmissione di immagini e di codice html che rende IAX un protocollo utilizzabile per la trasmissione di contenuti di vario genere. Infine per gestire il protocollo vero e proprio è presente un'altra classe di frame di controllo. 49 L’ASTERISK Essi gestiscono rispettivamente: l'inizio e la fine delle sessioni (NEW, ACK, REJECT, ACCEPT); la registrazione (REGREQ, REGAUTH, REGACK, REGREJ, REGREL,LAGRQ, LAGRP); richiesta di informazioni su estensioni (DPREQ, DPREP) gestione invio e ricezione (TXREQ, TXCNT, TXACC, TXREADY,TXREL, TXREJ) ed altri per la gestione delle mail box, la gestione dei flussi audio e video, paging e trasferimenti di chiamata. Il protocollo IAX prevede che un qualsiasi client per collegarsi ad un peer debba fornire delle credenziali che saranno verificate dal peer prima che questo autorizzi un qualsiasi tipo di comunicazione. Tali credenziali sono composte da login e password. E' possibile inoltre utilizzare dei parametri per limitare l'accesso di un client solo in base a particolari indirizzi IP. La modalità di autenticazione può essere impostata per ogni singolo client o peer: Plaintext: la password è inviata non criptata. Se il pacchetto di registrazione viene intercettato, login e password possono essere riutilizzate. Md5: la password viene criptata utilizzando md5 in invio, il per IAX che riceve una richiesta deve avere la password in chiaro. In questo modo il peer può calcolare la firma e confrontarla con la password inviata dal client. RSA: vengono create due chiavi, una pubblica ed una privata. Quella privata verrà utilizzata dal client per firmare l'autenticazione verso il server, quella pubblica rimarrà sul server (peer). IAX è stato ingegnerizzato avendo come riferimento la caratteristica di software “Open”, quindi cercando di fornire le basi per una soluzione facilmente adattabile al Voice Over IP in ogni tipo di ambiente ivi compresa la Big Internet. La scelta,al momento della sua progettazione, fu quindi quella di creare un livello di astrazione che è rappresentato dalla gestione delle chiamate (dialplan) di Asterisk, in cui tutti i canali di comunicazione confluissero. 50 L’ASTERISK 3.5 GESTIONE DELLE CHIAMATE Con asterisk, anche uno strumento considerato statico come un centralino diventa dinamico al pari di una pagina web in quanto integrare nuove funzionalità e applicazioni a quelle già disponibili risulta estremamente facile. Grazie all’architettura modulare infatti la gestione delle chiamate risulta completamente indipendente dal tipo di canale su cui arriva. In questo modo i particolari non vengono considerati a questo livello e il dialplan (sistema di instradamento delle chiamate) risulta semplice e facilmente configurabile. L’unico istante in cui è importante conoscere su quale tecnologia si vuole dirottare una chiamata (terminale H.323,telefono IAX o altro ) è al momento del lancio dell’applicazione Dial . La gestione delle chiamate può avvenire in diversi modi che sono: Utilizzo delle estensioni di Asterisk Creazione di nuove applicazioni in codice C Utilizzo dell’Asterisk Gateway Interface Le estensioni in asterisk ,per quanto riguarda il punto uno, sono contenute nel file extensions.conf ,generalmente posto nella directory /etc/asterisk,che contiene stringhe simili alle seguenti: exten => 10,1,Answer exten => 10,2,PlayBack,ciao la prima riga apre il canale (risponde) e poi grazie alla seconda viene riprodotto sullo stesso canale il file ciao (a seconda della lingua di default sul canale, il messaggio verrà cercato in cartelle differenti). E' possibile quindi includere questa estensione in un contesto: [default] exten => 10,1,Answer exten => 10,2,PlayBack,ciao 51 L’ASTERISK un contesto può essere definito come il punto di partenza della comunicazione su ogni canale. In questo esempio se viene sollevato il telefono e digitato il numero 10 verrà riprodotto il messaggio ciao,altrimenti se si inseriscono numeri diversi verrà ritornato un messaggio/tono di errore a seconda del dispositivo da cui si sta effettuando la chiamata. I contesti possono essere inclusi in altri contesti attraverso l’istruzione include es: [chiamate_da_esterno] include =>default il contesto default in questo caso è incluso nel contesto chiamate_da_esterno. Normalmente le applicazioni associate alle extension sono processate in ordine secondo la priorità stabilita nel parametro: exten => estensione,priorità,Applicazione Le priorità sono numerate ,partendo da 1 , o in ordine progressivo o attraverso priorità non numerate’, che si indicano con ‘n’ , che corrispondono alla priorità dell’istruzione precedente + 1 . La seconda scelta di solito è più opportuna in quanto permette di inserire o togliere un’azione senza dovere modificare l’intera numerazione. Tra le applicazioni esistono salti incondizionati o condizionati ad altre estensioni. Il file delle estensioni utilizza inoltre le variabili di Asterisk che permettono di accedere rapidamente a dettagli della chiamata, come numero chiamante, numero chiamato, id chiamante, id chiamato, ora chiamata , è anche possibile definirne di ulteriori . Oltre a leggere tali variabili è anche possibile modificarle gestendo così l'interazione tra l'utente e il centralino. E' naturalmente possibile compiere operazioni con queste variabili e utilizzarle all'interno della stessa chiamata per effettuare le opportune scelte. Nel file di configurazione, per ogni tipo di tecnologia disponibile su Asterisk, è possibile definire il contesto in cui una nuova chiamata sarà inviata. Così, per esempio, se definisco che per i canali SIP le chiamate debbano finire nel contesto users, qualsiasi chiamata SIP arriverà in quel contesto. Se l'utente digita la cifra 50 sul telefono e cioè la URL sip:[email protected] il centralino cercherà nel contesto users l'estensione 50 e lancerà l'applicazione corrispondente definita in exten =>. Quando un’applicazione viene lanciata su un canale di Asterisk essa acquisisce il completo controllo del flusso. In casi particolari è possibile, per lo sviluppatore, realizzare da zero 52 L’ASTERISK un’applicazione che svolga il compito prescelto. L'unico requisito è che il modulo creato rispetti le API predefinite. Un’altra possibilità di gestione delle chiamate consente di sfruttare in maniera avanzata un canale di Asterisk eseguendo in modalità interattiva dei comandi su di esso. L'interfaccia detta AGI, consente di eseguire un set limitato di comandi nativi e tutti quelli disponibili in Asterisk attraverso un programma che viene lanciato dal centralino. Il programma esterno può essere realizzato in un qualsiasi linguaggio di programmazione in grado di comunicare su standard input e standard output su cui è pronto a comunicare il centralino. Una volta lanciata un’applicazione sul centralino, il programma AGI compatibile potrà ricevere il risultato della stessa appena questa sarà eseguita,e applicare le elaborazioni di propria competenza. Ad esempio, nel caso di una chiamata, il centralino può inviare ,al termine di questa, un codice che specifica se il telefono era occupato o se la telefonata ha avuto esito positivo. E' evidente come si possano utilizzare le potenzialità del linguaggio di scripting o programmazione per effettuare collegamenti ad un database ed eseguire altre applicazioni in background (invio di posta elettronica o di un fax). Fino ad ora in questo lavoro di tesi è stata descritta l’architettura VoIP . Nei prossimi capitoli sarà analizzato lo scenario,le specifiche di progetto e la realizzazione(presso la Jnet2000) di una rete VoIP multisede interfacciata con la comune linea PSTN. Si vedranno in maniera dettagliata i vari passi del lavoro da me svolto, saranno illustrate di volta in volta tutta le varie istruzioni e costruzioni tipiche di asterisk delle quali non si è fatta fin qui menzione. 53 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP CAPITOLO 4 PROGETTAZIONE DELLA RETE VoIP PRESSO LA Jnet2000 4.1 INTRODUZIONE Il lavoro assegnatomi dal prof. Roberto Cusani in collaborazione con la Jnet2000,una Società per Azioni operante nel mercato dell'ITC dei Servizi Informatici, è consistito nella progettazione e realizzazione di una rete VoIP che connettesse fra di loro le varie sedi dell’azienda. Nello specifico le Sedi dell’azienda sono tre: La sede principale ubicata in via Gela ,59 Roma La sede di Terni Il CED(Centro Elaborazione Dati),dove l’azienda ha i server e le macchine necessarie per l’espletamento dei servizi che offre. Lo strumento per la realizzazione di tale rete è stato lasciato a mia completa discrezione . In un primo momento, ero orientato verso l‘integrazione di un centralino classico con il servizio VoIP offerto dagli operatori tradizionali. Dopo un’analisi delle problematiche e una approfondita ricerca , mi sono reso conto che esisteva un sistema molto più semplice da realizzare e con costi molto contenuti : l’ASTERISK” . Nello specifico si tratta di un progetto open source in grado di fornire tutti gli strumenti necessari per la realizzazione del mio lavoro . L’unica spesa da sostenere era l’acquisto di una scheda dedicata costruita dalla DIGIUM per sfruttare appieno le potenzialità messe a disposizione da ASTERISK. 54 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP Le specifiche di progetto assegnatemi si disponevano su due piani distinti: 1. progetto di una rete VoIP 2. realizzazione Questo perché rispetto all’idea progettuale non si avevano ed ancora non si hanno a disposizione tutte le risorse necessarie. 4.2 PROGETTAZIONE Lo scenario sul quale si doveva operare e ben presentato dalla Fig. 4.1 FIGURA 4.1-ambiente di progetto 55 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP Il progetto consisteva nel creare una rete Voip intra e inter-aziendale che avesse le seguenti caratteristiche: tutte le chiamate entranti devono essere gestite da un server situato nel C.E.D.(centro elaborazioni dati che si trova presso l’EUR) perché unica sede per la quale è prevista la connessione ad internet senza interruzioni(nella sede di Roma la sera vengono spenti tutti i terminali). Il server ha il compito di indirizzare le chiamate verso la sede destinataria o alla segreteria telefonica al di fuori degli orari di ufficio L’instradamento delle chiamate viene gestito da una voce registrata che da al chiamante tutte le possibilità di scelta le chiamate entranti nella sede di Roma vengono anch’esse gestite da una voce elettronica che le instraderà alla segretaria per l’ambito amministrativo e commerciale e nella sala dei consulenti per quanto riguarda l’ambito tecnico (la stessa cosa avviene nella sede di Terni) La segretaria,ma più in generale ogni telefono interno al server di Roma , deve essere in grado di trasferire la chiamata verso un altro utente interno sia che esso si trovi a Roma sia che esso si trovi a Terni Le chiamate tra utenti del server di Roma e quello di Terni vengono trattate (attraverso un trunk) come se si trovassero sotto lo stesso PBX. Le chiamate in uscita vengono gestite a seconda della destinazione: Le chiamate verso la rete fissa vengono inviate tramite PSTN in quanto l’azienda ha un contratto con un operatore tradizionale che non prevede il pagamento verso i numeri fissi Le chiamate verso i cellulari vengono inviate attraverso l’operatore VoIP che garantisce prezzi più bassi rispetto all’ operatore tradizionale Le chiamate verso numeri interni alla rete dell’operatore VoIP,come logico, vengono inviate allo stesso in quanto gratis Per realizzare quest’infrastruttura la prima cosa a cui ho dovuto pensare è stata quale protocollo usare per creare i trunk tra le varie sedi. Asterisk,come già detto,mi dava 56 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP l’opportunità di scegliere tra tutti i protocolli maggiormente usati in questo momento in ambito VoIP con l’aggiunta dello IAX. La scelta è ricaduta nello IAX che rispetto agli altri due protocolli presenta i seguenti vantaggi: Utilizzo di banda:utilizzo della banda in SIP e H.323 non è ottimizzato. SIP utilizza una codifica ascii e conseguentemente presenta sempre un overhead variabile a seconda della lunghezza del messaggio. L’uso dell’ascii ha il vantaggio di rendere il protocollo facilmente modificabile ma anche poco ottimizzato. L’H.323 utilizza troppe porte per allocare la banda in maniera ottimale. In questo caso l’overhead introdotto negli header IP è costante. L’utilizzo inoltre di RTP per la trasmissione dei media sia in H.323 che in SIP aggiunge ulteriore overhead . Per questi motivi in IAX è stato scelto di non delegare nulla a protocolli esistenti e l’header è stato definito in modo che sia sufficiente ad identificare il tipo di messaggio che stiamo trasmettendo (dati o segnalazione),identificare univocamente la chiamata tra le due parti della comunicazione e i parametri aggiuntivi relativi al tipo di frame inviato. In questo modo il frame avrà una struttura a campi fissa . IAX inoltre,come detto nel capitolo precedente,trasporta i frame contenenti i media insieme a quelli di controllo specificando per ogni frame il genere di informazioni trasportate. Trasparenza rispetto al NAT(Network Address Traslation): come si è già visto H.323 e SIP utilizzano più di due porte per una comunicazione bidirezionale. Ciò non comporta problemi all’interno di un rete locale(ambiente in cui per es H.323 è stato creato) dove possono essere tranquillamente utilizzate le 5 porte richieste dal H.323 e le 4 richieste dal SIP . Purtroppo questo non si adatta bene alla nostra rete dove sono presenti Firewall e NAT per dare l’accesso ad Internet agli host con indirizzi privati. Dal punto di vista della manutenzione il deployment di un sistema telefonico H.323 o SIP comporta modifiche alle regole dell’Firewall. Soprattutto l’utilizzo di porte variabili per i protocolli RTP e RTCP rende molto difficile mantenere intatta la sicurezza della rete senza andare ad ispezionare il contenuto del pacchetto. La presenza del NAT è in sostanza una della fonti primarie di problematiche per la comunicazione VoIP . Gli sviluppatori di 57 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP Asterisk, al fine di creare un protocollo VoIP NAT friendly, funzionante in tutte le configurazioni NAT esistenti ,hanno deciso di non inserire alcun riferimento a elementi di livelli OSI inferiori al livello di applicazione. Questo comporta che IAX è stato pensato per lavorare senza informazioni sui livelli sottostanti, in particolare il livello di trasporto e network. Nell’ header di un frame IAX non figurano quindi informazioni relative all’indirizzo IP degli host coinvolti o alla porta su cui sta funzionando il servizio ma vengono utilizzati degli id univoci . Visto inoltre che non viene separata la segnalazione dalla trasmissione dati il protocollo si riduce ad una singola porta di comunicazione. In definitiva si può affermare che ,essendo indipendente da TCP/IP, IAX può essere utilizzato su qualsiasi tipo di protocollo di trasporto e tipologia di rete. Il protocollo IAX quindi consente di interconnettere agevolmente piattaforme Asterisk ,come le nostre, disposte su reti differenti. Per quanto riguarda il firewall il problema viene risolto facilmente adottando una policy su di esso tramite l’apertura di un'unica porta UDP utilizzata dallo IAX. Supporto nativo del dialplan Asterisk: IAX ,essendo nato per fornire ad Asterisk un supporto per utilizzare reti dati per una comunicazione il più affidabile possibile, risulta il più facile e conveniente per realizzare un trunk tra due centralini Asterisk. Come spiegato nel capitolo precedente, per gestire le chiamate entranti è stata prevista la creazione di un dialplan formato da estensioni e contesti. A differenza degli altri protocolli VoIP, il canale IAX prevede la possibilità di inviare nella stringa di chiamata anche il contesto in cui si desidera far arrivare la chiamata stessa. Ogni client IAX infatti può accedere ad un numero variabile di contesti che può specificare al momento della chiamata. Supporto della lingua: a differenza degli altri canali gestiti da Asterisk,compresi SIP e H.323, che non prevedono le possibilità di comunicare la lingua ,in IAX è possibile specificare tale proprietà(specifica cioè la lingua che si sta usando per l’asterisk). Asterisk utilizza questa segnalazione per scegliere quali file sonori riprodurre sul canale aperto o in alternativa per modificare il corso della chiamata. 58 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP Per quanto riguarda il protocollo per il trunk verso l’operatore VoIP la scelta è stata differente. L’operatore mi forniva la possibilità di effettuare il trunk utilizzando sia SIP che lo IAX. La scelta sul SIP è stata determinata da due ragioni fondamentali: Il SIP è un protocollo standardizzato e comunemente utilizzato da tutti gli operatori VoIP. Ciò comporta che nel caso in cui si decidesse di cambiare operatore l’unica cosa da fare sarebbe quella di cambiare dei parametri di configurazione. Lo IAX è utilizzato invece solo da quegli operatori che hanno una rete gestita tramite Asterisk (esempio Kebu utilizzato dall’azienda) e quindi il cambio di operatore potrebbe richiedere un riconfigurazione totale del sistema. Lo IAX poteva essere utilizzato solo con il pagamento all’operatore di una quota in più rispetto al servizio SIP. L’utilizzo del SIP prevedeva lo sblocco nel firewall del CED di un numero elevato di porte UDP(la 5060 per la connessione SIP e le porte nel range 10000:20000 per i messaggi RTP e RCTP) e questo poteva compromettere il sistema. Per evitare tutto ciò ho dovuto agire sulla macchina server di asterisk cercando di proteggerla con password complicate alfanumeriche e non permettendo l’accesso diretto tramite root(utente amministratore in linux). La scelta del protocollo VoIP da utilizzare per la connessione e la registrazioni degli apparati telefonici dell’azienda (telefoni,adattatori VoIP,softphone etc etc) si è indirizzata quasi obbligatoriamente verso il SIP per due ragioni fondamentali: Tutti i telefoni ed adattatori VoIP messi a disposizione dall’azienda supportavano solo il protocollo SIP. La quasi totalità di telefoni VoIP in commercio supporta il SIP mentre per utilizzare lo IAX avremmo dovuto comprare dei telefoni esclusivamente dalla Digium , altamente costosi e privi di concorrenza. L’architettura di base del progetto è mostrato nella figura seguente dove al livello CED sono stati inseriti tre firewall per rendere la figura esplicativa ma logicamente in realtà è lo stesso che si interfaccia con i vari trunk e relativi protocolli. 59 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP FIGURA 4.2-Scenario rete Jnet2000 Per far si che due server possano autenticarsi ,devono essere distribuiti nell’uno i parametri(nome utente ,password) dell’altro e viceversa. La distribuzione viene fatta offline nel momento della programmazione dell’Asterisk. Il problema nasce quando i due server cercano di stabilire il trunk e quindi si scambiano vicendevolmente i parametri. Le modalità con cui possono inviare questi dati in rete,come già accennato, sono tre: Plaintext Md5 RSA La scelta in questo caso si è ristretta al Md5 e RSA perché mandare in chiaro su un rete internet dati sensibili come utente e password sarebbe quantomeno da sconsiderati. L'MD5 (acronimo di Message Digest algorithm 5) è un algoritmo per la crittografia dei dati a senso unico realizzato da Ronald Rivest nel 1991. Questo tipo di codifica prende in input una 60 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP stringa di lunghezza arbitraria e ne produce in output un'altra a 128 bit (ovvero con lunghezza fissa di 32 valori esadecimali, indipendentemente dalla stringa di input) che può essere usata per calcolare la firma digitale dell'input. La codifica avviene molto velocemente e si presuppone che l'output (noto anche come "MD5 Checksum" o "MD5 Hash") restituito sia univoco (ovvero si ritiene che sia impossibile, o meglio, che sia altamente improbabile ottenere con due diverse stringhe in input una stessa firma digitale in output) e che non ci sia possibilità, se non per tentativi, di risalire alla stringa di input partendo dalla stringa di output (la gamma di possibili valori in output è pari a 16 alla 32esima potenza). In generale è molto difficile rompere questo tipo di criptazione ma nel nostro caso c’era una grande controindicazione: il server presso cui ci si registra deve avere a disposizione la password criptata tramite Md5 in chiaro. Ciò non risultava del tutto sicuro in quanto bastava corrompere una macchina per poter ottenere tutti i parametri necessari per corrompere il sistema(conoscendo la password posso ricavare la stringa Md5 di conseguenza registrami presso l’altro server)ed inoltre cambiare password significava andare ad agire sui file di configurazione. Utilizzando RSA,invece, si aumenta di molto la complessità della decriptazione. In crittografia l'acronimo RSA indica un algoritmo di crittografia asimmetrica, utilizzabile per cifrare o firmare informazioni. Per poter realizzare con il cifrario asimmetrico un sistema crittografico pubblico è importante che un utente si crei autonomamente entrambe le chiavi, denominate "diretta" ed "inversa", e ne renda pubblica una soltanto. Così facendo si viene a creare una sorta di "elenco telefonico" a disposizione di tutti gli utenti, che raggruppa tutte le chiavi dirette, mentre quelle inverse saranno tenute segrete dagli utenti che le hanno create, ottenendo in questo modo i presupposti necessari alla sicurezza del sistema. Facendo un esempio pratico, se Alice vuole spedire un messaggio a Bob e non vuole che altri all'infuori di Bob possano leggerlo, Alice cercherà sull'elenco la chiave pubblica di Bob e con quella potrà cifrare il messaggio. Essendo Bob l'unico a possedere la chiave inversa, sarà anche l'unico a poter decifrare il messaggio, che rimarrà così segreto per tutti gli altri, compresa Alice, che non disponendo della chiave inversa non sarà in grado di decifrare il messaggio da lei stessa creato. Ovviamente il successo di questo sistema si basa sull'assoluta necessità che Bob sia l'unico ad essere in possesso della chiave inversa. In caso contrario, avendo entrambe le chiavi, chiunque potrebbe decifrare agevolmente il messaggio. Con questo metodo di cifratura è possibile anche garantire la 61 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP provenienza di un messaggio. Riprendiamo l'esempio precedente: Alice questa volta, prima di cifrare il messaggio usando la chiave pubblica di Bob, lo cifrerà usando la propria chiave inversa e solo in un secondo momento lo ri-cripterà utilizzando la chiave pubblica di Bob. Quando Bob riceverà il messaggio e lo decifrerà usando la propria chiave inversa, otterrà ancora un messaggio criptato. Quel dato messaggio necessiterà poi della chiave pubblica di Alice per essere decifrato, garantendo in questo modo che il messaggio è stato spedito solo e soltanto da Alice, unica a possedere la chiave inversa con la quale era stato criptato il messaggio. Più semplicemente, utilizzando questo metodo di criptatura, Alice può mandare messaggi a tutti, garantendo la provenienza. Infatti criptando il messaggio con la propria chiave inversa, chiunque sarà in grado di leggere il messaggio, decriptandolo con la sua chiave pubblica, assicurandosi in tal modo che il mittente sia proprio Alice. Nel nostro caso,quindi, utilizzando questo tipo di criptazione non risolviamo il problema della corruzione ma ne possiamo lenire gli effetti cambiando periodicamente key. Il grande vantaggio sta nel fatto che cambiando la key non dobbiamo andare a cambiare i file di configurazione ,come per Md5, ma semplicemente aggiornare la pubblic key nel server presso il quale ci si vuole registrare(inviandola per esempio tramite email in quanto la chiave pubblica non è un dato sensibile). Dopo aver scelto il tipo di criptazione ,rimaneva comunque da evitare che qualcuno potesse entrare in un server e corrompere il sistema . La prima cosa da fare era limitare l’accesso alla macchina alle sole porte necessarie per l’instaurazione dei trunk , nel nostro caso a Roma e a Terni solo la 4569 richiesta dallo iax, mentre al CED la 4569, 5060 e il range tra 10000:20000 necessarie all’instaurazione del trunk sip. Non sono stati previsti inoltre utenti guest o più utenti di quelli attualmente presenti nell’azienda per evitare che qualcuno potesse registrarsi usando questi account e fare spoofing sulla rete. Ai server asterisk con sistemi operativi CentOS linux è stato disabilitato l’accesso tramite root ed è stato tutto protetto con password complicate, di lunghezza variabile formate da numeri,lettere e caratteri speciali. Visto inoltre che i server asterisk dell’azienda non sono stati pensati per offrire servizio a terzi, il range degli indirizzi IP degli utenti SIP che possono registrarsi è stato limitato a quelli della LAN interna per le sedi di Terni e Roma mentre per il CED non sono stati definiti utenti (al CED non ci sono uffici ne personale). E’stato previsto anche un trattamento diverso delle chiamate verso l’esterno(cellulari via VoIP e fissi tramite PSTN) per evitare che possano 62 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP essere provocati danni economici all’azienda,nel caso qualcuno riuscisse a corrompere il sistema. Il fornitore VoIP infatti fornisce servizi di chiamata verso l’esterno attraverso il pagamento di ricariche telefoniche, ciò comporta che l’attaccante non potrà spendere più di quello che si è caricato(limitando il danno). Per quanto riguarda la linea PSTN sono stati disabilitati tutti i numeri con alto costo. L’ultimo problema affrontato è stato costruire un Dialplan chiaro,non complesso,con una numerazione che tenesse conto sia dell’identificazione del servizio a cui si voleva accedere sia la scalabilità dello stesso Dialplan. La soluzione ha tenuto conto del possibile sviluppo dell’azienda e quindi ,ritenendo le centinaia un margine troppo esiguo per la differenziazione dei servizi, si è scelto le migliaia secondo il criterio seguente: Tutti i numeri compresi tra 0 e 999(esclusi i numeri da 100 a 199 dedicati ai servizi di emergenza) sono riservati per i servizi particolari come l’ascolto della propria casella vocale ,l’instaurazione di una conferenza interna ed altri che possono essere aggiunti successivamente a seconda dell’esigenza dell’azienda. I numeri tra 1000 e 1999 sono riservati agli utenti interni della sede di Roma. Il margine scelto è molto elevato ma si è tenuto conto (dopo una consultazione con i dirigenti dell’azienda) dello sviluppo della stessa e della possibilità di usare anche softphone e quindi dotare in un futuro ogni dipendente di un proprio numero interno. I numeri tra 2000 e 2999 sono riservati al CED. Attualmente non sono in uso ma si è voluta riservare l’opportunità sia di usufruire di un servizio voce gratuito tra il CED e l’azienda quando dei tecnici stanno lavorando sulle macchine presenti in tale sede (utilizzando magari un softphone e abilitando il numero dalla sede) sia per un’eventuale realizzazione di un CED proprio con una rete VoIP dedicata. I numeri tra 3000 e 3999 sono riservati alla sede di Terni. I numeri che iniziano con lo 0 o con l’8(numeri verdi) o con l’1 ma con una lunghezza pari a 3 sono inviati verso la PSTN 63 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP I numeri che iniziano con 3 e hanno una lunghezza maggiore di 4 sono inviati al fornitore VoIP. Dopo aver scelto la numerazione è stata delicata anche la scelta dell’algoritmo di compressione della voce. La tabella che segue illustra l'occupazione di banda dei Codec che si possono utilizzare in asterisk: Codec Bitrate Grezzo Bitrate Finale MOS G.711 64 Kbps 80 Kbps 4.3 - 4.7 G.726-32 32 Kbps 48 Kbps 3.9 - 4.2 GSM 27 Kbps 3.7 - 3.9 G.723.1 6.3 Kbps 17 Kbps 3.4 - 3.65 iLBC 15.3 Kbps 27 Kbps 3.7 - 4.1 G.729a 8 Kbps 24 Kbps 3.7 - 3.92 13.2 Kbps La scelta è caduta su una combinazione dello standard G711 con il GSM in quanto rappresentano la miglior compromesso tra occupazione di banda e il MOS (Mean Opinion Score) stante che il G.729a che senz’altro era il più confacente è a tutt’oggi coperto da brevetto. Il G.711 è uno standard internazionale di compressione audio sviluppato dal CCITT all'interno del gruppo di specifiche per la videoconferenza denominate H.320 . Le specifiche G.711 sono implementate via software e trattano la codifica di segnali video, fino a 3.4 KHZ, a 8 KHz e la loro trasmissione su canali a 64 Kbit/s. La compressione audio G.711 è realizzabile sia con lo standard m-Law (Stati uniti, Giappone) che con lo standard A-Law (Europa): • nel caso di m-Law il frame di 14 bit campionati in PCM (Pulse Code Modulation) viene compresso in 8 bit in PCM logaritmico; • nel caso di A-Law il frame di 13 bit viene compresso in 8 bit. 64 CAPITOLO 4: PROGETTAZIONE DELLA RETE VoIP Il codec G.711 è composto da un encoder e un decoder: il primo converte i campioni a 13 o 14 bit in frame A-Law o m-Law; il secondo opera il processo inverso. La codifica GSM infine,è una delle codifiche vocali più potenti: essa permette di trasmettere il segnale vocale (0 - 4 kHz) con un bit rate di 13 kbit/s contro i 64 kbit/s della codifica PCM. Il "vocoder" (vocal coder) codifica la voce secondo RPE-LTP (Regular Pulse Excitation with Long Term Prediction), cioè una codifica che frutta la correlazione esistente tra campioni della voce. Invece di trasmettere un campione (come avviene nel PCM) il vocoder fa una "predizione" sul campione e trasmette solo la di differenza rispetto alla predizione fatta (errore di predizione). Il vocoder genera un blocco di 260 bit ogni 20 ms, suddivisi in quattro sub-frames di 5 ms, pari ad un bit rate di 13 kbit/secondo. Dopo la fase di progettazione sono passato alla realizzazione vera e propria del sistema ma ,come sarà spiegato in maniera approfondita nel prossimo capitolo, con delle specifiche diverse dal progetto per momentanei problemi tecnico-burocratici(anche se tutto il sistema è già stato predisposto per il passaggio al progetto di rete iniziale ). 65 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP CAPITOLO 5 REALIZZAZIONE DELLA RETE VoIP CON ASTERISK PRESSO LA Jnet2000 5.1 INTRODUZIONE L’implementazione del progetto non si è potuta realizzare nella sua interezza(anche se il sistema è pronto per la migrazione alla configurazione progettuale) per i seguenti vincoli oggi presenti: • L’azienda oggi dispone di una PSTN con due operatori differenti. L’idea è quella di passare solo alla linea VoIP gestita nel CED ma per ora ,visto che il numero VoIP non è ancora diffuso,la maggior parte del traffico voce passa appunto dalla PSTN • Terni ha una propria linea PSTN e anche qui si deve distribuire il numero unico VoIP della Jnet2000. • Le chiamate in uscita da Roma per ora vengono inviate tutte alla PSTN in quanto si è in attesa dell’abilitazione da parte dell’operatore VoIP del servizio. La realizzazione e l’implementazione del progetto ha dovuto seguire quindi, una strada differente gestendo le chiamate secondo le specifiche fornitemi dall’azienda : Le chiamate provenienti dalla rete VoIP del nostro operatore saranno processate a livello CED e verranno inviate alla sede di ROMA solo se si è in orario di ufficio. Il server di Roma gestirà le chiamate attraverso una voce elettronica che illustrerà tutte le possibili scelte. Nel caso ci si trovi in orario di chiusura degli uffici il server del CED farà partire una voce elettronica che 66 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP spiegherà lo stato degli uffici e chiederà se si vuol lasciare un messaggio vocale. Le chiamate provenienti dalla PSTN vengono gestite direttamente dal server di Roma con la stessa voce elettronica che gestisce quelle provenienti dal gestore VoIP La sede di Terni per le chiamate in uscita continuerà ad usare la propria PSTN mentre potrà chiamare gratis le sede di Roma e potranno esserle inoltrate le chiamate ricevute presso il server di Roma. Le chiamate in uscita da Roma verranno per ora inviate tutte alla PSTN anche se l’attivazione del servizio da parte del gestore VoIP ,dovrebbe essere ormai imminente. Nei prossimi paragrafi vedremo come è stata realizzata in maniera pratica la rete presentando tutti i vari passi fatti per la messa in opera del nostro sistema. Prima verrà spiegato come installare correttamente l’asterisk e poi verranno analizzata la configurazione dei vari file per ottenere le caratteristiche decise in fase progettuale. 5.2 INSTALLAZIONE ASTERISK Per il nostro sistema abbiamo scelto come sistema operativo un distribuzione linux CentOS 5 installata in tutte e tre le macchine presenti nelle sedi. In tutto ciò che presenterò in questo paragrafo farò riferimento a questo sistema operativo(per gli altri sarà lo stesso con alcune istruzioni diverse dipendenti dal tipo di sistema utilizzato). Asterisk si sostanzia nell’installazione di tre grandi pacchetti: asterisk:il programma vero e proprio zaptel: i driver per le schede telefoniche della Digium libri: le librerie PRI Se si vuole creare una rete puramente VoIP l’unico pacchetto necessario è l’asterisk ma data l’architettura modulare dell’asterisk stesso, è conveniente installare tutti e tre i pacchetti potendo scegliere successivamente quali moduli attivare. Prima di installare i tre pacchetti dobbiamo assicurarci che nel nostro sistema operativo siano presenti alcuni file con le 67 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP relative dipendenze . Nella tabella 1 sono elencati tutti i pacchetti necessari alla compilazione ,il comando per installarli ,le motivazioni per le quali vengono installati e il main pacchetto che li richiede. Tutti i pacchetti presenti della tabella possono anche essere installati con un unica istruzione di seguito indicata: # yum install -y gcc ncurses-devel libtermcap-devel[...] FIGURA 5.1-Lista dei pacchetti richiesti per compilare zaptel,libpri e asterisk 68 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Dopo questa sequenza di http://downloads.digium.com/pub/ operazioni è necessario scaricare dal sito le ultime release dei tre pacchetti e salvarle in una cartella a piacere. La mia scelta è stata creare una cartella Asterisk apposita in root. Il modo migliore per il download dei pacchetti è usare da shell il programma wget nella maniera seguente: # cd/Asterisk # wget http://downloads.digium.com/pub/asterisk/asterisk-version-tar.gz # wget http://downloads.digium.com/pub/libpri/libpri-version.tar.gz # wget http://downloads.digium.com/pub/zaptel/zaptel-version.tar.gz I pacchetti scaricati dal server FTP sono archivi compressi contenenti il codice sorgente, quindi prima di compilarli bisogna estrarli. Per decomprimerli possiamo usare l’applicazione GNU tar nel modo seguente: # cd /Asterisk # tar zxvf zaptel-version.tar.gz # tar zxvf libpri-version.tar.gz # tar zxvf asterisk-version.tar.gz A questo punto non ci resta che compilare i tre pacchetti. 5.2.1 COMPILAZIONE ZAPTEL Compilare i driver per l’uso della nostra scheda hardware della digium è molto semplice. Per prima cosa bisogna digitare nella shell il comando ./configure per vedere quali applicazioni e librerie sono installate nel sistema in modo da verificare che tutto il necessario per la compilazione di zaptel sia presente. Dopo si passa alla compilazione vera e propria seguendo i successivi step: # cd /Asterisk/zaptel-version # make clean 69 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP # ./configure # make menuselect # make # make install Se tutto sarà fatto correttamente alla fine della compilazione si accenderà la luce verde del jack della scheda e apparirà un messaggio del tipo: Se si vuole far partire lo zaptel allo start del sistema operativo bisogna digitare alla fine del processo di compilazione #make config. L’unica cosa da controllare è se è stato installato il modulo ztdummy necessario per la temporizzazione. Si digita il comando lsmod |grep ztdummy se l’istruzione non da risultato allora bisogna caricare il modulo con l’istruzione #modeprobe ztdummy 5.2.2 COMPILAZIONE LIBPRI Libpri è usata da vari hardware(anche dalla scheda TDM 400P) per effettuare il TDM(Time Division Multiplexing) . E’ stato quindi necessario per me installarlo nelle sede di Roma e nel CED dove sono presenti schede hardware ma lo ho anche installato nel server della sede di Terni per garantire maggiore stabilità al sistema . I comandi da eseguire sono i seguenti : # cd /usr/src/libpri-version # make clean # make # make install 70 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP 5.2.3 COMPILAZIONE ASTERISK Per la compilazione con gcc di asterisk si deve usare il programma GNU make. Per iniziare la compilazione di asterisk si devono eseguire i seguenti comandi: # cd /Asterisk/asterisk-version # make clean # ./configure # make menuselect # make install # make samples Eseguire il comando make samples non è necessario ma è molto utile in quanto installa i file di configurazione di default e molti di questi sono ottimi per un utilizzo efficace di asterisk. Altri file invece devono essere completamente rieditati come vedremo successivamente. Per lanciare l’asterisk automaticamente allo startup del sistema bisogna eseguire il comando # make config Al termine dell’installazione, a meno di aver personalizzato il Makefile, i file che compongono Asterisk saranno distribuiti sul file-system . Per mettere in esecuzione si usa il comando: prompt# asterisk e invece ci si connette alla sua console con prompt# asterisk –vvvr Terminata la fase d’installazione di asterisk ho continuato con l’editazione dei file di configurazione per ottenere il sistema progettato. 71 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP 5.3 CONFIGURAZIONE ASTERISK Per la configurazione di asterisk ho usato un approccio step by step, ho preferito cioè raggiungere lo scopo attraverso la costruzione di sottosistemi via via più complessi per giungere al sistema desiderato. In questo modo potevo controllare ad ogni step il corretto funzionamento limitando così la ricerca di eventuali errori al sottosistema il quel momento considerato. I passi sono stati i seguenti: 1. realizzazione di un centralino VoIP per la sede di Roma interfacciandolo con la linea PSTN e verificando che funzionasse perfettamente 2. configurazione del server CED in modo che potesse inviare e ricevere le chiamate dall’operatore VoIP 3. realizzazione del trunk tra CED e ROMA definendo anche il modo con cui instradare le chiamate 4. configurazione del server VoIP di Terni e realizzazione del trunk verso Roma definendo anche il modo con cui instradare le chiamate 5. verifica che l’intero sistema funzionasse correttamente in tutte le sue componenti. 5.3.1 CREAZIONE CENTRALINO VoIP ROMA Lo scopo di questa prima fase è quello di creare un centralino che soddisfi i seguenti requisiti: tutte le chiamate entranti devono essere gestite da un voce elettronica che le instrada verso l’ufficio desiderato. Gli impiegati dell’azienda devono potersi registrare presso il server e poter effettuare chiamate interne . Tutti i telefoni VoIP dell’azienda devono poter effettuare chiamate esterne passando per la linea PSTN. 72 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP I file di configurazione che si devono editare per raggiungere questi scopo sono : Zaptel.conf Zapata.conf Sip.conf Extension.conf 5.3.1.1 ZAPTEL.CONF Lo zaptel.conf è dove si configura a livello più basso la scheda hardware. La figura 5.1 contiene l’immagine della scheda che ho utilizzato per il server di Roma, la TDM400P. Come si può vedere la scheda è composta da due moduli di colore diverso: Arancione è il modulo FX0 Verde è il modulo FXS Un dispositivo FXS inizializza e invia un impulso di tensione (il tono di chiamate) ricevuto da un dispositivo FXO. In altre parole connettendo una porta FXS sul server di asterisk ,il modulo FX0 presente sul server stesso,nel momento in cui riceverà un tono, produrrà tensione attraverso il modulo FXS e lo invierà al telefono analogico. Si può dire che la porta FX0 si comporta come una ‘stazione’,si può connettere con una linea telefonica(per esempio quella del proprio operatore telefonico) e usa il modulo FXS per la segnalazione. Una porta FXS si comporta invece come un ufficio centrale,si può connettere con un telefono analogico e usa una segnalazione FX0. Nell’angolo in basso della figura 5.1 Si può notare la presenza di un connettore Molex (attaccato al generatore di potenza del pc ) utilizzato per ricevere l’energia Nello zaptel.conf ,che si trova sotto /etc, ho dovuto impostare dei parametri per il corretto funzionamento della FX0 come mostrato in figura 5.3 73 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP FIGURA 5.2-Scheda TDM400P Dovendo configurare una porta FX0 per ricevere/inviare chiamate da/a la PSTN, nello zaptel deve essere definito il modulo usato per la segnalazione con l’istruzione: fxsks = 2 (cioè per il secondo modulo(fx0 nel nostro caso) deve essere usata una segnalazione con il modulo FXS) il ks che segue fxs indica il protocollo usato per la segnalazione. 74 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP FIGURA 5.3-File zaptel.conf sede di roma Potevo scegliere fra tre tipi di protocolli: Loop Start (ls) : si verifica la selezione delle cifre dal momento in cui la corrente elettrica fluisce attraverso il local loop del telefono(usato da tutti i telefoni) Ground Start (gs): si verifica la selezione da quando il filo è a massa (molto usato nei PBx analogici) Kewlstart (ks) : è praticamente uguale ad ls ma risulta più intelligente in quanto percepisce in maniere più rapida disconnessioni far-end . La mia scelta è caduta su ks perché appare chiaro come fosse il migliore per il mio ambiente di lavoro. Tendenzialmente ogni nazione utilizza suoni differenti per indicare lo stato del sistema (per esempio il suono di chiamata ,il tono di occupato e così via). Per indicare quale impostazioni del suono devono essere utilizzate faccio ricorso al comando loadzone . Nel 75 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP mio progetto ho impostato i suoni italiani. Se avessi avuto a disposizioni più canali potevo impostare anche differenti loadzone e nel caso in cui non fosse stato impostato nulla automaticamente l’asterisk usa l’impostazione di defaultzone. Per verificare se la configurazione è stata fatta correttamente si utilizza il comando da prompt: # /sbin/ztcfg –vv che mostrerà i canali e il metodo di segnalazione usata. Nel nostro caso abbiamo: Zaptel Configuration ====================== Channel map: Channel 02: FXS Kewlstart (Default) (Slaves: 02) 1 channels configured. Se si sbaglia la relazione tra porta e segnalazione apparirà un messaggio di errore . Nel mio caso è apparso : ZT_CHANCONFIG failed on channel 2: Invalid argument (22) Did you forget that FXS interfaces are configured with FXO signaling and that FXO interfaces use FXS signaling? 76 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Per poter cambiare l’impostazione e risolvere il problema, prima ho dovuto disinstallare i driver attraverso il comando # rmmod wctdm poi ho riconfigurato lo zaptel e ricaricato i driver con il comando # modprobe wctdm Configurato lo zaptel si passa a configurare la zapata.conf che rappresenta l’interfaccia asterisk tra il mondo VoIP e la linea PSTN. 5.3.1.2 ZAPATA.CONF Asterisk usa lo zapata.conf per impostare e configurare la scheda telefonica hardware presente nel sistema e per controllare le tante funzionalità associate all’hardware channels, come Caller ID ,call waiting etc etc. L’asterisk senza la presenza dello zapata.conf non si renderebbe conto delle modifiche apportate allo zaptel.conf: lo zapata.conf può essere visto come l’interfaccia tra la PSTN e il software asterisk. Si trova sotto la directory /etc/asterisk e per questo si può dire che è un file già appartenente ad asterisk. La configurazione che ho effettuato per lo zaptel è mostrata nella figura 5.4. E’ opportuno ricordare che esiste una sezione denominata [trunkgroups] dove si possono mappare più canali fisici in un solo canale logico ma non l’ho configurata in quanto al momento non esistevano i presupposti avendo un solo canale fisico 77 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP FIGURA 5.4-zapata.conf del server di Roma Nel contesto [channel] ,come si vede in figura, ho definito tutti i parametri che ritenevo utili e necessari per il mio canale. Il significato di tutti i parametri da me impostati è spiegato di seguito: Context : definisce il contesto del dialplan verso il quale vengono indirizzate le chiamate. Nel mio caso incoming (il perché di tale scelta sarà chiarito più avanti). Signalling : definisce il modulo di segnalazione usato Usercallerid : mettendo a yes si abilita l’invia del caller ID Hidecallerid : messo a no permette di non nascondere l’id per le chiamate uscenti Callwaiting: impostato ad yes mette in attesa le chiamate quando l’utente desiderato è occupato 78 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Callwaitingcallerid: posto ad yes trasmette l’id della chiamate in attesa all’utente impegnato in un'altra chiamata Threewaycalling: posto ad yes permette di mettere in attesa la chiamata attuale e di rispondere a quella in attesa Transfer: solo se threewaycalling è impostato a yes permette di trasferire la chiamate attuale o quella in attesa ad un altro utente Echocancel: ponendolo a yes rimuove l’eco prodotto dalla linea analogica Echotraining: permette di velocizzare la capacità del sistema di capire l’entità dell’eco prodotto dalla linea analogica. Posto a yes permette di inviare un tono lungo la linea all’inzio di una chiamata per misurare l’eco e permettendo al sistema di “imparare” l’eco più velocemente . Immediate : posto a no produce un dial tone nel momento in cui si alza la cornetta e aspetta che l’utente faccia l’operazione desiderata. Busydetect :serve per testare/rivelare se una linea è occupata Channel:indica la porta dove è attaccata la PSTN. nel nostro caso è la 2. A questo punto la linea analogica si interfaccia ed è riconosciuta dall’asterisk. 5.3.1.3 SIP.CONF Nel SIP .conf si definiscono gli utenti SIP che possono accedere al sistema tramite il protocollo omonimo nonché i parametri necessari alla registrazione e al trattamento del segnale voce lungo il canale tra server e utente SIP. La configurazione da me effettuata per il server di asterisk è mostrata nella due figure seguenti che in realtà compongono lo stesso file ma qui per semplicità di osservazione è stato diviso in due parti La prima figura rappresenta il settaggio delle opzioni generali che varranno per tutti i canali SIP e vanno inseriti nel contesto [general] 79 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP FIGURA 5.5-Sip.conf di roma 1 FIGURA 5.6-Sip.conf di roma 80 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Quelli che io ho impostato in questo file sono i seguenti: Context : è il contesto di default del channel SIP,cioè è quel contesto del dialplan verso il quale saranno inviate le chiamate entranti nel caso non sia stato specificato nessun contesto nell’utenza SIP a cui è diretta la chiamate. Nel mio caso ho impostato incoming . Allowguest: ci permette di abilitare e disabilitare il permesso di registrazione presso il server di utenti guest. In realtà potrebbe anche essere ignorato in quanto se non si definiscono utenze è impossibile registrale. Ma è anche vero che se qualcuno poco pratico di asterisk riuscisse in qualche modo ad entrare nel sistema potrebbe creare abbastanza facilmente un utenza guest ed allora ho pensato che maggiore sicurezza fosse opportuna definirlo e impostarlo come no . Bindport: qui si può definire la porta UDP impegnata da un canale SIP. La porta di default per il SIP è la 5060 esattamente quella impostata in figura . Nella realtà dei fatti sempre per rendere il sistema più sicuro l’ho cambiata Bindaddr: qui si definisce l’interfaccia di rete che deve essere ascoltati per l’instaurazione di una chiamata. Ora io volevo cambiarlo ma l’azienda mi ha bloccato in quanto prevede una riconfigurazione totale della rete interna e nella fase di passaggio si potrebbe bloccare il servizio. Srvlookup: con questo parametro si abilita il DNS SRV che permette di creare un indirizzo logico dove si può essere raggiunto. Impostando a yes questo parametro si hanno la maggior parte dei vantaggi associati ad un DNS(strumento con cui l’IP traduce gli indirizzi logici) comune mentre non abilitandolo si perde la capacità di SIP di inviare chiamate basandosi su indirizzi logici. Per questi motivi ho preferito impostarlo a yes anche se per il momento la struttura creata non ne richiede l’uso. Domain : imposta il dominio di default per l’asterisk server. Io l’ho impostato facendo riferimento alla mia azienda quindi Jnet.com Allow/disallow : permettono d’impostare i codec preferiti all’utente di gestione dell’asterisk. Di default sono abilitati tutti e quindi se si vogliono abilitare soltanto i codec desiderati (usati se non diversamente specificati 81 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP nella definizione dell’utenza) prima si devono disallocare tutti con il comando disallow=all poi in ordine di preferenza si allocano i codec desiderati. Nel mio caso ho allocato il g.711 nelle sue due versioni a-law e µ-law i il GSM(standard di compressione voce definito per i telefono di seconda generazione). In realtà esistono codec sicuramente più performanti come il G.729 ma come già detto prevedono l’acquisto di una licenza dedicata anche se d’altro canto sono stati pensati apposta per il VoIP quindi danno sicuramente più QoS. Nella seconda figura innanzitutto si nota che ho definito un numero di utenti piccolo rispetto alle future possibilità espansive dell’azienda ma questa è stata un’opportuna scelta strategica. Ho deciso in accordo con l’azienda di definire soltanto utenze per il numero di apparecchi telefonici in questo momento disponibili al fine di evitare che qualche intruso/attaccante potesse utilizzare un account libero per usufruire del servizio telefonico. Per ogni utente ho definito un account con il quale viene individuato dalla rete . La mia scelta è ricaduta su un account numerico per semplificare ,come si noterà nel paragrafo dedicato , il dialplan. L’account nel sip.conf si comporta come un contesto e quindi dopo averlo definito tra parentesi quadre si specificano i parametri che lo caratterizzano: Type: si possono impostare tre tipi di parametri • peer : il canale può solo inviare le chiamate • client : il canale può solo ricevere le chiamate • friend : il canale può ricevere ed inviare chiamate visto che i telefoni registrati nel sip.conf dovevano inviare e ricevere chiamate la mia scelta come logico è caduta su friend secret : qui si inserisce la password dell’utente senza limiti di lunghezza o di caratteri. Per sicurezza è meglio evitare caratteri speciali e costruire la password con caratteri alfanumerici. Ovviamente la password nelle figura è stata criptata. 82 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP host: possono essere definiti due tipi di parametri: ♦ dynamic : Permette la registrazione del client da IP che possono cambiare (dinamici) ♦ ip_address : permette la registrazione solo al pc che ha l’ip_address uguale a quello specificato visto che i telefoni disponibili in azienda prendono l’indirizzo IP ,per comodità, dal DHCP ho impostato il parametro a Dynamic Context : qui si definisce il contesto del dialplan dove finiranno le chiamate del client. Io ho definito contesti a seconda del reparto a cui afferisce il client. Dftmode : si specifica il formato dei dial tone. Io ho definito che devono essere trattati secondo le specifiche del RFC 2833 Mailbox : Attiva l’indicatore di messaggi se ci sono messaggi in segreteria. Le mailbox di ogni utente nel mio caso sono state definite nel voicemail.conf come vedremo nel prossimo capitolo. La scelta di usare una password in chiaro e non crittografata è stata dovuta a due motivi principali: 1. Gli apparati che possono collegarsi alla rete sono solo quelli interni, non è stata prevista come detto la possibilità di collegamento dall’esterno. Quindi per poter sniffare la rete e trovare la password si dovrebbe entrare fisicamente dentro l’azienda ma contro questo nemmeno la crittografia più potente può far nulla. 2. dato il punto uno, utilizzare una password in chiaro è sicuramente più gestibile e personalizzabile per ogni utente. 83 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Per gli utenti SIP potevo introdurre molti più parametri ma data l’architettura su cui stavo implementando il servizio alcune volte ho ritenuto superfluo impostarli, altre ho ritenuto validi quelli di default. Ora prima di passare ad analizzare come ho costruito il dialplan per realizzare il mio centralino dirò due parole su come si configura il file voicemail.conf per la realizzazione di una segreteria telefonica IP. 5.3.1.4 VOICEMAIL.CONF Una delle caratteristiche maggiormente apprezzata nei moderni sistemi telefonici è la voicemail cioè una segreteria telefonica integrata gestita tutta in ambito IP. Asterisk ha un sistema di voicemail molto flessibile caratterizzato da : un illimitato numero di voicemail box protetti da password differenti avvertimenti per lo stato di occupato o per stato di indisponibilità presenza di voci registrate di default per la segreteria in diverse lingue possibilità di editare nuove voci per personalizzare la segreteria la possibilità di associare telefoni con più mailbox e viceversa notifica via mail della ricezione di un messaggio vocale e la possibilità di allegare il file audio ricevuto in segreteria alla mail Per configurare la voicemail si deve editare il file voicemail.conf presente sotto la directory /etc/asterisk. La mia configurazione è presentata nella figura 5.7: Prima di analizzare la figura bisogna dire che per presentarla in modo compatto non ho riportato due impostazioni molto importanti presenti nel campo general: format=wav49|gsm|wav . Attraverso questo opzione ho definito il formato con cui desidero siano salvate le voicemail. Ho usato come si vede il formato più usato per i file audio il wave a cui ho associato come seconda scelta il gsm il per i suoni nativi di asterisk. 84 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP FIGURA 5.7-vocemail.conf [zonemessages] : dove viene impostata la zona e quindi l’orario a cui attiene il server. Ci sono 5 zone preimpostate e tra queste io ho scelto come logico quella europea . La definizione che ho fatto è la seguente: european=Europe/Rome|'vm-recevied' d b a''digits/at' HM Con l’opzione Europe/Rome ho scelto la città nella zona desiderata. Poi ho definito la voce elettronica che indicherà la ricezione di un nuovo massaggio . Nel mio caso la voce dirà: “nuova mail ricevuta (vm-intro) il giorno(d=variabile che identica il giorno corrente) mese (b) anno (a) alle (digits/at=file sonoro) ore(H)minuti(M)”. Ora posso passare all’analisi della figura. Come si può notare ho definito un voicemail context, simile al dialplan contest, all’interno del quale ho inserito le varie mailbox dei singoli utenti della sede di Roma . Per chiarezza di lettura ho chiamato il contesto con il nome della compagnia . La struttura per la creazione delle mailbox è : mailbox => password,name[,email[,options]] 85 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP mailbox : è il numero della mailbox . Il numero e il contesto identificano in modo univoco la casella di posta . Per richiamarla infatti si usa la seguente struttura: mailbox@contesto . Questo significa,per quanto riguarda il mio caso, che per richiamare la mailbox della segretaria Valentina mi basterà scrivere : 1@Jnet password :è la password numerica che il proprietario della mailbox userà per accedere alla propria voicemail. Quando l’utente accederà alla propria segreteria telefonica sarà guidato,come vedremo,da una voce elettronica che gli permetterà anche di cambiare password. Nel caso l’utente cambi password il sistema aggiornerà automaticamente il relativo campo nel voicemail.conf name : è il nome del proprietario della mailbox email : si specifica l’indirizzo email del proprietario . Nel nostro caso come si noterà i dipendenti sono stati obbligati ad usare la mail aziendale. Options: indica un a serie di opzioni che posso esser aggiunte al messaggio di avvenuta ricezione. Io ho usato : tz=european : con questa voce ho ridondato per sicurezza la definizone della zona di appartenenza già fatto nel contesto general. attach =yes :con questa forzo il sistema ad allegare il file audio del messaggio ricevuto alla mail di avviso. Saycid =yes : prima del massaggio impongo di dire le informazioni sull’id del chiamante Ora finalmente dove aver impostato tutti i file di configurazione per le gestione delle utenze posso passare a definire il dialplan del centralino, cioè lo strumento “router” dell’asterisk. 5.3.1.5 EXTENSIONS.CONF L extensions.conf è il file dove viene costruito il dialplan cioè dove l’amministratore del server VoIP decide in che modo devono essere processate la varie chiamate. Nel capitolo 86 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP sull’Asterisk ho parlato delle estensioni,dei contesti e delle priorità ma non ho introdotto un altro elemento fondamentale per le costruzione di un buon dialplan cioè le applicazioni. Le applicazioni sono il “cavallo da lavoro” del dialplan. Ogni applicazione rappresenta una specifica azione sul canale corrente come l’esecuzione di un suono,l’accettazione di un touch-tone in input, chiamare un canale ,chiudere una chiamate e così via. Alcune applicazioni non richiedono altre istruzioni per il loro lavoro ,per esempio Answer() . Altre invece hanno bisogno di informazioni aggiuntive come Playback. Le informazioni che devono essere passate alle applicazioni per dire loro come devono agire ,prendono il nome di argomenti. Gli argomenti che devono essere forniti, vanno inseriti all’interno delle parentesi tonde,che seguono il nome dell’istruzione , separati dalla virgola . Le applicazioni che ho usato nella costruzione del mio dialplan sono: Answer (): è usata per rispondere al canale che sta “suonando”. E’ un’applicazione necessaria (solo poche applicazioni non richiedono di rispondere prima al canale) per aprire il canale da cui si riceve una chimata. E’ una buona abitudine usare answer anche per quelle applicazioni per cui non sarebbe necessario. Playback : è usata per eseguire un file precedentemente registrato su un canale. Per usare questa applicazione in modo appropriato si deve passare come argomento il filename senza la sua estensione :per esempio Playback (filename) riproduce il file sonoro chiamato filename.gsm assumendo che si trovi nelle directory di default dei suoni in asterisk che di solito si trova sotto /var/lib/asterisk/sound . Se si vuole riprodurre un file che si trova sotto una cartella diversa bisogna indicare tra le parentesi l’intero path:Playback(/home/Gabriele/sounds/filename).Nel caso fossero presenti nella cartella file con lo stesso nome ma con estensioni diverse asterisk sceglierà la migliore in termini di qualità. 87 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Hangup() : l’applicazione fa esattamente ciò che il nome implica cioè chiude il canale attivo . Di solito viene usato alla fine di un contesto in modo da evitare che la chiamata posso proseguire nello sviluppo del Dialplan. Background () : è molto simile a Playback () , anch’essa riproduce un file sonoro ma a differenza di Playback quando il chiamante preme un numero(o una serie di numeri) sulla propria tastiera si interrompe e passa la chiamata all’estensione corrispondente con il numero(numeri) digitati. Come vedremo nel mio Dialplan Background è lo strumento migliore per realizzare un voice-menu. Goto() : questa applicazioni reinstrada la chiamata verso l’estensione definita all’interno delle parentesi tonde. Per esempio exten => 2,n,Goto(incoming,1,1) rimanda la chiamata all’interno del contesto incoming all’estensione 1 con priorità 1. Dial () : è l’applicazione con cui richiediamo di instaurare la connessione con l’utente definito tra parentesi. La sintassi è un po’ più complicata delle applicazioni precedenti ma è anche l’applicazione più importante. Dial () prende in input 4 argomenti: il primo è la destinazione con la quale si vuole stabilire una connessione che (nella forma più semplice) è specificata dal protocollo di trasporto con il quale devi stabilire la chiamata, uno slash ,il remote endpoint o risorsa da chiamare e il tempo espresso in secondi che si vuole attendere prima di passare all’estensione successiva. Nelle parentesi si possono esprimere più destinazioni contemporaneamente basta legare l’uno con l’altra attraverso una &.: attraverso un estensione di questo genere : exten => 1001,1,Dial(Zap/1&SIP/Gabriele) componendo il numero 1001 invio la chiamato sul canale ZAP/1 e all’utente SIP Gabriele. 88 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Wait(): è l’applicazione molto semplice,impone al sistema di aspettare. Tra le parentesi si inserisce il numero di secondi che si vuole aspettare. Se non si mette nulla tra le parentesi il sistema aspetterà fino a quando non succederà qualcosa per es. viene chiuso il canale dall’utente chiamato o premuto un tasto dall’utente chiamante etc. etc..… Voicemail : è l’applicazione che permette di inoltrare la chiamata alla voicemail. Prende in input l’indirizzo della mailbox a cui si desidera inviare la chiamata per es. Voicemail (1@jnet) inoltra la chiamata alla voice mail della segretaria amministrativa. WaitExten () : è l’applicazione che permette di aspettare che l’utente inserisca un tono DMTF ed è di solito utilizzata dopo Background. Dopo aver fatto un breve excursus sulle applicazioni maggiormente usate nella costruzione del mio dialplan passiamo all’analisi dello stesso . Per prima cosa che ho realizzato è stato un IVR *∗ personalizzato per Jnet2000. Ho dovuto creare un voce-menu che instradasse i chiamanti verso l’ufficio desiderato. In particolare la Jnet è divisa in tre reparti : quello amministrativo ,commerciale e tecnico. In più la compagnia voleva dare la possibilità al chiamante di poter lasciare un messaggio in segreteria telefonica . Per realizzare il voice menu ho usato un text-to-speech cioè una serie di tecnologie di sintesi vocale capaci di leggere con una voce umana sintetizzata un testo scritto, riproducendo i suoni corrispondenti al testo. I software TTS possono in genere usare diverse voci fittizie, maschili o femminili, e leggere il testo a diverse velocità, secondo i desideri dell'utente. La ricerca di un software free che fosse adatto all’esigenza del progetto ∗ Per Interactive Voice Response (IVR) si intende un sistema capace di recitare informazioni ad un chiamante interagendo tramite tastiera telefonica DTMF. Per similitudine, si parla anche di servizio IVR o albero di navigazione IVR.Più in particolare, un sistema IVR, di solito, consente di recitare un insieme di messaggi preregistrati, recitare menù a scelta multipla, memorizzare dati introdotti da tastiera, mandare fax, interrogare sia database aziendali che sistemi CTI. I sistemi IVR più evoluti integrano il riconoscimento vocale, il quale consente di offrire un servizio al chiamante riconoscendo naturalmente il linguaggio parlato.Uno dei compiti di un IVR è quello di alleggerire il carico di chiamate pervenute agli operatori di un call center fornendo informazioni standard e frequentemente richieste (es: orari di apertura e chiusura, costo dei servizi, indirizzi). 89 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP è stata molto complicata. La maggior parte dei text-to speech professionali sono a pagamento e quelli free non hanno una buona sintesi. Asterisk mette a disposizione un text-to-speech di default ma la voce risulta essere molto meccanica e poco affabile. Dopo una lunga ricerca ho trovato un versione demo di un programma professionale che si adattava bene alle caratteristiche che desideravo. Il programma in questione è Loquendo la cui versione demo può essere trovata sul sito: http://tts.loquendo.com/ttsdemo/default.asp?page=id&language=it. L’unico inconveniente di questa versione demo è una musica di sottofondo che accompagna la voce per evitare un uso illecito di tale software. Mi sono confrontato con i dirigenti dell’azienda per vedere se tale scelta fosse ritenuta da loro poco opportuna o comunque potesse creare problemi di qualsiasi natura. La soluzione è stata ritenuta idonea in quanto rispettosa delle leggi e dei regolamenti vigenti e la musica è soft e gradevole . A questo punto non mi rimaneva che creare il file e salvarlo in una directory a mio piacimento, per comodità ho scelto quella di default che per il mio asterisk era var/lib/sound/it cioè la versione italiana dei suoni di default. La voce creata è : “siete in linea con la Jnet2000, premere uno per l’ufficio amministrativo, due per l’ufficio commerciale, tre per l’ufficio tecnico , 0 per lasciare un messaggio in segreteria, 9 per riascoltare il menu”. Dopo aver impostato il messaggio vocale di benvenuto ho potuto implementare il mio IVR nel modo mostrato in figura 5.8 Le chiamate entranti dalla rete PSTN ,come detto nel paragrafo sullo zaptel.conf e zapata.conf ,vengono inviate al contesto [incoming] . La prima estensione che parte è quella associata alla s (sigla di start) eseguendo le sottoelencate applicazioni : Apertura del canale con l’istruzione answer() 90 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP invio della voce registrata precedentemente sul canale con l’applicazione Background(Jnet-voice). WaitExten() per dar modo al chiamante di inserire il numero prescelto ed evitare quindi che una volta finita la voce registrata il canale si chiuda. FIGURA 5.8-extension.conf parte 1 91 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Dopo aver fatto ciò, ho definito le azioni che corrispondono ad ogni possibile scelta indicata dalla voce : tasto 1 :la chiamata viene inoltrata alla segretaria amministrativa individuata dall’utenza SIP 1002 per un tempo di 12 secondi con l’istruzione Dial (SIP/1002,12) . Se non si ottiene risposta la chiamata viene inoltrata con l’applicazione Dial (SIP/1001,12) alla segretaria commerciale per un tempo sempre di 12 secondi . Nell’eventualità ,molto rara a dire il vero, che non si ottenesse ancora risposta la chiamata viene inoltrata contemporaneamente ai due uffici amministrativi-commerciali dell’azienda con l’applicazione: exten=>2,n,Dial(SIP/1003,12&SIP/1004,12). Per sicurezza ho previsto il caso che anche quest’ultimo tentativo non vada a buon fine ,in questo caso disastroso per l’azienda( significa che la sede è deserta) la chiamata viene inoltrata alla voicemail con l’istruzione exten => 2,n,Voicemail(2@jnet). tasto 2 :la chiamata viene inoltrata alla segretaria commerciale individuata dall’utenza SIP 1001 per un tempo di 12 secondi con l’istruzione Dial (SIP/1001,12) . Se non si ottiene risposta la chiamata viene inoltrata con l’applicazione Dial (SIP/1002,12) alla segretaria amministrativa per un tempo sempre di 12 secondi . Nell’eventualità ,molto rara a dire il vero, che non si ottenesse ancora risposta la chiamata viene inoltrata contemporaneamente ai due uffici amministrativicommerciali dell’azienda con l’applicazione: Dial(SIP/1003,12&SIP/1004,12). Per sicurezza ho previsto il caso che anche quest’ultimo tentativo non vada a buon fine ,in questo caso disastroso per l’azienda( significa che la sede è deserta) la chiamata viene inoltrata alla voicemail con l’istruzione exten => 2,n,Voicemail(1@jnet). 92 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Tasto 3 : la chiamata viene inoltrata direttamente all’ufficio tecnico individuato dall’utenza SIP 1010 per un tempo di 12 secondi con l’istruzione Dial (SIP/1010,12) . Se non si ottiene risposta la chiamata viene inoltrata con l’applicazione Dial(SIP/1001,12&SIP/1002,12) contemporaneamente alla segretaria amministrativa e a quella commerciale per un tempo sempre di 12 secondi . Nel caso ,abbastanza raro, non si ottenesse ancora risposta la chiamata viene inoltrata alla voicemail con l’istruzione exten => 2,n,Voicemail(1@jnet). Tasto 0 : la chiamata viene inoltrata direttamente alla voicemail delle segretarie con l’applicazione Voicemail(1@jnet&2@jnet). Tasto 9 : con l’applicazione Goto(incoming,s,2)viene fatto ripartire interamente l’IVR. In questo modo ho definito un IVR in grado di gestirmi le chiamate entranti dalla PSTN. Quello che manca ora per costruire un centralino completo è la definizione del modo con cui vengono gestite le chiamate interne alla rete , i numeri per permettere agli utenti di poter ascoltare la propria voicemail e il modo con cui inoltrare la chiamate alla PSTN. Per risolvere il primo problema ho creato il contesto [interni]. Per semplificare la struttura in generale del dialplan e più in particolare del contesto interni ho fatto uso di una struttura tipica di asterisk : il pattern matching attraverso il quale si può creare un estensione che individui i diversi numeri degli utenti. I pattern (cioè i percorsi, le serie alfanumeriche) da confrontare devono iniziare per underscore (“_”)seguito da un numero o da uno questi caratteri: X, indica un numero qualsiasi; Z, indica un numero tra 1 e 9; N, indica un numero tra 2 e 9; 93 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP [14-6], indica un numero che sia 1, 4, 5 o 6; ., ovvero il punto, a indicare qualsiasi tasto. Per capire bene come il tutto funziona faccio un esempio riferendomi al mio dialplan. Nel contesto interni con l’istruzione _1XXX andiamo a inoltrare tutti i numeri compresi tra 1000 e 1999. L’inoltro avviene con la solita istruzione Dial(SIP/“Exten”,12) dove exten è una variabile asterisk in cui il sistema copia il numero digitato. Se un utente della rete interna chiama il numero 1001 la funzione dial corrispondente è come se fosse Dial (SIP/1001,12) cioè la chiamata viene inoltrata alla segretaria commerciale. A questo punto è chiaro perchè ho preferito usare dei numeri per definire i contesti SIP. Nel caso in cui non si avesse risposta la chiamata viene inoltrata alla voicemail con l’istruzione _1XXX,n,Voicemail(${EXTEN:3}@jnet). FIGURA 5.9-extension.conf parte 2 94 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP In questo caso ponendo dopo EXTEN “: 3” andiamo a prendere tutto ciò che si trova dopo le terza cifra. Ho definito poi la modalità con cui l’utente può accedere alla propria segreteria telefonica componendo un numero . Per ottenere ciò ho richiamato l’applicazione VoicemailMain passandogli il numero del chiamante come variabile. In tal modo ogni utente dovrà esclusivamente digitare 201 ed inserire la propria password richiesta. Per inoltrare la chiamate verso l’esterno infine ho definito un contesto [outgoing] nel quale ho specificato come trattare le chiamate a seconda della numerazione. Anche se questa differenziazione può sembrare superflua è stata necessaria sia per preparare il sistema alla configurazione di progetto dove le chiamate vengono differenziata per servizio richiesto ,sia perché ,per espresso desiderio dell’azienda, le chiamate devono essere instradate direttamente senza introdurre nessun prefisso. Per inoltrare la chiamata alla rete telefonica in asterisk si usa la solita istruzione Dial ma tra parentesi invece di SIP si usa ZAP (abbreviazione di zaptel). Guardando la figura 5.9 si vede che nel mio Dialplan ho differenziato le chiamate per servizio: Con l’istruzione exten => _8X.,1,Dial,Zap/2/${EXTEN} inoltro verso il canale zaptel 2 le chiamate verso numeri verdi Con l’istruzione exten => _1XX,1,Dial,Zap/2/${EXTEN} inoltro verso il canale zaptel 2 le chiamate verso i numeri di soccorso Con l’istruzione exten => _0X.,1,Dial,Zap/2/${EXTEN}inoltro verso il canale zaptel 2 le chiamate verso i numeri fissi Con l’istruzione exten => _3NX.,1,Dial,Zap/2/${EXTEN} inoltro verso il canale zaptel 2 le chiamate verso numeri di telefonia mobile L’ultima cosa mancante al mio dialplan per essere completo era definire i contesti a cui afferiscono gli utenti SIP e attraverso i quali interagiscono con il dialplan. 95 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Come si può notare nella figura 5.10,ho definito tre contesti che fanno riferimento alla struttura della azienda e permettono agli utenti SIP di poter accedere al sistema . Hanno tutti la stessa struttura: dopo la definizione del contesto sono inclusi,attraverso l’istruzione include, gli altri contesti necessari per l’instradamento della chiamata. Per spiegare meglio mi aiuto con un esempio : un utente SIP dell’area amministrativa alza la cornetta e digita un numero. Il numero digitato viene inoltrato al contesto amministrazione dove si cercherà come instradarlo. Il sistema prima cercherà una corrispondenza con il numero digitato nel contesto interni . Se non la trova passa al contesto outgoing e infine al voicemail. Nel caso in cui non trovasse nessuna corrispondenza chiude il canale e manda un messaggio di errore del tipo 6XX. Con questo la configurazione del centralino era terminata e quindi dopo averne testato il corretto funzionamento sono passato alla configurazione del server del CED. FIGURA 5.10-extension.conf parte 3 5.3.2 COSTRUZIONE TRUNK IAX CED-ROMA E CEDOPERATORE VoIP Nel server del CED alla stessa stregua di quello di Roma ho installato una distribuzione linux CentOS 5 e tutti i file necessari ad asterisk compreso lo zaptel . Essendo il CED una 96 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP sede virtuale (non ci sono uffici) non è stato necessario configurare utenze SIP. Tutto il mio lavoro su questa macchina è stato quindi realizzare i due trunk e il dialplan che permettesse la gestione delle chiamate sia tra le due sedi sia tra i due trunk. Detto questo il primo file che ho configurato è stato il sip.conf per realizzare il trunk verso l’operatore VoIP dell’azienda cioè Kebu. Per realizzare la registrazione ad un server in Asterisk si usa l’istruzione seguente: register=>username:password@indirizzo_IP /numero_interno Username: il nome utente assegnato dal operatore SIP Password: password assegnata dal operatore SIP Indirizzo_IP: l’indirizzo IP presso il quale si trova il server a cui ci si vuole registrare Numero_interno: è l’estensione con cui viene instradatala chiamata nel dialplan FIGURA 5.11-sip.conf CED 97 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Nel mio caso,come si può vedere nella fig. 5.11, come username e password ho usato quelli che mi sono stati assegnati da Kebu(criptati per sicurezza),come indirizzo IP quello SIP di kebu e come numero interno ho preferito usare il numero con cui siamo raggiungibili dagli altri utenti KEBU. Per far si che l’autenticazione sia completata, ho dovuto definire un account SIP necessario per registrare “l’utente” Kebu presso il CED,per identificare la provenienza della chiamata e per definire come deve essere instradata nel dialplan. Se la registrazione è andata a buon fine nella nostra CLI + digitando il comando sip show peers appare: FIGURA 5.12-SIP -CED-CLI I parametri presenti nel contesto sono per la maggior parte noti tranne nat=yes attraverso il quale indichiamo al sistema che si deve attraversare un nat. Una chiamata proveniente dalla rete kebu verrà passata nel dialplan secondo le specifiche dell’account SIP a cui fa riferimento,nel nostro caso sarà instradata verso il contesto [orario]. Per poter instaurare un trunk iax,invece, i due server devono effettuare una mutua autenticazione . Il metodo da me scelto per la fase di autenticazione/criptazione è l’RSA che rappresenta la soluzione più sicura tra quelle a disposizione. Per questo motivo ho dovuto creare con astgenkey† una coppia chiave pubblica -chiave privata(jnet.pub e jnet.key, jnetced.pub e jnetced.key) in entrambi i server. La chiave segreta deve essere memorizzata nella cartella delle chiavi di asterisk che si trova sotto la directory /var/lib/asterisk/keys . + † CLI è la command window di asterisk dove si può controllare lo stato del sistema e le fasi di una chiamata astgenkey : è un utility presente di default in asterisk che crea ,una volta lanciata, una coppia chiave pubblica – chiave privata. 98 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP La chiave pubblica invece deve essere spostata manualmente nella cartella delle chiavi del server presso il quale ci si deve registrare. Per la registrazione di un server presso l’altro si usa la funzione register. I parametri dell’istruzione sono gli stessi di quella definita per il trunk SIP: Username : il nome utente da me assegnato a ciascun server(nome del contesto definito nello iax.conf dell’altro server) Password : la password privata generata inserita tra parentesi quadre Indirizzo IP: indirizzo internet con il quel è raggiungibile l’altro server. FIGURA 5.13-Iax.conf_roma & Iax.conf_CED A differenza del trunk SIP non ho dovuto definire un numero interno in quanto questo è già presente nel messaggio che mi arriva dall’altro server(sarà più chiaro al momento delle presentazione del dialplan). Affinché l’autenticazione possa aver successo i dati inviati tramite l’istruzione register devono essere verificati dal server di destinazione. A questo scopo ho definito in ciascun server un contesto di identificazione per l’altro server quindi Roma nel CED e CED in 99 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Roma. La maggior parte dei parametri sono gli stessi che si usano per la definizione di un generico utente SIP mentre alcuni sono specifici della fase di autenticazione e sono: Auth : definisce il metodo di criptazione usato ,RSA per il mio progetto Inkeys : è l’opzione che definisce la chiave pubblica da usare per l’autenticazione RSA Trunk : è il parametro con il quale abilitiamo la creazione di un trunk e quindi permettiamo lo scambio tra due asterisk box di messaggi con il protocollo iax Deny /permit : vengono usati per negare /permettere l’accesso a determinate macchine. Per il mio progetto visto che i servers avevano un indirizzo IP statico ho preferito permettere l’accesso solo alla macchina identificata da un opportuno indirizzo IP( praticamente presso il server di roma si potrà autenticare solo il CED ). La chiamata in entrata viene quindi processata attraverso i parametri da me inseriti e solo se passa la verifica viene inviate al dialplan nel contesto specificato nell’account. A questo punto vediamo cosa bisogna aggiungere al dialplan di Roma per permettere l’instradamento verso il CED poi analizzeremo il dialplan del CED stesso. Nel dialplan di Roma ho dovuto aggiungere due contesti: Incoming Roma : è il contesto dove vengono inviate le chiamate provenienti dal CED CED : è il contesto dove ho indicato quali chiamate devono essere inviate al CED quindi nel mio caso particolare quelle con numerazione che inizia con il 4. Ho dovuto poi includere il contesto CED in quelli di amministrazione, commerciale e tecnico. Per inviare una chiamata verso il trunk ho usato la solita applicazione dial: exten => _4X.,n,Dial(IAX2/roma:[jnet]@/ 80.68.200.215/${EXTEN}) 100 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Questa volta però non mi basta passargli il nome utente ma devo passargli ,dopo la definizione del protocollo da usare,l’intero pack dei parametri di registrazione seguiti dal numero interno con il quale voglio che sia trattata la chiamata nell’altro server. Nella fig. 5.14 sono mostrati solo i cambiamenti effettuati sul dialplan. Per finire il paragrafo non mi rimane che analizzare il dialplan del CED presentato nella fig. 5.15 Nel CED dovevo provvedere ad inoltrare le chiamate provenienti da Roma verso la rete dell’operatore VoIP ed effettuare un controllo sulle chiamate in entrata instradandole verso gli uffici di Roma solo nel caso in cui si fosse in orario di ufficio. Il primo problema l’ho risolto creando un contesto in cui tutte le chiamate, aventi come estensione un numero iniziante con 4, vengono instradate verso la rete kebu. Le modalità con cui avviene questo inoltro sono le stesse presentate per il trunk di Roma verso il ced. FIGURA 5.14-modifiche apportate al dialplan di Roma 101 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Il secondo problema l’ho risolto utilizzando una particolare applicazione di asterisk la GoToIfTime. La sintassi di quest’ultima è: GotoIfTime(times,days_of_week,days_of_month,months?label) GotoIfTime invia la chiamata al contesto specificato nella label se la data e l’orario nel momento in cui si riceve la chiamata soddisfano i criteri specificati in times,days_of_week,days_of_month e months. Per i miei scopi ho dovuto usare due applicazioni GotoIfTime in sequenza per tener conto anche della pausa pranzo dove gli uffici sono praticamente vuoti. Nel caso in cui la chiamata arrivi fuori dagli orari di apertura partirà un voce registrata ,creata con il solito text-to specch, nel quale si spiega che gli uffici sono chiusi e si prega il chiamante di lasciare un messaggio in segreteria o eventualmente richiamare successivamente. Ricapitolando : una chiamata proveniente dalla rete Kebu viene instradata nel contesto account kebu. Attraverso l’applicazione GotoIfTime viene stabilito se si è in orario di ufficio o no . In caso affermativo la chiamata viene inoltrata al server di Roma dove verrà gestita dalla stessa voce elettronica usata per le chiamate provenienti da PSTN. FIGURA 5.15-extensions.conf _CED 102 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP 5.3.3 COSTRUZIONE TRUNK IAX TERNI-ROMA La costruzione di questo trunk risulta molto semplice in quanto sarà identica a quella fatta per il trunk CED-ROMA. In questo caso quello che ho fatto è stato: 1. A Terni avevo a disposizione per il momento due telefoni(uno per il segretario uno per i tecnici) quindi ho definito due account SIP come mostrato in fig. 5.16 2. ho creato una coppia chiave pubblica-chiave privata(jneterni.pub e jneterni.key) con astgenkey per il server di Terni mentre per Roma ho utilizzato la stessa coppia usata per il collegamento CED-Roma. 3. ho spostato manualmente la chiave pubblica di Roma nella cartella delle chiavi di Terni e la chiave di Terni nella cartella della chiavi di Roma. 4. ho creato i due account iax per la mutua identificazione ed ho impostato l’istruzione register con i parametri relativi dei due server come mostrato in fig 5.17 5. ho editato il file voicemail.conf per la gestione della casella vocale degli utenti di Terni ed ho definito un numero unico nel dialplan per ascoltarla(vedi fig.5.17). 6. ho creato nel file extension.conf un contesto [interni] per gestire le chiamate tra gli utenti (per il momento solo 2) di Terni ,un contesto [roma] per inviare le chiamate verso la sede centrale e un contesto incoming_terni per gestire le chiamate provenienti da Roma 7. ho modificato il dialplan di Roma introducendo un contesto [terni] per inviare verso Terni tutte le chiamate inizianti con il numero tre e con lunghezza pari a quattro cifre,un contesto incoming_terni in cui si specifica come trattare le chiamate provenienti da Terni e ho modificato i tre contesti amministrazione ,commerciale e tecnico in modo che potessero interfacciarsi con il contesto Terni e quindi inviare le chiamate verso al sede relativa come mostrato in fig.5.18 103 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP Figura 5.16- Sip.conf_Terni Figura 5.17-Iax.conf_Terni FIGURA 5.18-extensions.conf_Terni FIGURA 5.19-voicemail.conf_terni 104 CAPITOLO 5: REALIZZAZIONE DELLA RETE VoIP 5.4 CONCLUSIONI Ad oggi il sistema da me realizzato ,è perfettamente funzionante e gestisce tutte le chiamate in entrata e in uscita per la Jnet2000. Ho potuto riscontrare che la qualità della voce pur dipendendo dall’intensità del traffico sulla rete internet,risulta essere sempre intellegibile e gradevole . Per migliorarne la qualità si dovrebbe prevedere una LAN dedicata per il traffico VoIP. Questa era l’idea che volevo realizzare ma al momento non è stato possibile in quanto l’azienda è in procinto di ristrutturare completamente la rete interna. Per concludere voglio dire che è stata un’esperienza sicuramente positiva perché ho avuto modo di approfondire il VoIP, argomento trattato in modo non esaustivo,tenuto conto della relativa novità dello stesso nelle moderne telecomunicazioni,durante il corso degli studi. Ho potuto inoltre tradurre nella pratica ciò che avevo appreso a livello teorico confrontandomi quindi con i problemi reali connessi alla realizzazione di una rete VoIP. 105 INDICE DELLE FIGURE INDICE DELLE FIGURE CAPITOLO 2 FIGURA 2.1-Esempio di una rete a commutazione di pacchetto _____ Errore. Il segnalibro non è definito. FIGURA 2.2-Header del pacchetto RTP __________________ Errore. Il segnalibro non è definito. FIGURA 2.3- Esempio schematico Architettura H.323 ______ Errore. Il segnalibro non è definito. FIGURA 2.4 -Esempio di zona H.323____________________ Errore. Il segnalibro non è definito. FIGURA 2.5 –SCHEMA DI UN TERMINAL H.323 ________ Errore. Il segnalibro non è definito.3 FIGURA 2.6-Esempio di Gateway per PSTN ______________ Errore. Il segnalibro non è definito. FIGURA 2.7-Suite Protocollare H.323___________________ Errore. Il segnalibro non è definito. FIGURA 2.8-schema segnalazione H.323 ________________ Errore. Il segnalibro non è definito. FIGURA 2.9- ARCHITETTURA SIP ____________________ Errore. Il segnalibro non è definito. FIGURA 2.10-Formato del messaggio relativo al metodo INVITE ____ Errore. Il segnalibro non è definito. FIGURA 2.11-Formato dei messaggi di risposta ___________ Errore. Il segnalibro non è definito. FIGURA 2. 12-Chiamata SIP mediante Proxy Server _______ Errore. Il segnalibro non è definito. FIGURA 2.13-Chiamata SIP mediante Redirect Server ______ Errore. Il segnalibro non è definito. CAPITOLO 3 FIGURA FIGURA definito. FIGURA FIGURA FIGURA FIGURA FIGURA 3.1-Architettura interna di Asterisk ______________ Errore. Il segnalibro non è definito. 3.2-TDM400P scheda per asterisk presente nel nostro server Errore. Il segnalibro non è 3.3-semplice chiamata tra due host ______________ Errore. Il segnalibro non è definito. 3.4-Pacchetto IAX Full Frame _________________ Errore. Il segnalibro non è definito. 3.5-Valori assumibili dal campo Frame Type ______ Errore. Il segnalibro non è definito. 3.6-Codifiche video __________________________ Errore. Il segnalibro non è definito. 3.7-valori Control Frame _____________________ Errore. Il segnalibro non è definito. CAPITOLO 4 FIGURA 4.1-ambiente di progetto ______________________ Errore. Il segnalibro non è definito. FIGURA 4.2-Scenario rete Jnet2000 ____________________ Errore. Il segnalibro non è definito. CAPITOLO 5 FIGURA 5.1-Lista dei pacchetti richiesti per compilare zaptel,libpri e asterisk ________ Errore. Il segnalibro non è definito. FIGURA 5.2-Scheda TDM400P ________________________ Errore. Il segnalibro non è definito. FIGURA 5.3-File zaptel.conf sede di roma _______________ Errore. Il segnalibro non è definito. 106 INDICE DELLE FIGURE FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA FIGURA 5.4-zapata.conf del server di Roma ______________ Errore. Il segnalibro non è definito. 5.5-Sip.conf di roma 1 ________________________ Errore. Il segnalibro non è definito. 5.6-Sip.conf di roma _________________________ Errore. Il segnalibro non è definito. 5.7-vocemail.conf____________________________ Errore. Il segnalibro non è definito. 5.8-extension.conf parte 1 _____________________ Errore. Il segnalibro non è definito. 5.9-extension.conf parte 2 _____________________ Errore. Il segnalibro non è definito. 5.10-extension.conf parte 3 ____________________ Errore. Il segnalibro non è definito. 5.11-sip.conf CED ___________________________ Errore. Il segnalibro non è definito. 5.12-SIP -CED-CLI __________________________ Errore. Il segnalibro non è definito. 5.13-Iax.conf_roma & Iax.conf_CED ____________ Errore. Il segnalibro non è definito. 5.14-modifiche apportate al dialplan di Roma _____ Errore. Il segnalibro non è definito. 5.15-extensions.conf _CED ____________________ Errore. Il segnalibro non è definito. 5.16-Sip.conf_Terni __________________________ Errore. Il segnalibro non è definito. 5.17-Iax.conf_Terni __________________________ Errore. Il segnalibro non è definito. 5.18-extensions.conf_Terni ____________________ Errore. Il segnalibro non è definito. 5.19-voicemail.conf_terni _____________________ Errore. Il segnalibro non è definito. 107 BIBLIOGRAFIA BIBLIOGRAFIA 1. E. Whelan, C. Perkins,M. Handley. Session Announcement Protocol. [http://www.ietf.org/rfc/rfc2974.txt] s.l. : IETF, ottobre 2000. RFC 2974. 2. M. Handley, H. Schulzrinne,E. Schooler,J. Rosenberg. SIP: Session Initiation Protocol. [http://www.ietf.org/rfc/rfc2543.txt] s.l. : IETF, 1999. RFC 2543. 3. H. Schulzrinne, S. Casner,R. Frederick,V. Jacobson. RTP: A Transport Protocol for RealTime Applications. [www.ietf.org/rfc/rfc3550.txt] s.l. : IETF, luglio 2003. RTP. 4. R. Braden, L. Zhang,S. Berson, S. Herzog,S. Jamin. Resource ReSerVation Protocol (RSVP). [http://www.ietf.org/rfc/rfc2205.txt] s.l. : IETF, settembre 1997. RFC 2205. 5. H. Schulzrinne, A. Rao, R. Lanphier. Real Time Streaming Protocol (RTSP). [http://www.ietf.org/rfc/rfc2326.txt] s.l. : IETF, aprile 1998. RFC 2543. 6. M. Handley, V. Jacobson. SDP: Session Description Protocol. [http://www.ietf.org/rfc/rfc2327.txt] s.l. : IETF, aprile 1998. RFC 2543. 7. C. Groves, M. Pantaleo, T. Anderson,T. Taylor,T. Taylor. Gateway Control Protocol Version 1. [http://www.ietf.org/rfc/rfc3525.txt] s.l. : IETF, giugno 2003. RFC 3525. 8. R. Fielding, J. Gettys,J. Mogul,H. Frystyk,L. Masinter, P. Leach,T. Berners-Lee. Hypertext Transfer Protocol -- HTTP/1.1. [http://www.ietf.org/rfc/rfc2616.txt] s.l. : IETF, giugno. RFC 2616. 9. T. Berners-Lee, L. Masinter,L. Masinter. Uniform Resource Locators (URL). [http://www.ietf.org/rfc/rfc1738.txt] s.l. : IETF, dicembre 1994. RFC 1738. 10. Resnick, P. Internet Message Format. [http://www.ietf.org/rfc/rfc2822.txt] s.l. : IETF, aprile 2001. RFC 2822. 11. B. Capouch, M. Spencer,E. Guy, F. Miller,K. Shumard. IAX: Inter-Asterisk eXchange Version 2. [http://tools.ietf.org/id/draft-guy-iax-04.txt] s.l. : IETF, marzo 2008. Internet Draft(expires 1/10/2008). 12. H. Schulzrinne, S. Petrack. RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals. [http://www.ietf.org/rfc/rfc2833.txt] s.l. : IETF, maggio 2000. RFC 2833. 108 BIBLIOGRAFIA 13. Jim Van Meggelen, Leif Madsen, and Jared Smith. Jim Van Meggelen, Leif Madsen, and Jared Smith. Second edition. s.l. : O'RELLY, 2007. 14. Mahler, Paul. VoIP Telephony with Asterisk. ISBN 09759992-0-6. 15. Diego Gosmar, Giuseppe Innamorato, Dimitri Osler, Stefano Osler. Asterisk e dintorni. s.l. : Apogeo, 2006. ISBN 88-503-1041-2. 16. Digium company. asterisk. [Online] Digium. http://www.asterisk.org/. 17. J. Davidson, J.Peter,M.Bhatia,S.Kalidindi,S.Mukherjee. Fondamenti di Voice over IP. s.l. : Pearson Paravia Bruno Mondadori editori S.P.A., 2008. 109