Kamailio can do this. Asterisk also can do this, and for small number (less then few thousands of clients, may be Asterisk is even better - my personal opinion ).
You can install kamailio, and put its default conf file and - you are ready to start tweaking. If Kamailio have to register to other sip server as client - I am not sure it is possible, but Asterisk can do it easy.
Everything else is easy. Kamailio will call users by their respective address - and you will not care how it will look for IP or interface. Or you can make some routing in its conf file and that's all.
You will need to read, then to read, again you will need reading, testing etc.
Open source products are free. You can get them and use them in a way you wish for free. But you must know how to use them, and this is not that easy.
I spent around 2 months to make what I need. And at the end, I fixed some problems dirty way, because I dont know better way.


On Mon, Jan 30, 2012 at 7:00 PM, Me <mojo1736@privatedemail.net> wrote:
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>@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>@ourdomain.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!

_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users