Un PBX VoIP open-source (e non solo)

Dopo un prolungato silenzio da parte mia, affrontiamo un’altra installazione, stavolta non proprio banale.

Personalmente, lavorando come libero professionista, ho sempre sentito l’esigenza di dare un riferimento telefonico “di lavoro”. Per questo motivo, quando si è posta la questione, ho optato per la sottoscrizione di un contratto ISDN. La linea ISDN, oltre a fornire due canali indipendenti (quindi si possono fare due telefonate contemporanee), ha altri benefici, quasi tutti dovuto al fatto di essere una linea digitale. Nella fattispecie, è possibile associare ad una linea fisica più di un numero telefonico (fino ad un massimo di 8, se ricordo bene). Ad esempio, è quindi possibile richiedere un numero aggiuntivo per lo studio, uno per il fax ed un quarto (compreso quello di base) per il router :-)
Certo, tanta versatilità si paga in termini di canone, ma comunque costa meno di due linee tradizionali in parallelo, su cui poi il multinumero ve lo scordate ;-)
Comunque questo articolo non vuole magnificare l’ISDN o l’unico provider italiano che la fornisca (indovinate chi è?), bensì queste righe vogliono essere solo l’introduzione per spiegarvi dove si può arrivare con questa configurazione.

Ovviamente il qui presente vostro relatore aveva tranquillamente connesso un fax (ISDN pure quello) alla linea configurandolo per rispondere al suo numero. Il problema è che queste dannate fax machine, specie se comprate usate e scarsamente utilizzate, tendono a guastarsi (la gomma si imporrisce, l’inchiostro si secca, qualcosa si rompe) e, una volta “a piedi”, vi chiedete chi ve la fa fare di comprarne un’altra, specie ora che avete il vostro fido server FreeBSD sempre acceso a servire gli accessi al vostro dominio.

Ed è così che vi avvicinate al mondo dei soft PBX (la sigla sta per Personal Branch Exchange, in italiano centralino), delle schede ISDN e (tadaaaaaaa) del VoIP! Ma andiamo con ordine. Il soft PBX altro non è che un applicativo che ha tutte le funzionalità di un centralino: gestisce interni, passa le chiamate, propone una musica di attesa, ha una segreteria telefonica incorporata etc. Anche in questo caso, essendo “soft”, ci ritroviamo in realtà ad una serie di caratteristiche molto amplificate, un po’ come il paragone tra la linea telefonica normale e l’ISDN. Se poi il soft PBX lo prendete open source, ecco che il gioco è fatto: troverete mille personalizzazioni e sarete sempre in grado di farne voi stessi, qualora ne sentiate il bisogno. Asterisk, in particolare, è in grado di svolgere tutte le funzioni citate e non solo: riceve e manda fax, effettua conferenze tra più interlocutori, consente la gestione di IVR (Interactive Voice Response, i classici risponditori automatici che dicono “premere 1 per questo, 2 per quello etc”), è integrato con i database, gestisce delle code di chiamate, …

