VoIP e Asterisk/Interconnessione tra server VoIP

Indice del libro

Abbiamo visto nei paragrafi precedenti la definizione degli utenti, sia SIP che IAX. Solitamente si crea un utente sul server Asterisk che verrà utilizzato da un hard-phone o un soft-phone, ma non è l'unico caso in cui si utilizza un'utenza Asterisk.

Asterisk, oltre a funzionare da server VoIP, può all'occorrenza fare anche da client VoIP rendendo così possibile creare una interconnessione tra vari server Asterisk, ognuno sia client che server per l'altro.

Quello che fa Asterisk non è altro che utilizzare una delle utenze definite come dati per effettuare il login su un Asterisk esterno, e non come login da controllare per gli eventuali accessi sulle porte in ascolto.

La differenza che c'è tra il comportamento del client Asterisk e di un client VoIP normale è che per un client VoIP normale la connessione sarà destinata all'utente del PC e il flusso multimediale verrà riprodotto sullo stesso computer. Invece per un client Asterisk le connessioni in ingresso seguiranno un iter diverso, nel dialplan verrà deciso cosa fare, se destinarla magari a una casella vocale, o redirigerla al client finale tramite una Dial(). La distinzione perciò non è netta e separata, si può equiparare Asterisk a un client VoIP evoluto. Distinzione che si fa ancora più sfumata per le chiamate in uscita, per chiamare un client che non è connesso al medesimo server su cui si è connessi bisogna utilizzare la notazione estesa “username@centralino2”, altrimenti verrà considerato utente locale, utilizzando questa notazione il server locale utilizzerà una interconnessione in uscita.

Si creano così una serie di interconnessioni, le cui proprietà sono definite nell'utente utilizzato nell'interconnessione. Tra le impostazioni personalizzabili vi è la direzionalità delle comunicazioni (solo in ingresso, solo in uscita, bidirezionale), codec con i quali codificare il flusso multimediale, username/password da utilizzare per l'autenticazione, indirizzo del server VoIP al quale spedire i dati (utilizzato per le connessioni in uscita) o il contesto in cui le chiamate entreranno (utilizzato per le connessioni in ingresso).

Le interconnessioni, chiamate anche trunk, sono configurabili sia utilizzando SIP che IAX.

Come primo passo dobbiamo creare un utente, poi registrare questo utente sul server remoto, supponendo che ci interessi solamente le connessioni in ingresso via IAX:

register => USER:PASS@server2
; registrazione sul server2
[trunk-in]
type=user
; solo chiamate entranti
context=incoming
; le chiamate in ingresso andranno sul context “incoming” e
; sull'estensione “s”

Dall'altra parte creeremo il rispettivo utente che faccia solamente le connessioni in uscita:

[trunk-out]
type=peer
; solo chiamate uscenti
host=dynamic
; non si conosce l'indirizzo di server1, è per questo che
; in server1 è necessario utilizzare il comando “register”
; se qua ci fosse scritto
;host=server1
; il register non sarebbe necessario.
username=USER
secret=PASS
; uguali a quelli su server1

Questo esempio serve per creare un'interconnessione solamente in un senso: le comunicazioni potranno transitare solamente da server2 a server1, non viceversa. Per abilitare anche l'altro senso si può o creare un'altra interconnessione nel verso opposto (scelta consigliata se bisogna impostare opzioni diverse per le comunicazioni nei due versi), oppure creare un'interconnessione bidirezionale. Ecco un esempio di interconnessione bidirezionale, utilizzando il protocollo SIP:

Server1:

[voip-provider]
type=friend
host=voipprovider.com
username=pincopallino
secret=PASS
context=ufficio

Server2:

[pincopallino]
type=friend
host=IP di pincopallino
secret=PASS
context=funny-people-box

Una volta completato il settaggio delle interconnessioni, come gran parte delle feature di Asterisk, per essere utilizzate vanno integrate nel dialplan, ecco un esempio (fatto sulla struttura dell'esempio precedente, su server1):

[ufficio]
exten => s,1,Playback(welcome)
exten => s,2,Queue(support)
; le chiamate in ingresso entrano nella coda “support”
exten => _0.,1,SetCallerID(“Pinco Pallino <0522XXXXXXX>”)
exten => _0.,2,Dial(SIP/${EXTEN:1}@voip-provider)
exten => _0.,3,Playback(invalid)
exten => _0.,4,Hangup
; le chiamate uscenti (quelle che iniziano con “0”) vengono
; dirottate sull'username identificato dal numero chiamato tolto
; lo zero iniziale, utente che risiede sul server voip-provider
; per uscire utilizzera così l'account voip-provider creato
; precedentemente