Apologies if any of the questions below are a bit dumb - I don't pretend
to be an expert in SIP/VOIP - I am just an ordinary user looking for
answers.
Our current setup involves processing a small number of internal sip
accounts (up to 10, no more than that) and one "public" one (with a
separate registrar) in the following way:
On our server we have three interfaces: eth0, eth1 and tun0. eth0 is our
entry point to the public internet, eth1 faces our internal network and
tun0 is a private vpn, which connects all our smartphones to the
internal network (via Wifi, EDGE/2G/3G etc). This gives us the mobility.
Up until now, we have been routing voip calls via a commercial (closed
source), very limited, terribly outdated (Pentium code base!) and rather
buggy sip proxy. I had to employ a lot of hacks on our server in order
to route calls as this proxy can only listen on a single interface. It
was also a nightmare to maintain. Unsurprisingly, I decided that enough
is enough and I am now determined to replace it.
We route calls in the following way: all machines (PCs are all Linux
based) & smartphones have their own sip/voip client installed on them
(also using bluetooth). Internal calls are routed via the proxy between
ourselves either on the internal net (eth1), or between the vpn and eth1
(eth1<->tun0).
External calls (going out, i.e. outbound) are routed externally to our
registrar, using a single separate voip account, via eth1<->eth0 or
tun0<->eth0.
As I am now looking to replace our proxy, I looked at Kamailio, but was
soon completely overwhelmed by it (no offence intended, it was just too
much to take at first). I would appreciate if any of you could give me a
hand, or at least point me in the right direction, with the following
issues:
I presume I could configure Kamailio to listen on more than one
interface and act as a proxy. How do I do that, so that it listens on
all 3 interfaces and proxies requests in the following way:
- calls made to <userX>(a)ourdomain.net to be routed internally via eth1
(internal net) or tun0 (private vpn);
- calls made to anybody else to be routed externally via eth0 (public)
using the separate "public" sip account with our external registrar;
- calls made to the public sip account (from outside - the "public")
need to be routed to a "nominated" internall account (say
<user0>(a)ourdomain.net)n.net);
- all other (internal) calls need to be routed depending on which
interface this account has been registered/logged in - either the
internal net (eth1) or the private vpn (tun0 - the smartphones).
Obviously, calls need to be received (and routed properly) from all 3
interfaces.
Is all of this possible with Kamailio?
I want to avoid unnecessary complexities of the setup (as I already
mentioned above - I am just a user and by no means an expert in
sip/voip) and do not want to deploy something I do not need - I need to
keep the memory footprint to a bare minimum, possibly without
sacrificing performance.
Once this is done, I would then move on to the next phase and use IM &
ENUM, but this is once the above works.
I looked at other alternatives, but I got very confused there as well -
I couldn't figure out what exactly is the difference between, say,
OpenSER, Kamailio, OpenSIPS and SIP-Router even? What is the best
software to use in order to achieve the above setup?
One last thing - I am a developer by trade and I am not afraid of
"tweaking" things when needed. I was successful in compiling Kamailio
from source (I use Fedora on all our machines) and I was pleased that I
could exclude from the RPM .spec file the modules I think I did not need.
I also made some modification of my own to make the database modules
(mysql, postgresql and unixodbc) configurable in the same way the rest
of the modules are. I could submit patches, if needed, so that these are
incorporated into future releases - how do I do that?
I could not do the same with OpenSIPS, however (which I also tried - out
of curiosity!) - everything there seems to be lumped and compiled
together regardless of whether it is needed or not.
Any help as to helping me with the above issues is greatly appreciated,
many thanks in advance for taking the time!