Per quanto riguarda la galassia delle schede ISDN, per un uso personal/ludico quale quello proposto qui non c’è altra soluzione che usare una scheda passiva per un accesso base ISDN (BRI, Basic Rate Interface). La descrizione delle schede multiBRI o delle schede PRI (30 canali) esula da questo contesto, anche perché non ne posseggo e non posso fare i test. Se qualche operatore mi vuole omaggiare di un flusso PRI a casa, ben venga! Queste schede passive si trovano comunemente in commercio con il nome di “modem ISDN” e tutto sono fuorché modem (un modem trasforma segnali analogici in digitali e viceversa, la scheda ISDN non trasforma un bel niente essendo digitale su entrambi i lati), ma hanno la virtù di costare veramente poco (intorno ai 15 €, sì, avete letto bene, quindici). L’unico problema è che il vostro diavoletto non le supporta :-( Lo stack ISDN presente di default in FreeBSD, infatti, è molto primitivo e supporta solo alcune schede attive. I più attenti si saranno accorti che ho detto “presente di default”: è possibile difatti applicare una patch al kernel ed al world per aumetnare la compatibilità di FreeBSD con le schede esistenti.

Infine, il VoIP (Voice over IP), ovvero la trasmissione della fonia su Internet. Ormai è un fenomeno di costume, grazie anche a Skype e confratelli vari. Tutti voi mi saprete sicuramente dire a cosa serve il VoIP. Vedo laggiù una mano alzata? Sì, è giusto. Serve a pagare meno le telefonate. Da un punto di vista fisico, la telefonata classica (analogica) implica la creazione di un circuito tra il telefono del mittente e quello del ricevente. Creare il circuito, ma più che altro creare l’infrastruttura in grado di commutare i vari circuiti alla bisogna, è un compito costoso, specie sulle lunghe distanze. Il VoIP, viceversa, consente di trasmettere la voce attraverso la rete IP, quindi non c’è un circuito fisico dedicato alla telefonata, ma i dati viaggiano dal vostro “telefono” al router, da questo agli apparati del provider, quindi si instradano insieme a tutto il traffico esistente fino al provider del destinatario, da cui passano al suo router e quindi al suo telefono. Il tutto condiviso con migliaia di altri utenti, alcuni dei quali telefonano, altri scaricano pagine HTML etc. Costa molto meno var viaggiare la telefonata su un circuito non dedicato, ecco perché le telefonate VoIP costano meno di quelle tradizionali. Ovviamente, se vi dovete interfacciare con un interlocutore non VoIP, è necessario che chi vi offre il servizio VoIP effettui una trasformazione dei dati da digitali ad analogici e provveda a richiedere un circuito dedicato fino al telefono fisico dell’interlocutore. Se state facendo un’interurbana o un’internazionale, questa cosa avverrà tipicamente quanto più vicino al destinatario possibile, per minimizzare il costo della telefonata “normale”.

Fin qui la letteratura, ma in pratica a voi a cosa serve il VoIP? Nella mia situazione ci sono vari possibili usi:

  • mettere in casa/studio/azienda dei telefoni VoIP che sfruttano la cablatura standard per la rete, o meglio la rete wireless se l’avete
  • gestire una segreteria telefonica che, oltre a consentire la registrazione dei messaggi, vi invii il file audio via mail
  • ricevere fax (anche questi via mail, in formato PDF)
  • trasmettere fax (sempre via mail)
  • usare il telefono VoIP senza limitazioni a giro per il mondo per fare/ricevere chiamate usando la vostra linea di casa
  • stupire gli amici creando per loro degli account VoIP sul vostro server?

Cosa vi serve per ottenere tutto questo? Sicuramente un server, che può tranquillamente essere una macchina Linux ma personalmente preferisco FreeBSD per motivi che non sto qui a spiegarvi. Sicuramente vi serve anche una connessione ADSL, altrimenti il VoIP lo usate solo all’interno della vostra rete. Opzionalmente vi serve una linea telefonica e l’opportuna scheda di interfaccia.

Le possibili configurazioni sono estremamente vaste: potete installare il tutto su una macchina che usate per test (poco più che un giocattolo), potete mettere il tutto in parallelo ai vostri telefoni standard, se invece avete già un centralino potete mettere il server come interno del centralino o viceversa (e questo è un uso interessante, anche se significa veicolare tutte le telefonate dal server).

Ovviamente le possibili topologie offrono vantaggi e rischi diversi. Vi basti pensare che, mentre un telefono analogico connesso ad una linea funziona pressoché sempre (funzionavano anche nel 2003 quando ci fu il blackout che “spense” quasi tutta l’Italia), un telefono VoIP è molto più delicato, facendo affidamento sia sull’alimentazione che sulla connettività che potete mettere a disposizione. In mancanza di una delle due, il telefono resta muto. Questi fattori vanno attentamente valutati in sede di un’installazione di produzione, specialmente per ambienti a rischio (là dove si tratti la salute pubblica, ad es.). Si può scegliere comunque di “fare il salto” fornendo al sistema un certo grado di sicurezza, con i classici sistemi di ridondanza ed i gruppi di continuità per l’alimentazione. Va da se che configurazioni del genere hanno un costo decisamente diverso dal server tirato su per gioco in casa, quindi si deve attentamente valutare se il gioco valga la candela, ma i prezzi per le telefonate VoIP depongono molto a favore di questa tecnologia.

In questo articolo, comunque trascureremo volutamente queste implicazioni, anche perché il sottoscritto, convinto che “fidarsi è bene, ma non fidarsi è meglio” ha scelto una configurazione in parallelo: se va via la corrente, la segreteria potrà non funzionare, ma i telefoni restano operativi. Certo che la tentazione di passare a VoIP puro è tramendamente forte, specie dopo aver saggiato la qualità delle telefonate :-)
Vediamo quindi passo per passo quali sono le attività per entrare in questo fantastico mondo.

