I have a problem that I thought SER could solve but now that I
need it, the method isn't obvious.
First, as an example, let's say I have three independent
organizations running Asterisk boxes, which send me
the SIP and RTP audio for calls. Let's call them
Company A Asterisk box at 31.1.2.3
Company B Asterisk box at 42.4.5.6
Company C Asterisk box at 53.7.8.9
So they are one side of the SER box all communicating SIP to a single
interface. On the other side is a TDM PSTN switch capable of
accepting SIP calls. The PSTN switch has exactly one IP address,
which we will call 101.2.3.4.
Inside the PSTN switch, for calls originating in TDM headed to SIP,
a "Route List" directs calls for a given trunk group (everything is
visualized in TDM terms even if the terms don't really apply) to a
specific IP address, where the SIP INVITE should go for this call.
In the case of a SIP to TDM call, when an INVITE comes in, the PSTN
switch looks through that list of Routes that point to IP addresses
and when it finds an IP address match, it knows which trunk group to
associate with this call for billing. This also acts as a simple
friend/foe mechanism, because if there is no route pointing at your
SIP source, it rejects your INVITES.
So, if Company A, B and C were communicating directly with the PSTN
switch (no SER), you would simply need three trunk groups where
each IP address pointed directly to the Asterisk boxes at those
companies, like this:
TGN SIP IP
1111 -> 31.1.2.3
2222 -> 42.4.5.6
3333 -> 53.7.8.9
and all would be well. However, when you insert a SER box between
those the Asterisk boxes belonging to those companies and the
PSTN switch, problems arise.
I originally decided to address the issue by establishing two groups
of three IP addresses, one set that the Asterisk servers would
individually send their INVITEs to, and three that the PSTN switch
could send its INVITES to. SER already supports the idea of
listening on numerous IP addresses, so that was easy (although the
documentation for "listen" and "alias" is weak and a code review was
needed to determine what alias actually did, something other than
what the "alias" option of an ifconfig command does...).
Anyway, we have a setup like this:
interface interface interface
em1 on SER em0 on SER sig0 on PSTN
10.1.0.0/16 10.2.0.0/16 101.2.3.0/28
Company A 31.1.2.3 ---- 10.1.2.3 SER 10.2.0.1 ---- 101.2.3.4
Company B 42.4.5.6 ---- 10.1.5.6 SER 10.2.0.2 ---- 101.2.3.4
Company C 53.7.8.9 ---- 10.1.8.9 SER 10.2.0.3 ---- 101.2.3.4
Inside the ser.cfg, it is simple enough to rewrite the "host address"
(where you want the packet to go) to reflect the new destination
once that is determined, and for TDM to SIP calls work okay from the
perspective of the PSTN switch, but then it really never cared whether
the SER box was there or not. As long as the PSTN switch knows who to bill,
it is vaguely happy. To accomplish that, the routes inside the PSTN
switch were altered to point to the SIP IP addresses that
the PSTN switch would have contact with, as in:
TGN SIP IP
1111 -> 10.2.0.1
2222 -> 10.2.0.2
3333 -> 10.2.0.3
(Changing the IPs in the PSTN switch turns out to be a non-trivial
operation.)
The more serious problem arises with a call going SIP to TDM, because
when the SER box sends a packet on to the PSTN box at 101.2.3.4,
it needs to also re-write the SOURCE IP of the packet to reflect the
appropriate IP address on the em0 interface, not just the
first IP address that is discovered on the interface.
What it does right now is send everything out under the first IP
address listed on that interface, usually 10.2.0.1, so calls
fail to set up properly as the replies go back to company A even
if coming from company B or C.
Is there a function in SER that lets you set the right address to use
on outgoing packets? As all of the IP addresses that would be used
are in fact ones set on that interface, it should be just a
question of setting the right one, but I haven't found a function for
ser.cfg or loadable module that clearly states that it will do this.
So in summary, when Company B sends an INVITE to 10.1.5.6
from their 42.4.5.6 system, I need to have SER send an invite to
101.2.3.4 from 10.2.0.2 and never any other address that happens
to be on that same interface. And when the reply to the INVITE comes
to 10.2.0.2 from 101.2.3.4, I need SER to forward it on to 42.4.5.6
from 10.1.5.6.
Note that while I am showing an example with three companies, there
will be dozens, even hundreds of unique IPs involved here, hence
the enormous netblocks set aside for each interface on the SER box.
I'm certainly open to alternative methods to get SER to alter the
headers of the packets it forwards exactly as needed, but keep in
mind that I have basically zero control over how the PSTN switch
does things, and it has exactly one IP address (three actually, but
one does all the SIP work) that you send to and it originates from,
yet is keenly interested in where packets it receives came from
(for billing purposes) so you can't expect any help from the
PSTN switch side.
So is there a function callable from ser.cfg to force set the SOURCE
IP address on SIP messages on a message by message basis?
We are currently using ser-0.9.6.
Thanks for your assistance,
Frank Durda
Hi,
Anybody can illuminate how to modify ser.cfg and make the new modified version effective for ser without rebooting ser?
Thanks in advance,
Ling
____________________________________________________________________________________
Looking for last minute shopping deals?
Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping
Due to a domain/registrar problem, the onsip.org domain used in
referencing a server with SER Getting Started, module docs, etc has
caused broken links on iptel.org the last week or so.
The plan is to move everything over to iptel.org servers/domain, but I
haven't had time yet.
I have now updated the referenced links on iptel.org site to use a
temporary domain name, so everything should be ok now.
Please raise your voice if there are still onsip.org reference lying
around on iptel.org.
g-)
Hi All,
I am trying to integrate Openser 1.2.3 and Asterisk 1.4.18. The
registrations are handled by Openser and Asterisk acts as a B2BUA.
In one of the cases the combo should support Serial Forking. I register
an user, ua1 from two different contacts say ua1@contact1 first and
ua1@contact2 later.
Hence the latest registration of ua1 is ua1@contact2.
Now when I call ua1, ua1@contact2 gets two calls, one directly from
Openser and second from Asterisk (since I am forwarding the INVITEs from
openser to Asterisk).
I would like to implement serial forking in Openser. Can someone help me
out here..
Regards,
Aadil
Hi all,
I'm trying to use the acc.so module but for some reason I can't make it load in my ser 0.9.7 (x86_64/linux).
This is the stderror output:
0(3184) ERROR: load_module: could not open module </usr/local/lib/ser/modules/acc.so>: /usr/local/lib/ser/modules/acc.so: undefined symbol: parse_orig_uri
and this is the list of the modules I'm loading in ser.cfg file:
loadmodule "/usr/local/lib/ser/modules/mysql.so"
loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/uri_db.so"
loadmodule "/usr/local/lib/ser/modules/uri_radius.so"
loadmodule "/usr/local/lib/ser/modules/domain.so"
loadmodule "/usr/local/lib/ser/modules/mediaproxy.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/avpops.so"
loadmodule "/usr/local/lib/ser/modules/permissions.so"
loadmodule "/usr/local/lib/ser/modules/xlog.so"
loadmodule "/usr/local/lib/ser/modules/auth_radius.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"
Does any one have experienced this? Does any one can helpme?
Regards,
Santiago
_________________________________________________________________
Blog your life in 3D with Windows Live Writer.
http://www.windowslive.com/overview.html?ocid=TXT_TAGLM_Wave2_wl_writer_022…
Thanks. I'll do all that as soon as I find documentation that gives me some clues. :)
----- Original Message ----
From: Alex Hermann <alex(a)speakup.nl>
To: users(a)lists.openser.org
Sent: Friday, March 28, 2008 12:36:51 AM
Subject: Re: [OpenSER-Users] LCR Routing.... Choosing Best Route
On Friday 28 March 2008, Douglas Garstang wrote:
> Carrier Prefix Cost
> ---------------------------
> Carrier1 1650 0.3
> Carrier2 165 0.2
> What do people do in this case?
Don't use the LCR module to compare, but do it by other means by selecting
the longest matching prefix per carrier and then sort the list on price.
Store the list of associated uri's in the gw_uri_avp and use next_gw() to
traverse them.
Alex.
_______________________________________________
Users mailing list
Users(a)lists.openser.org
http://lists.openser.org/cgi-bin/mailman/listinfo/users
____________________________________________________________________________________
Looking for last minute shopping deals?
Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping
Hi,
I have media proxy, openser, and monit installed in FreeBSD.
I have also had the x-lite windows client software working with the openser server.
Now, if I want to make phone call from home to external phone number thru the Openser server, what else I have to do to accomplish that?
Thanks
Sam
____________________________________________________________________________________
Looking for last minute shopping deals?
Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping
Hi
While creating the openser DB (/usr/local/sbin/openserdbctl create) I get
the following error:
INFO: creating presence tables into openser ...
ERROR 1170 (42000) at line 2: BLOB/TEXT column 'rlsubs_did' used in key
specification without a key length
ERROR: Failed to create rls-presence tables!
FYI I've downloaded the source code from 1.3 branch (rev. 3957) and disabled
the following modules in my installation:
exclude_modules?= jabber cpl-c postgres osp unixodbc avp_radius
auth_radius group_radius uri_radius xmpp presence_mwi pua pua_bla pua_mi
pua_usrloc pua_xmpp rls mi_xmlrpc perl snmpstats perlvdb ldap carrierroute
h350 xcap_client db_berkeley seas
(From the original Makefile I only enabled mysql, presence and presence_xml
modules)
Should I enable any other module ?
It does work when I choose to not install the presence related tables.
Thanks in advance for any help or suggestion.
Regards,
Pascal
Hi folks,
In my setup, I've got two disjoint subnets (call then A and B) that
cannot communicate directly to each other, but devices on each can both
communicate to my OpenSER server and Asterisk box (both on their own
subnet, C). There is no NAT involved, so I only want to use rtpproxy
when it's the case that device from subnet A attempts to call a device
on subnet B, or vice-versa.
I would ideally not like to use rtp proxy for communication between A-C
and A-B (this will enable RTP media between both subnets, but that
solution will not scale very well...)
I'm attempting do something like this:
if (src_ip == a.b.c.d/24 && dst_ip == w.x.y.z/24)
use rtp proxy
But unfortunately, on an INVITE, after a lookup, dst_ip is set to the
OpenSER server. The pseudovariable $rd is set to the value I'd like to
check against, but it complains loudly when I attempt to substitute
dst_ip for $rd.
Is there any way to use avp_check() or the like to verify that the value
in $rd lies in a given subnet? I don't want to match just one IP, but a
whole range. I found a similar question on the SER mailing list asked
several years ago, with no response.
Thanks,
Josh