Archive

Archive for February 18th, 2009

Asterisk – Configurare i Provider Voip [settima parte]

February 18th, 2009 1 comment

SIP Service Provider Account

[AGGIORNATO CON ALTRO ESEMPIO]

Si trovano su Internet moltissimi siti che offrono servizio di VoIP Provider.
E’ possibile utilizzare Asterisk sia per quei provider che forniscono solo un numero entrante, sia per quelli che permettono chiamate in uscita e naturalmente per quelli che ti danno entrambe questi servizi.

Asterisk distingue nella configurazione del file sip.conf l’attivazione dei tre tipi di servizi sopra indicati in modo differente.

type=peer –> può solo inviare chiamate

type=user –> può solo ricevere chiamate

type=friend –> può inviare e ricevere

user e peer hanno delle opzioni specifiche che hanno funzionalità differenti, il friend le eredita entrambe. In generale utilizziamo il friend quando uno user agent (per es. un soft phone) si registra ad asterisk, usiamo un peer quando è asterisk che si registra a qualcuno e gestisce le chiamate in uscita, useremo uno user quando dobbiamo ricevere delle chiamate da qualcuno esternamente quando è sempre asterisk che si registra (o quando vogliamo che l’user agnt possa sopo ricevere). In pratica quelli che si comportano come interni saranno dei friend, i trunk saranno dei peer/user.

PEER

Quando si definisce un peer tra [  ] si dovrà mettere un nome che è puramente indicativo e non indica il suo username; il campo host ha lo scopo di specificare dove inviare le chiamate (sarà sempre l’ip del Provider e non sarà dynamic poichè è lui che deve registrare). A differenza dell’ “user” il “peer” non prevederebbe il context, che definisce l’arrivo delle chiamate, visto che può solo uscire. E qui le cose si complicano perchè invece si può utilizzare poichè c’è un’eccezione gestita da asterisk, dove, se non vede uno user abbinato al peer usa il context definito dal peer stesso. Questo molto spesso ci evita di definire lo user e di usare il peer per gestire entrambe le cose, anche se può portare confusione

(I peers) hanno invece il campo “host” per specificare dove inviare le chiamate.

Il “peer” ha un campo username e password dove viene definito lo username e la password che permettono l’autenticazione con il peer remoto. (Nota che quando definisci uno user lo username va dentro le parentesi quadre, mentre quando definisci un peer lo username va messo nel campo username)

Per inviare le chiamate al peer SIP si possono  usare le seguente sintassi:

Dial(SIP/extension@peername) <– il peername è quello tra parentesi quadre:

o

Dial(SIP/peername/extension) <– l’extension è il numero che voglio chiamare

Per inviare le chiamate al peer IAX si può  usare solo al seguente sintassi:

Dial(IAX2/peername/extension)

La registrazione

Se il tuo IP è dinamico o il tuo provider non conosce il tuo indirizzo IP, è necessario registrarsi periodicamente con il server in modo tale che il tuo provider possa sempre conoscere l’indirizzo a cui inviare le chiamate. Per fare questa cosa si deve utilizzare (sia in sip.conf che in iax.conf) il comando “register”

Sintassi:

register => user[:secret]@host[:port][/extension]

Esempio register => nome:password@voipprovider.com

USER

Esempio base:

[test] <– sezione
type=user
secret=password
context=incoming
<– Quando arriva la chiamata per l’utente “test” la chiamata viene inviata nel contesto specificato (in questo caso incoming)

network options: E’ possibile permettere o bloccare un range di IP con i comandi “permit” e deny”:

[test]
type=user
secret=password
context=incoming
deny=0.0.0.0/0
permit=192.168.1.5
permit=192.168.2.100
permit=10.16.5.0/24
permit=172.16.100.0/255.255.255.0

codec options: E’ possibile specificare quali e in quale ordine usare determinati codec

[test]
type=user
secret=password
context=incoming
disallow=all
allow=gsm
allow=ulaw

FRIENDS

Un friend è sia un user che un peer

I friends sono una semplice scorciatoia per configurare degli endpoint (telefoni IP). Sono anche utilizzati per i più comuni sip provider (sipgate, sipcall, Gizmo, messagnet)

Altri SIP Provider (come per esempio Eutelia) vogliono come configurazione user e peer separati

Per uno user, Asterisk non richiede l’autenticazione username/password se non è presente la voce “secret=”. Per un friend generalmente dobbiamo specificare una “secret” per le nostre connessioni in uscita. Se il friend è un Provider Voip questo prima di instaurare la connessione manda un invite ad Asterisk il quale a questo punto si aspetta un autenticazione da parte del provider per poter terminare la sissione SIP. Chiaramente nessun provider invia questa informazione. Per questo motivo è possibilie utilizzare il seguente comando per saltare l’autenticazione:

insecure=invite,port (vedi anche questo link)

Esempio TRUNK SIP

Vediamo come configurare i trunk SIP. E’ importante ricordarsi che la registrazione va fatta alla fine del contesto [general]

sip.conf

;*******************************************
;*** GLOBAL SETTING

[general]
;context=default

