This is part 1 of a 3 part post discussing A2Billing and OpenSIPS. A2Billing is a billing platform for Asterisk, and OpenSIPS is an Open Source SIP Server. In this first part I’m going to talk about what OpenSIPS is and why you may want to use it. In the second part I’ll talk about some prerequisites for the setup I’m going to show, and in the third part will be the OpenSIPS config.
A2Billing works perfectly well without OpenSIPS, so why would you want to use them together? Well, with OpenSIPS sitting in front of A2Billing/Asterisk and handling all of the SIP connections it can provide the following benefits -
- load balance across multiple Asterisk/A2Billing servers
- failover – take an Asterisk server out of the cluster if it should fail
- limit SIP connections so that only the OpenSIPS server talks to Asterisk/A2Billing over SIP
- register all of your SIP customers in a single place – the OpenSIPS server (the config I show is not going to cover SIP registrations)
- OpenSIPS has much better logging of SIP connections (than Asterisk) so we can use fail2ban more efficiently to block attacks
There are probably many more benefits than those listed above. OpenSIPS has lots of modules that provide flexibility to handle the SIP connections exactly as you need.
In the config that follows I am going to show how to do SIP termination. SIP clients authenticate to OpenSIPS using either IP or USER/SECRET authentication and then calls are passed to A2Billing/Asterisk for completion. This example does not cover SIP registrations or incoming DID numbers.
OpenSIPS will sit between the A2Billing SIP customers and the A2Billing/Asterisk server. All customer SIP connections will be to the OpenSIPS server, which will then pass these on to Asterisk/A2Billing once authenticated. A2Billing/Asterisk will talk to the call provider directly (not via OpenSIPS). So the setup looks something like this -
A2Billing SIP Customer --> OpenSIPS --> A2Billing/Asterisk --> Call provider --> A2Billing/Asterisk --> Call provider --> A2Billing/Asterisk --> Call provider
This diagram above shows calls going to 3 different A2Billing/Asterisk servers. In the example config there is just one set up, but it will be obvious how to add more.
Also, in OpenSIPS there are 2 different ‘load balancing’ modules. There is one called ‘dispatcher’ which in unintelligent and just send the calls to a group of A2Billing/Asterisk servers. And there is a module called ‘load-balancer’ which knows the state of each A2Billing/Asterisk server and evenly distributes the load across them. For simplicity in this example I will be using the ‘dispatcher’ module.
This guide assumes that you have -
- a working A2Billing/Asterisk server in place
- a working OpenSIPS v1.8 server in place
- created a database called ‘opensips’ (as per the OpenSIPS install instructions) that is on MySQL running on the A2BIlling/Asterisk server
We are going to have both the A2Billing and OpenSIPS databases running on the A2Billing server so that we can integrate the two
In part 2 I’ll discuss some of the prerequisites and the database setup.