wiki:OctoPhone

Centralino VOIP

Infrastruttura

In previsione della realizzazione di un nuovo componente per la gestione dei telefoni VoIP all'interno di Octofuss, si riportano qui le configurazioni da eseguire per il funzionamento del centralino telefonico basato su Asterisk che in futuro potrà essere integrato nel Fuss Server.

L'architettura si basa sulla presenza di un nodo centrale che verrà usato come centrale di smistamento per le chiamate fra le scuole, ciascuna scuola avrà a sua volta un server Asterisk con una configurazione di default che consenta di gestire le chiamate fra i telefoni IP interni alla scuola ed inviare al nodo di smistamento le telefonate verso le altre scuole.

Si è scelto di adottare una numerazione interna per i telefoni VoIP basata su cifre di 4 numeri, delle quali le prime due servono da prefisso ed indicano la scuola, mentre le seconde due indicano l'interno. I test sono stati effettuati su tre scuole, con la seguente assegnazione dei numeri:

Numero Scuola
10XX Scuola Media E. Fermi
11XX Scuola Elementare G. Rodari
12XX Scuola Elementare A. Tambosi

Per l'inserimento di una nuova scuola sarà necessario utilizzare un diverso numero di prefisso, non si devono utilizzare prefissi inizianti per il numero 0 che è riservato per usi futuri.

Server Asterisk Locale

Il primo passo per l'uso dei servizi VoIP è la configurazione del server Asterisk nella singola scuola, anzitutto occorre installare i seguenti pacchetti con:

aptitude install  asterisk asterisk-prompt-it  asterisk-config ntp

(il servizio NTP serve per mantenere sincronizzati fra loro e col server o telefoni).

Il server Asterisk non sarà avviato fintanto che non si definisca a yes la variabile RUNASTERISK in /etc/default/asterisk, lo si faccia ma non si avvii il servizio fino a che non si siano effettuate le impostazioni di base illustrate di seguito.

Il primo passo è eseguire la configurazione dei servizi SIP che verranno utilizzati dai telefoni VoIP per collegarsi al server, per semplificare la gestione delle chiamate si è scelto di adottare una numerazione progressiva dei telefoni all'interno della singola scuola, con una definizione degli account SIP nella forma NomescuolaNN. Il file di configurazione di Asterisk che contiene l'elenco dei telefoni è /etc/asterisk/sip.conf e per ciascun telefono sarà allora necessario inserire in coda al file installato di default da Debian una voce del tipo di:

[Scuola01]
type=friend
mailbox=01
username=Scuola01
secret=XXXXXX
host=dynamic
context=lanscuola
Callgroup=1
pickupgroup=1
call-limit=10

dove XXXXX è una password associata all'account SIP, che sarà quella che insieme all'username dovrà essere opportunamente configurata sul telefono SIP. Nel precedente esempio si sostituisca alla stringa Scuola nella il nome effettivo della scuola nelle due occorrenze della stessa. In caso di più telefoni si prosegua con nomi progressivi Scuola02, Scuola03 ecc.

La configurazione dei telefoni SIP che andranno ad interfacciarsi con il server dipende dal produttore e dal singolo modello utilizzato, per questo non esiste una configurazione generica e si è riportato sulla pagina SipPhoneConfigs un elenco di configurazioni per ciascuno di quelli già utilizzati con successo. Benché non necessario alla configurazione del server sarà opportuno eseguire anche questa configurazione prima di avviarlo.

Il secondo passo è quello di configurare i numeri telefonici interni associati agli account SIP appena definiti, e per questo di deve usare il file /etc/asterisk/extensions.conf, aggiungendo in coda a quello installato di default le seguenti linee

[lanscuola]
include => parkedcalls

exten => _13XX,1,Dial(SIP/Scuola${EXTEN:2},40,tT)
exten => _XXXX,1,Dial(IAX2/scuola-centro/${EXTEN},40,r)

exten => t,1,Hangup()

dove la prima linea con exten indica come verranno effettuate le chiamate ai numeri locali, che per la scuola in questione si assumono essere sempre nella forma NNXX, dove NN è il codice usato per la nuova scuola (nel caso il 13) mentre XX dovrà corrispondere al numero definito in precedenza per l'account SIP. In sostanza con questa riga si dice che con 1301 si chiamerà il telefono associato a Scuola01, con 1302 quello associato a Scuola02, e così via.

La seconda riga dice invece di mandare tutte le chiamate corrispondenti a qualunque altro numero al nodo centrale per lo smistamento, per questo occorre il terzo ed ultimo passo della configurazione di Asterisk, che prevede la creazione del canale di comunicazione con il nodo centrale. Per questo si deve usare il file /etc/asterisk/iax.conf, aggiungendo in coda a quello installato di default una voce del tipo:

[scuola-centro]
type=friend
host=pbx.fuss.bz.it
username=scuola-centro
secret=XXXXXXX
context=lanscuola
trunk=yes

oltre a questo occorrerà inserire nella sezione [general] posta all'inizio del file (in una posizione qualunque) la seguente riga:

register => scuola-centro:XXXXXXX@pbx.fuss.bz.it

(dove XXXXXXX è la password usata per il canale).

In questo caso occorrerà anche abilitare il server per ricevere pacchetti sulla porta 4569 UDP, usata dal protocollo IAX per la comunicazione, pertanto sarà opportuno inserire la seguente riga nel file /etc/fuss-server/firewall-external-services:

