Minor Change: eliminate references to Jose Maria's recipe.
Goal (short description)
Goal of this HOWTO is to configure VoIP gateway between SIP and E1 using opensource PBX Asterisk.
Applicability
It is applicable for:
- VoIP provider who wants to offer services for customers unsing EuroISDN PRI as conectivity to PSTN
- Organisation whichs want to connect their existing PBX with EuroISDN PRI or QSIG port(s) to SIP provider
- Organisation which wants to interconect two existing PBXes with EuroISDN PRI or QSIG connectivity using IP and SIP
Prerequisites (OS, dependencies on other software)
- Server with some linux distribution
- ISDN30 PCI card inside this server
- PBX with EuroISDN or QSIG connectivity or EuroISDN PRI connectivity to PSTN
Configuration (OS agnostic)
Install Asterisk
First it is needed to install Asterisk. In most distributions, this should be easy because Asterisk is packaged with your distro. So use your distribution package manager to install. This howto is not made to focus on installation step. See 3.1.2. Setting up SIP voice services for an institution with Asterisk (Jose Maria-draft)
Install HW drivers
You have to be sure that drivers for your ISDN PRI card are working. Simplest way is probably to install zaptel drivers (or it is together with your Asterisk package from your distro). See 3.1.2. Setting up SIP voice services for an institution with Asterisk (Jose Maria-draft)
Ensure that hardware is working
If your hardware is working, you should be able to see something like:
Code Block |
---|
Wiki Markup |
h1. Goal (short description) Goal of this HOWTO is to configure VoIP gateway between SIP and E1 using opensource PBX *Asterisk*. h1. Applicability It is applicable for: * VoIP provider who wants to offer services for customers unsing EuroISDN PRI as conectivity to PSTN * Organisation whichs want to connect their existing PBX with EuroISDN PRI or QSIG port(s) to SIP provider * Organisation which wants to interconect two existing PBXes with EuroISDN PRI or QSIG connectivity using IP and SIP h1. Prerequisites (OS, dependencies on other software) * Server with some linux distribution * ISDN30 PCI card inside this server * PBX with EuroISDN or QSIG connectivity or EuroISDN PRI connectivity to PSTN h1. Configuration (OS agnostic) h2. Install *Asterisk* First it is needed to install *Asterisk*. In most distributions, this should be easy because *Asterisk* is packaged with your distro. So use your distribution package manager to install. This howto is not made to focus on installation step. See [3.1.2. Setting up SIP voice services for an institution with Asterisk] h2. Install HW drivers You have to be sure that drivers for your ISDN PRI card are working. Simplest way is probably to install zaptel drivers (or it is together with your *Asterisk* package from your distro). See [3.1.2. Setting up SIP voice services for an institution with Asterisk] h2. Ensure that hardware is working If your hardware is working, you should be able to see something like: {code} cat /proc/zaptel/1 Span 1: WCT1/0 Digium Wildcard TE110P T1/E1 Card 0 HDB3/CCS/CRC4 ... {code} |
Please
...
ensure
...
that
...
/proc/zaptel
...
exists
...
and
...
that
...
there
...
are
...
enaught
...
rights
...
to
...
/dev/zap/
...
*
...
for
...
your
...
asterisk
...
process.
...
Configure
...
Layer1
...
and
...
Layer2
...
parameters
...
This
...
parameters
...
are
...
set
...
by
...
/etc/zaptel.conf
...
(change
...
xx
...
to
...
your
...
country
...
code
...
(eg.
...
uk
...
or
...
de).
...
Disable
...
crc4
...
if
...
your
...
operator
...
or
...
PBX
...
does
...
not
...
support
...
it.
...
Next
...
important
...
thing
...
is
...
WHO
...
will
...
be
...
master
...
of
...
clocks.
...
In
...
most
...
situations,
...
networtk
...
part
...
will
...
act
...
as
...
clock
...
source,
...
but
...
ask
...
your
...
operator,
...
if
...
you
...
should
...
be
...
master
...
or
...
not.
...
Misconfiguration
...
of
...
this
...
will
...
do
...
strange
...
errors
...
in
...
framing.
...
zaptel.conf
Code Block |
---|
} loadzone = xx defaultzone = xx # PRI TE span=1,1,0,ccs,hdb3,crc4 ; I am clock master ;span=1,0,0,ccs,hdb3,crc4; Remote side is clock master bchan=1-15 dchan=16 bchan=17-30 {code} |
Next,
...
it
...
is
...
needed
...
to
...
set
...
layer3
...
parameters
...
and
...
PBX
...
specific
...
parameters.
...
It
...
is
...
stored
...
in
...
/etc/asterisk/zapata.conf.
...
Use
...
same
...
language
...
code
...
as
...
above.
...
Use
...
swtichtype
...
ISDN
...
because
...
it
...
has
...
best
...
support
...
within
...
asterisk.
...
Qsig
...
is
...
not
...
implemented
...
well.
...
Select
...
signalling
...
(either
...
cpe
...
for
...
end
...
device
...
and
...
net
...
for
...
master
...
device).
...
In
...
most
...
situation,
...
your
...
asterisk
...
gateway
...
will
...
act
...
as
...
CPE
...
because
...
your
...
telecomunication
...
operator
...
act
...
as
...
network
...
device
...
(master).
...
Dialplan
...
is
...
unknown,
...
it
...
means
...
that
...
there
...
will
...
be
...
no
...
automatic
...
country
...
or
...
PBX
...
prefixes
...
for
...
calling
...
and
...
we
...
will
...
do
...
this
...
in
...
dialplan
...
(better
...
solution).
...
Echoparaeters
...
are
...
needed
...
for
...
echocancelation
...
to
...
work.
...
But
...
it
...
can
...
be
...
time
...
consuming
...
process
...
to
...
find
...
source
...
of
...
echo
...
and
...
cancelate
...
it.
...
And
...
you
...
can
...
never
...
be
...
sure
...
that
...
it
...
will
...
not
...
appear
...
in
...
some
...
calls.
...
See
...
http://www.voip-info.org/wiki/view/Asterisk+echo+cancellation&view_comment_id=13700
...
for
...
more
...
informations.
...
Immediate
...
means
...
if
...
calling
...
to
...
your
...
asterisk
...
will
...
be
...
routed
...
to
...
called
...
number
...
into
...
dialplan.
...
Next,
...
we
...
have
...
to
...
setup
...
calling
...
groups.
...
In
...
this
...
scenario,
...
we
...
have
...
only
...
one
...
calling
...
group
...
which
...
spans
...
all
...
available
...
channels
...
on
...
card.
...
We
...
can
...
group
...
only
...
some
...
of
...
them
...
or
...
more
...
cards
...
together.
...
Any
...
call
...
to
...
your
...
Asterisk
...
box
...
will
...
be
...
routed
...
into
...
fpstn
...
context
...
(see
...
above).
...
zapata.conf
Code Block |
---|
} [channels] language=xx switchtype = euroisdn signalling = pri_cpe pridialplan = unknown prilocaldialplan = unknown echocancel=64 echotraining = 150 echocancelwhenbridged=yes ;txgain=-4 ;rxgain=-4 immediate=no group = 1 context = fpstn channel => 1-15,17-30 acountcode = fpstn {code} |
Next,
...
we
...
have
...
to
...
setup
...
SIP
...
side
...
of
...
our
...
gateway.
...
We
...
will
...
do
...
this
...
in
...
/etc/asterisk/sip.conf.
...
We
...
will
...
not
...
allow
...
unauthenticated
...
clients
...
(we
...
will
...
route
...
them
...
into
...
context
...
guest,
...
see
...
above).
...
Set
...
your
...
realm
...
and
...
domain
...
to
...
something
...
usefull
...
which
...
should
...
be
...
unique.
...
Putting
...
your
...
real
...
domain
...
there
...
is
...
realy
...
good
...
point
...
of
...
start.
...
But
...
remember,
...
this
...
domain
...
and
...
realm
...
setting
...
has
...
to
...
corespond
...
to
...
settings
...
in
...
client,
...
see
...
above.
...
Only
...
opensource
...
codecs
...
are
...
enabled
...
by
...
default.
...
If
...
you
...
buy
...
or
...
own
...
g.729
...
codec,
...
you
...
can
...
enable
...
it.
...
Again,
...
set
...
language
...
to
...
fit
...
your
...
needs.
...
Localnets
...
are
...
defined
...
to
...
better
...
recognisation
...
of
...
NAT.
...
Lines
...
starting
...
with
...
jb
...
are
...
turning
...
on
...
jitterbuffer
...
which
...
is
...
good
...
to
...
enable.
...
Next,
...
we
...
define
...
phones
...
which
...
we
...
will
...
use.
...
In
...
example,
...
we
...
use
...
3-digit
...
dialplan
...
and
...
we
...
are
...
starting
...
with
...
number
...
200.
...
Define
...
next
...
sip
...
clients
...
to
...
fit
...
your
...
needs.
...
It
...
is
...
good
...
if
...
username
...
corespond
...
with
...
peer
...
name
...
(name
...
in
...
[]).
...
It
...
is
...
possible
...
to
...
use
...
database
...
for
...
storing
...
SIP
...
users,
...
which
...
is
...
better
...
for
...
bigger
...
systems,
...
but
...
it
...
is
...
not
...
scope
...
of
...
this
...
document.
...
See
...
http://www.voip-info.org/wiki/view/Asterisk+RealTime+Sip
...
or
...
http://www.sineapps.com/news.php?rssid=1105
...
for
...
more
...
informations.
...
sip.conf
Code Block |
---|
} [general] context=guest ; Default context for incoming calls (non authenticated) realm=somecompany.com domain=somecompany.com disallow=all ; First disallow all codecs ;allow=g729 allow=gsm allow=alaw allow=ulaw language=xx ; Default language setting for all users/peers localnet=192.168.0.0/255.255.0.0; All RFC 1918 addresses are local networks localnet=10.0.0.0/255.0.0.0 ; Also RFC1918 localnet=172.16.0.0/12 ; Another RFC1918 with CIDR notation localnet=169.254.0.0/255.255.0.0 ;Zero conf local network jbenable=yes jbforce=yes jbimpl = fixed [200] username=200 secret=somesecret200 type=friend host=dynamic context=sip [201] username=201 secret=somesecret201 type=friend host=dynamic context=sip [...] ... ... {code} |
Next,
...
we
...
have
...
to
...
glue
...
all
...
things
...
together.
...
Calls
...
from
...
E1
...
are
...
directed
...
into
...
context
...
fpstn,
...
calls
...
from
...
SIP
...
are
...
directed
...
into
...
context
...
sip.
...
Now
...
we
...
should
...
define
...
routing
...
rules
...
for
...
this
...
contexts.
...
We
...
assume
...
that
...
operator
...
sends
...
entire
...
number
...
as
...
DNID
...
and
...
we
...
have
...
9digits
...
country
...
dialplan.
...
Replace
...
123456
...
by
...
your
...
PBX
...
prefix.
...
We
...
will
...
reach
...
outside
...
world
...
using
...
0
...
as
...
prefix.
...
In
...
fact,
...
this
...
is
...
realy
...
very
...
simple
...
config.
...
In
...
real
...
world,
...
we
...
should
...
use
...
macros
...
and
...
better
...
error
...
reporting.
...
${EXTEN:6}
...
means
...
that
...
we
...
will
...
strip
...
first
...
six
...
digits
...
from
...
number.
...
Similary,
...
${EXTEN:1}
...
strips
...
one
...
number
...
from
...
left
...
side.
...
For
...
testing
...
purposes,
...
we
...
created
...
extensions
...
111,
...
which
...
answers
...
call
...
and
...
do
...
simple
...
echo
...
application.
...
You
...
must
...
have
...
asterisk
...
sounds
...
instaled
...
to
...
make
...
it
...
working.
...
extensions.conf
Code Block |
---|
} [general] static=yes writeprotect=yes [fpstn] include => test exten => _123456XXX,1,Dial(SIP/${EXTEN:6}) [sip] include => test exten => _2XX,1,Dial(SIP/${EXTEN}) exten => \_0.,1,Dial(Zap/g1/${EXTEN:1}) [test] exten => 111,1,Answer() exten => 111,2,Playback(welcome) exten => 111,3,Playback(demo-echotest) exten => 111,4,Echo() exten => 111,5,Playback(demo-echodone) exten => 111,6,Playback(vm-goodbye) exten => 111,7,Hangup() {code} h1. |
Code Block |
---|
Validation,
...
confirmation
...
tests
...
If
...
everything
...
went
...
fine,
...
you
...
should
...
be
...
able
...
to
...
register
...
into
...
your
...
asterisk
...
PBX
...
with
...
your
...
SIP
...
phone
...
and
...
call
...
111.
...
In
...
other
...
side,
...
incoming
...
call
...
to
...
123456111
...
should
...
have
...
same
...
effect.
...
Most
...
common
...
problems
...
and
...
solutions:
...
- Cannot
...
- register
...
- SIP
...
- phone.
...
- Double check that you have configured sip.conf.
...
- Try
...
- command
...
- asterisk
...
- -rvx
...
- 'sip
...
- show
...
- peers'.
...
- You
...
- should
...
- see
...
- your
...
- peer.
...
- Registered,
...
- but
...
- cannot
...
- call
...
- anywhere
...
- (even
...
- test).
...
- Check your codec settings.
...
- There
...
- should
...
- be
...
- same
...
- codec
...
- on
...
- phone
...
- and
...
- in
...
- sip.conf
...
- Registered,
...
- can
...
- call
...
- test,
...
- but
...
- cannot
...
- call
...
- outside
- Check zaptel.conf,
...
- zapata.conf
...
- and
...
- rights
...
- to
...
- /dev/zap
...
- for
...
- your
...
- asterisk
...
- process.
...
- Try
...
- asterisk
...
- -rvx
...
- 'zap
...
- show
...
- status'
...
- ,
...
- asterisk
...
- -rvx
...
- 'pri
...
- show
...
- span
...
- 1'
...