Come prima cosa, dovrete procurarvi una scheda ISDN. Come detto, ce ne sono di vari tipi, che si differenziano in base all’accesso ISDN supportato (BRI/PRI), al tipo di interfaccia (ISA/PCI/USB) e all’intelligenza a bordo della scheda (attiva/passiva). Quelle da 15 euro sono schede BRI PCI passive. La differenza tra schede attive e passive è che le prime montano a bordo un apposito processore per la gestione dei segnali analogici (DSP, Digital Signal Processor), mentre le seconde affidano tutta l’elaborazione alla CPU del server. Googolando un po’, si vede che la migliore tra le schede BRI PCI passiva è quella che monta il chip HFC-S PCI della Cologne Chip. Questo tipo di schede si trova in vendita con varie marche (Asus, Billion per citarne alcune), e fondamentalmente sono tutte uguali.

Una volta installato l’hardware nel vostro fido server, è il momento di configurare il kernel per riconoscere la scheda. Come detto, il supporto ufficiale di FreeBSD per le schede ISDN è vecchio e limitato, quindi la prima cosa da fare è scaricare il nuovo stack I4B di HPS dal sito http://www.turbocat.net/~hselasky/isdn4bsd/

Hans Peter sviluppa un driver ISDN e uno USB per FreeBSD che supporta pressoché tutte le versioni dalla 5.2 in avanti. Per l’installazione è necessario avere l’albero dei sorgenti di BSD (tutto, kernel + userland), in quanto il driver è fornito in forma sorgente e va compilato in loco.

In realtà il vostro, essendo un patito delle versioni -CURRENT, non ha certo scaricato il pacchetto dal sito, bensì ha configurato Subversion per scaricare l’ultima versione (epr la cronaca, per installare Subversion usate i port devel/subversion). La revisione utilizzata è stata la 431, con un singolo file preso dalla revisione 439 perché Hans Peter ha corretto un bug sulla gestione del protocollo di livello 2 dietro mia segnalazione.

Scaricate quindi i sorgenti in una qualunque directory temporanea (ma non troppo: la procedura la usa anche per fare i backup del vecchio kernel) tramite il comando:

svn checkout -r 431 svn://svn.turbocat.net/i4b

poi aggiornare il file del layter 2 con il comando

svn update -r 439 i4b/trunk/i4b/src/sys/i4b/dss1/dss1_l2fsm.c

e poi preparate il pacchetto di installazione con i comandi:

cd i4b/trunk/i4b/FreeBSD.i4b
make S=../src package

Queste operazioni non fanno altro che preparare due tar contenenti i file così come li avreste scaricati dal sito suddetto. Adesso potete procedere all’installazione, che comporterà:

  • la copia in /usr/include/i4b degli include dello stack I4B
  • la compilazione di vari programmi dello userland (pressoché tutti quelli che iniziano con isdn) e la relativa installazione in loco (incluse le man pages)
  • la sovrascrittura dei sorgenti del kernel per quanto riguarda lo stack I4B
  • il backup del kernel esistente e dei programmi userland modificati

Per procedere all’installazione, se i sorgenti di FreeBSD sono nella classica directory /usr/src, è sufficiente il comando (da eseguire come root)