context=from_outside ; –questo è il context che sta in extensions.conf vale solo per le  chiamate sip in ingresso a meno che non sia specificato un context nel peer o nello user –;
realm=class.digium.com
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
allow=gsm
language=en

;*******************************************
;*** REGISTER STATEMENTS

register => training1:training@192.168.1.100

;*******************************************
;*** FRIENDS, USER AND PEERS…

[6001]
type=friend
host=dynamic
secret=zoiper
context=users
mailbox=6001@default

[6002]
type=friend
host=dynamic
secret=polycom
context=users
mailbox=6002@default

[to_sipprovider]
type=peer
username=training1
fromuser=training1
fromdomain=example.com
secret=training
canreinvite=no
insecure=invite,port
host=192.168.1.100
deny=0.0.0.0/0
permit=192.168.1.100
disallow=all
allow=gsm
allow=ulaw
allow=alaw
qualify=yes
nat=no

NB: il comando insecure=invite,port viene utilizzato perchè Asterisk generalmete richiede la peer di inviargli le credenziali per poter accettare la chiamata ma non tutti i provider mandano tali informazioni. Con questo comando si dice ad Asterisk di non fare tali richieste ed accettare le chiamate in ingresso.

extension.conf


;*******************************************
;*** GLOBAL SETTING FOR EXTENSION

[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=no
priorityjumping=no

;*******************************************
;*** GLOBAL SETTING FOR variables

[globals]

;*******************************************
;*** EXTENSION CONTEXT

[from_outside]
include => inside

[users]
include => inside
include => features

[inside]
exten => 6001,1,Dial(SIP/6001,20)
exten => 6001,n,VoiceMail(6001@default)

exten => 6002,1,Dial(SIP/6002,20)
exten => 6002,n,VoiceMail(6002@default)

[features]
exten => 6599,1,Answer()
exten => 6599,n,Playback(hello-world)
exten => 6599,n,wait(2)
exten => 6599,n,Playback(good-evening)
exten => 6599,n,Hangup()
exten => 6598,1,Goto(demo-menu,s,1)

exten => 6601,1,Goto(day-menu,s,1)

;per ascoltare i messaggi
exten => 6500,1,Answer()
exten => 6500,n,VoiceMailMain(@default)

;Outbound extension
exten => 6700,1,Dial(SIP/6000@to_sipprovider)

;Record The Day Menu
exten => 6600,1,Answer()
exten => 6600,n,Wait(0,5)
exten => 6600,n,Record(day-menu.gsm)
exten => 6600,n,Wait(1)
exten => 6600,n,Playback(day-menu)

[demo-menu]

[day-menu]

IAX2 ITSP Account

Nel file iax.conf aggiungere (dove sono già esistenti e commentati gli esempi di register) la seguente riga:


register => training1:training@192.168.1.100

Per quanto riguarda l’inserimento dell’user account utilizziamo (invece del friend) due utenze separate per chiamate in uscita (peer) e chiamate in ingresso (user):


[to_iaxprovider]
username=training1
secret=training
type=peer
auth=md5
transfer=no
host=192.168.1.100
disallow=all
allow=gsm
allow=ulaw
allow=alaw
qualify=yes
trunk=yes

[training1]
type=user
auth=md5
transfer=no
disallow=all
allow=gsm
allow=ulaw
allow=alaw
secret=training
context=from_outside

In extensions.conf aggiungiamo la chiamata verso il provider IAX


[features]
...
;Outbound extension
exten => 6700,1,Dial(SIP/6000@to_sipprovider)
exten => 6701,1,Dial(IAX2/to_iaxprovider/6000)
...

[AGGIORNAMENTO]

Vediamo un altro esempio in cui il nostro Provider ci fornisce un account voip basato sul proxy sip OpenSER

Dati forniti dal Provider


username: 655
password: pwd655
sip proxy: sip.provider.net

configurazione sip.conf

[general]
language=it
registerattempts=0
registertimeout=80

context=default                 ; Default context for incoming calls

register => 633:pwd633@sip.provider.net/633

[6001]
;type=user
type=friend
host=dynamic
secret=zoiper
context=supercall

[to_sip]
type=peer
context=from_provider_voip ;per le chiamate in ingresso
username=633
fromuser=633 ;serve per sovrascrivere lo username (qui sarebbe 6001)
secret=pwd633
host=sip.provider.net
fromdomain=sip.provider.net
qualify=yes
insecure=invite,port

se non viene indicato il context allora verrà considerato quello indicato nella sezione general (in questo caso quello di default)

configurazione extension.conf

Vogliamo che le chiamate entranti dall’account VoIP vengano inoltrate sull’interno 6001 e che solo quest’ultimo possa utlizzare il provider in uscita mettendo come prefisso 88

[local]
exten => _600X,1,Dial(SIP/${EXTEN},20)


[to_provider_voip]
exten => _88X.,1,Dial(SIP/${EXTEN:2}@to_sip)

[from_provider_voip]
exten => 633,1,Dial(SIP/6001,20)

[supercall]

include => local
include => to_provider_voip

Categories: Articolo Tecnico, Voip Tags: