Eccoci al secondo capitolo che trasforma un semplice PC in un valido PBX.

La prima parte è consultabile cliccando qui.

Mi ero fermato all’installazione dei pacchetti Debian di Asterisk:


apt-get install asterisk asterisk-bristuff asterisk-config asterisk-dev asterisk-sounds-extra asterisk-sounds-main

Finita l’installazione, va configurato Asterisk.


Partiamo dal file /etc/asterisk/modules.conf che si occupa di caricare i moduli necessari per le varie feature messe a disposizione dal programma.
Per quanto riguarda la mia configurazione ho disabilitato alcune cose che non mi servicano, infatti nel file ho inserito:


noload => app_capiCD.so
noload => app_capiHOLD.so
noload => app_capiRETRIEVE.so
noload => app_capiECT.so
noload => app_capiMCID.so
noload => app_capiNoES.so
noload => res_config_odbc.so
noload => res_odbc.so
noload => cdr_odbc.so
noload => rate_engine.so
noload => chan_modem_aopen.so
noload => chan_modem_bestdata.so
noload => cham_modem_i4l.so
noload => chan_skinny.so
noload => chan_agent.so
noload => func_odbc.so
noload => cdr_sqlite.so
noload => cdr_sqlite3_custom.so
noload => res_musiconhold.so

Siccome la nostra scheda viene vista attraverso i moduli zaptel, è necessario configurare il file /etc/zaptel.conf per settare i parametri del modulo congrui alla nostra scheda ISDN.
Nel mio caso ho effettuato queste modifiche:


span=1,1,3,ccs,ami
bchan=1,2
loadzone=it
defaultzone=it

Salviamo questo file e rivviamo il modulo zaptel o meglio riavviamo il nostro home server.

Adesso passiamo al prossimo file: zapata.conf che contiene le impostazioni necessarie a far funzionare la nostra scheda ISDN vista tramite il modulo zaptel.

Le modifice da me inserite nel file sono solo queste:

language=it
context=isdn
switchtype=euroisdn
pridialplan=unknown
prilocaldialplan=unknown
internationalprefix=00
nationalprefix=0
signalling=bri_cpe_ptmp
echotraining=100
channel =>1-2
group=1

Language è abbastanza esplicito, context è il contesto di riferimento da gestire successivamente nel file extensions.conf, switchtype è settato euroisdn perché è lo standard usato in Italia da Telecom sulle borchie ISDN, signalling seleziona il tipo di connessione ISDN utilizzato, nel caso comune è point to multi-point.
Con channel diciamo ad Asterisk quanti canali abbiamo e a che gruppo appartengono (tramite group).

Passiamo adesso a configurare il file iax.conf, necessario per utilizzare IAXModem che serve ad avere un modem fax in Hylafax.

Questi sono i parametri necessari per un corretto funzionamento:

bindport=4569
bindaddr=127.0.0.1
iaxcompat=yes
nochecksums=no
delayreject=yes
amaflags=default
language=it
bandwidth=high
allow=all
;disallow=lpc10
jitterbuffer=yes
forcejitterbuffer=yes
dropcount=0
maxjitterbuffer=800
maxjitterinterps=400
resyncthreshold=1000
maxexcessbuffer=80
minexcessbuffer=10
jittershrinkrate=1
trunktimestamps=no
minregexpire = 300
maxregexpire = 300
mailboxdetail=no
regcontext=iaxregistrations

Dopo queste impostazioni è necessario creare l’utente per IAXModem.
Tale operazione va eseguita sempre nel file iax.conf ma prima è meglio cancellare gli account di default.
Per farfe questo ho rimosso tutte le righe presenti dopo ; The valid values are: ed a fine file ho creato l’utentenecessario:

[iaxmodem]
username=iaxmodem
secret=[PASSWORD]
accountcode=iaxmodem
type=friend
context=iax
;host=127.0.0.1
host=dynamic
notransfer=yes
qualify=yes
disallow=all
allow=alaw
allow=ulaw
allow=slinear

Fatto ciò è il turno di sip.conf, ed ecco infatti le modifiche da me apportate:

realm=Asterisk
srvlookup=no
tos=lowdelay
maxexpiry=3600
defaultexpiry=120
checkmwi=10
recordhistory=yes
disallow=all
allow=g729 ; questo codec va comprato a parte dal sito Digium
allow=alaw
allow=ulaw
language=it
rtptimeout=60
rtpholdtimeout=300
trustrpid = no
progressinband=never
useragent=Asterisk PBX
promiscredir = no
usereqphone = no
dtmfmode = info
compactheaders = yes
registertimeout=20
externhost=
externrefresh=10
localnet=[LAN]/[SUBNET_LAN]
nat=yes
rtcachefriends=yes
rtupdate=yes
;[authentication]

Alcuni parametri inseriti serviranno a superare l’ostacolo dovuto al NAT e quindi vanno settati con meticolosa cura appoggiandosi anche a servizi gratuti come quelli di Dyndns.org per avere un host che punta sempre al nostro IP pubblico dinamico.

Adesso bisogna creare una connessione verso Eutelia, per fare questo ecco la configurazione:

register=>[NUMERO_EUTELIA]:[PASSWORD_EUTELIA]:[NUMERO_EUTELIA]@eutelia/[NUMERO_EUTELIA]
[eutelia]
username=[NUMERO_EUTELIA]
context=portability-casa
type=peer
srvlookup=no
secret=[PASSWORD_EUTELIA]
realm=voip.eutelia.it
qualify=yes
nat=yes
insecure=very
host=voip.eutelia.it
fromuser=[NUMERO_EUTELIA]
fromdomain=voip.eutelia.it
disallow=all
allow=g729
allow=alaw
allow=ulaw