make install

Completato questo step, sarà necessario configurare il kernel aggiungendo al file le seguenti direttive (fate “make help” per farvele stampare a video):

#
# ISDN4BSD v.1.6.2 for FreeBSD 6/7 - November 2006
#
# I4B section
#
options IPR_VJ
device "i4bdss1"
device "i4b"
device "i4btrc"
device "i4bctl"
device "i4brbch"
device "i4btel"
device "i4bipr"
device "i4bisppp"
#
# If you need more than 8 units please
# edit "/usr/src/sys/i4b/include/i4b_global.h",
# until further.
#

device ihfc
device usb
#device pcm
#or device sound
#if device pcm does not exist

e ricompilarlo con i soliti comandi (make buildkernel/make installkernel). Mi raccomando, è necessario aggiungere uno dei due device pcm o sound, in base alla vostra versione di FreeBSD. Ma tanto ve ne accorgete: se non lo mettete non compila ;-) Una volta compilato ed installato il nuovo kernel, facciamo un reboot per verificarne la funzionalità. A questo proposito si può utilizzare il comando capitest, che verifica la funzionalità di tutto lo stack tramite il driver CAPI (Common API for ISDN).

capitest -i vostro_numero_di_telefono -o numero_da_chiamare

Procediamo quindi con l’installazione di Asterisk utilizzando il port net/asterisk, che installerà un mare di altra roba tra cui spandsp (un DSP software che serve per ricevere e trasmettere i fax sulle schede passive) e zaptel (che in teoria sarebbe un modulo per il kernel che contiene il driver anche per le schede passive che uso io, ma avendo provato solo la versione 0.x e non essendo riuscito a farla funzionare ho l’abbandonato in favore del driver CAPI). Il port zaptel, comunque, vi torna utile in quanto Asterisk lo usa come sorgente di clock per el conference call e ma musica di attesa. A questo scopo è necessario abilitare il caricamento dei moduli zaptel.ko e ztdummy.ko modificando il file /usr/local/etc/rc.d/zaptel ed in particolare le due righe che contengono l’elenco dei moduli da lanciare, che devono essere

kmod_load="zaptel.ko ztdummy.ko"
kmod_unload="ztdummy.ko zaptel.ko"

ed inserendo in /etc/rc.conf la riga

zaptel_enable="YES"

Visto che siete lì, aggiungete anche

asterisk_enable="YES"

Dobbiamo ora collegare Asterisk al driver I4B. Il colelgamento è effettuato utilizzando il driver CAPI 2.0 presente in I4B. Per Asterisk è necessario compilare un “channel driver” per aggiungere il supporto CAPI. Il channel driver è compreso nella directory scaricata con SVN, ed in particolare risiede in i4b/trunk/chan_capi. Per compilarlo è necessario utilizzare il make della GNU, che dovrebbe essere stato installato quando avete compilato il package di Asterisk, ma a mali estremi risiede in devel/gmake. Il comando per compilare il driver è

gmake clean
gmake

e poi lo si può installare con il comando (da eseguire come root)

gmake install
gmake samples

L’ultimo comando installerà una configurazione di test sotto /usr/local/etc/asterisk/capi.conf. Tale file va modificato per adattarsi alla vostra installazione. In particolare dovrete correggere la linea incomingmsn inserendovi il vostro numero di telefono senza lo zero iniziale. Io ho dovuto scommetnare anche la linea dtmf_generate altrimenti non riuscivo a navigare negli IVR esterni tramite i miei softphone. Per default il file censisce due schede, se ne avete una sola la seconda la potete eliminare.

Configurazione di Asterisk

Asterisk ed i firewall

Asterisk ed i DNS