4569/udp:IAX2 per Asterisk

e riavviare il firewall.

A questo punto sarà possibile avviare Asterisk con /etc/init.d/asterisk start (si ricordi di modificare /etc/default/asterisk come indicato all'inizio).

Server Asterisk Centrale

Il nodo centrale svolge il ruolo di nodo di smistamento delle chiamate da parte dai server delle varie scuole, ma può essere anche configurato (se posto in una scuola) per gestire i telefoni della stessa, nel qual caso la parte riguardante la configurazione di /etc/asterisk/sip.conf è identica alla precedente, e in /etc/asterisk/extensions.conf comparirà una riga exten => _13XX,1,Dial(SIP/Scuola${EXTEN:2},40,tT) analoga alla precedente (ovviamente con un suo numero diverso al posto del 13 con un nome diverso rispetto a Scuola).

Quello che serve in più in questo caso sone due cose: la prima è la configurazione per fare da nodo di smistamento dei canali IAX, questo significa che in /etc/asterisk/iax.conf dovrà apparire, per ciascuna scuola che si deve collegare, una voce corrispondente a quella posta sul server della scuola, ma nella forma:

[scuola-centro]
type=friend
host=dynamic
username=scuola-centro
secret=XXXXXXX
context=lanscuola
trunk=yes

dove la password XXXXXXX è la stessa da entrambe le parti, e senza la presenza della riga register => ... che in questo caso non serve in quanto sono le macchine delle singole scuole a registrarsi presso il server centrale.

La seconda parte è quella che prevede le istruzioni per instradare le chiamate verso la nuova scuola appena aggiunta al centro di smistamento, da fare di nuovo dentro /etc/asterisk/extensions.conf. In questo caso per ciascuna scuola si dovrà inserire una nuova riga che indica come raggiungerla, di nuovo questo sarà fatto in coda al file con una voce del tipo:

[lanscuola]
include => parkedcalls

...
exten => _11XX,1,Dial(IAX2/rodari-centro/${EXTEN},40,r)
exten => _12XX,1,Dial(IAX2/tambosi-centro/${EXTEN},40,r)
...
exten => _13XX,1,Dial(IAX2/scuola-centro/${EXTEN},40,r)

exten => t,1,Hangup()

dove [lanscuola] è una etichetta (che indica il contesto, e deve corrispondere al valore assegnato alla context nelle definizioni degli account SIP e IAX).

Oltre a questo si può gestire sul server centrale anche l'uso di audioconferenze, in cui più persone, telefonando ad uno stesso numero, vengono poste in conferenza fra loro, in modo che ciascuno senta tutti i partecipanti alla conferenza che parlano tramite il loro telefono. Per far questo occorrono alcune configurazioni ulteriori sul server centrale, e l'installazione di software aggiuntivo, ed in particolare del modulo zaptel che fornisce una base dei tempi necessaria al server per sincronizzare le chiamate. Per questo occorrerà anzitutto eseguire la seguente installazione di pacchetti:

aptitude install zaptel zaptel-source

dopo di che occorrerà compilare oppurtunamente il modulo, per questo serve il comando:

module-assistant a-i zaptel

che installa i pezzi necessari, esegue la compilazione ed installa il modulo compilato per il kernel corrente. Fatto questo si potrà caricare immediatamente il modulo che serve per la conferenza con il comando:

modprobe ztdummy

e per avere il caricamento automatico all'avvio basterà aggiungere una riga con ztdummy al file /etc/modules. Si tenga presente però che il modulo viene compilato per il kernel corrente, per cui se si aggiorna il kernel o se ne installa uno ad hoc sarà necessario ripetere la procedura di compilazione con module-assistant.

Una volta installato il necessario per la configurazione devono essere eseguite due operazioni. La prima è la definizione delle conferenze che deve essere fatta tramite il file /etc/asterisk/meetme.conf, per questo basta aggiungere in coda alla versione installata di default delle righe analoghe alle seguenti:

...
[rooms]
...
conf => 9999
conf => 9998,1234

nel primo caso si è definita una conferenza ad accesso libero, nella seconda una conferenza protetta da un codice di accesso (il numero dopo la virgola), un PIN che occorrerà digitare sul telefono dopo aver digitato il numero associato alla conferenza. I numeri usati in questo file per identificare una conferenza sono del tutto arbitrari, ma per pulizia vale la pena usare gli stessi che verranno usati come numeri telefonici per contattare la conferenza.

La seconda operazione è quella di definire i numeri telefonici a cui saranno raggiungibili le conferenze in /etc/asterisk/extension.conf, per questo si tratta di aggiungere sotto le definizioni dei numeri delle varie scuole, delle linee analoghe alle seguenti:

[lanscuola]
include => parkedcalls
...
exten => _13XX,1,Dial(IAX2/scuola-centro/${EXTEN},40,r)
...
; Conference call
exten => 9999,1,Meetme,9999  ; no pass
exten => 9998,1,Meetme,9998  ; pass

exten => t,1,Hangup()

ed in questo modo chiamando il numero 9999 si andrà sulla prima conference call, che non richiede autenticazione, mentre con il numero 9998 si andrà sulla seconda, per accedere alla quale verrà richiesto un PIN, che ne caso corrisponde a 1234, come indicato in precedenza in meetme.conf.

Last modified 8 years ago Last modified on Mar 11, 2009, 4:26:54 PM