Modificate i parametri in base al vostro account ed occhio alla direttiva context, è importante perché viene richiamata all’interno del file extensions.conf che permette la comunicazione tra i vari peers collegati al PBX.

Adesso creiamo gli utenti SIP che costituiranno gli interni telefonici.
Io ho usato una parte diversa in base all’account:

[701]
type=friend
context=sip-ufficio
secret=[PASSWORD_701]
username=701
callerid=SIP Ufficio <701>
accountcode=701
[702]
type=friend
context=sip-fax
secret=[PASSWORD_702]
username=702
fromuser=SIP Fax <702>
callerid=SIP Fax <702>
accountcode=702
[703]
type=friend
context=sip-casa
secret=[PASSWORD_703]
username=703
callerid=SIP Casa <703>
accountcode=703

ed una parte comune che va incollata subito dopo accountcode:

amaflags=billing
port=5060
host=dynamic
nat=no
disallow=all
allow=alaw
allow=ulaw
allow=gsm
qualify=yes
canreinvite=no
dtmfmode=info
incominglimit=1

In pratica ho creato tre numeri interni del tipo 70X dove, il 701 è l’interno SIP sul quale verranno instradate le chiamate provenienti dal numero primario della linea ISDN, il 702 è quello riservato al FAX che si appoggerà al secondo numero ISDN ed il 703 è l’interno su cui verranno inoltrate le chiamate provenienti da Eutelia su cui ho effettuato la number portability del numero di casa.

Tutta la magia viene fatta tramite il file extensions.conf che ho modificato in questo modo:

;CONSOLE=Console/dsp
;IAXINFO=guest
;TRUNK=Zap/g2
;TRUNKMSD=1

Dopo ;[context] vanno inserite le rotte di comunicazione:

[default]
[portability-casa]
exten => _X.,1,Dial(SIP/703) ; numero di portability di casa
exten => _X.,2,Hangup
[sip-ufficio]
exten => [MIO_NUMERO_CASA],1,Dial(SIP/703) ; se viene chiamato il numero di casa non inoltro la chiamata su linee esterne
exten => _X.,1,set(CALLERID(number)=[NUMERO_ISDN_PRIMAIO]) ; e' superfluo visto perche' e' numero principale
exten => _X.,2,Dial(Zap/1/${EXTEN})
exten => _X.,3,Hangup
[sip-fax]
exten => _X.,1,set(CALLERID(number)=[NUMERO_ISDN_SECONDARIO])
exten => _X.,2,Dial(Zap/2/${EXTEN})
exten => _X.,3,Hangup
[sip-casa]
exten => [MIO_NUMERO_UFFICIO],1,Dial(SIP/701) ; se viene chiamato il numero dell'ufficio non inoltro la chiamata su linee esterne
exten => _X.,1,Dial(SIP/${EXTEN}@eutelia) ; per chiamare l'esterno uso Eutelia
exten => _X.,2,Dial(Zap/2/${EXTEN})
exten => _X.,3,Hangup
[isdn]
; Per le telefonate dell'ufficio
exten => [MIO_NUMERO_UFFICIO],1,Dial(SIP/701)
exten => [MIO_NUMERO_UFFICIO],2,Hangup
; Per i FAX
exten => [MIO_NUMERO_FAX],1,Dial(IAX2/iaxmodem/${EXTEN})
exten => [MIO_NUMERO_FAX],2,Hangup

Le righe successive alla parte dove avete inserito le vostre rotte sono di esempio e quindi le potete benissimo cancellare.

Adesso secondo me è il caso di spiegare cosa ho appena scritto.

Abbiamo:

  • una ISDN con due numeri
  • 3 interni SIP: 701,702,703
  • un utente IAX per il modem fax

Bene, assodato questo il routing è così fatto:

  • qualsiasi chiamata che arriva dall’account SIP di Eutelia verrà recapitato all’interno 703
  • se arriva una chiamata al numero [MIO_NUMERO_UFFICIO], cioè proveniente dalla linea ISDN con numero primario, squillerà l’interno numero 701
  • all’arrivo di un fax proveniente dal secondo numero ISDN identificato con [MIO_NUMERO_FAX], verrà contattato il canale IAX2 che funge da modem per Hylafax.
  • se dall’interno numero 701 compongo il numero di casa [MIO_NUMERO_DI_CASA], non verrò usato il canale ISDN ma verrà direttamente contattato l’interno 703
  • stessa cosa vista poco fa ma il chiamate è il 703 ed il chiamato sarà 701 così non passo per Eutelia nel voler contattare l’ufficio
  • in uscita l’interno 701 passerà per l’ISDN con numero principale
  • in uscita l’interno 702 passerà per l’ISDN con numero secondario
  • in uscita l’interno 703 userà Eutelia (attualmente faccio passare anche questo su ISDN…)

Ovviamente dovete sostituire i campi di questo tipo: [MAIUSCOLO], con i numeri ISDN in possesso.

Per qualsiasi dubbio sull’instradamento delle chiamate potete contattarmi oppure consultare Voip-Info.org che è straricco di materiale utile alla corretta configurazione di Asterisk.

Adesso dovremmo avere un PBX funzionante.

Per far in modo che Asterisk si avvi bisogna modificare il file /etc/default/asterisk e settare:

RUNASTERISK=yes

Adesso lanciamo Asterisk con:

/etc/init.d/asterisk start

e corriamo a vedere il log per eventuali problemi:

tail -vf /var/log/asterisk/message

Tutto ok? Bene adesso è il turno del FAX…che vedremo nella terza parte. ;)