can i take viagra Vitamins For Erectile Dysfunction viagra how it works?
herbal viagra forums Ziac Erectile Dysfunction “snorting viagra health”
viagra patent levitra Uk Viagra Sales viagra anxiety
Taking viagra woman target google viagra order cheap 470. Male Impotence Drugs cheap gerneric viagra
generic viagra levitra and cialis pills Ed Homeopathic Treatment can i take viagra
viagra how it works? Cialis Levia And Viagra herbal viagra forums
“snorting viagra health” Ed Treatment Stimulation viagra patent levitra
viagra anxiety Viagra Warning Taking viagra woman target google viagra order cheap 470.
cheap gerneric viagra Viagra And Blood Pressure generic viagra levitra and cialis pills
can i take viagra Ed Keating Center Treatment Services viagra how it works?
herbal viagra forums Muse Erectile Dysfunction “snorting viagra health”
viagra patent levitra Natural Viagra viagra anxiety
Taking viagra woman target google viagra order cheap 470. Erectile Dysfunction Treatment Options cheap gerneric viagra
generic viagra levitra and cialis pills New Drugs For Erectile Dysfunction can i take viagra
viagra how it works? Dysfunction Erectile Prilosec herbal viagra forums
“snorting viagra health” Warning Smoking Causes Male Sexual Impotence viagra patent levitra
viagra anxiety Co Ed Treatment Centers Taking viagra woman target google viagra order cheap 470.
cheap gerneric viagra Make Your Own Viagra generic viagra levitra and cialis pills
can i take viagra Viagra And Alcohol viagra how it works?
herbal viagra forums Male Impotence Pills All Brands Ratings “snorting viagra health”
viagra patent levitra Erectile Dysfunction Institute viagra anxiety
Taking viagra woman target google viagra order cheap 470. Buy Viagra Online Uk cheap gerneric viagra
generic viagra levitra and cialis pills Viagra Canadian Pharmacy can i take viagra
viagra how it works? Sickle Cell Disease And Male Impotence herbal viagra forums
“snorting viagra health” Free Erectile Dysfunction Pills viagra patent levitra
viagra anxiety Viagra Song Taking viagra woman target google viagra order cheap 470.
cheap gerneric viagra Latest Treatment For Ed generic viagra levitra and cialis pills
can i take viagra Viagra Erection Duration viagra how it works?
herbal viagra forums Male Impotence Treatment “snorting viagra health”
viagra patent levitra Pravachol And Erectile Dysfunction viagra anxiety
Taking viagra woman target google viagra order cheap 470. Male Impotence Pill cheap gerneric viagra
generic viagra levitra and cialis pills Tadalafil Male Impotence Drugs can i take viagra
viagra how it works? Cause Of Male Impotence herbal viagra forums
“snorting viagra health” Otc Ed Treatment viagra patent levitra
viagra anxiety Viagra For Woman Taking viagra woman target google viagra order cheap 470.
cheap gerneric viagra What Does Viagra Do generic viagra levitra and cialis pills
can i take viagra Recreational Viagra viagra how it works?
herbal viagra forums Guaranteed Cheapest Viagra “snorting viagra health”
viagra patent levitra Viagra And Hearing Loss viagra anxiety
Taking viagra woman target google viagra order cheap 470. Symptoms Of Erectile Dysfunction cheap gerneric viagra
generic viagra levitra and cialis pills Buy Viagra Meds Online can i take viagra
viagra how it works? Ed Treatment Facilities For Pregnant herbal viagra forums
“snorting viagra health” Psychogenic Ed Holistic Treatment viagra patent levitra
viagra anxiety Best Pills For Erectile Dysfunction Taking viagra woman target google viagra order cheap 470.
cheap gerneric viagra Ed Treatment Analysis generic viagra levitra and cialis pills
can i take viagra Buy Viagra Per Pill viagra how it works?
herbal viagra forums Joe Barton Erectile Dysfunction Report “snorting viagra health”
viagra patent levitra Male Sexual Aides For Impotence viagra anxiety
Taking viagra woman target google viagra order cheap 470. Viagra Order Uk cheap gerneric viagra
generic viagra levitra and cialis pills Ed Video Treatments can i take viagra
viagra how it works? Erectile Dysfunction Treatment Hgh Sex herbal viagra forums

Lascia un Commento

Devi aver fatto il login per inviare un commento