I think, it will be much better to plane reorganization of whole process.
To start using Kamailio as registrar and load balance, and Asterisk as
media servers, dial plan etc.
But, in current situation, I can suggest next:
1. You can not use authorization of Kamailio. You can use Kamailio only and
alone as load balance. All requests to Kamailio you can forward to Asterisk
servers.
2. When you get first request from somebody - you can do something like:
ds_select_dst("1","4");
$sht(forw=>$ft)=$du;
This way you will store address of Asterisk, where you forwarded request.
3. When you have next request from same "person" you can do:
$du=$sht(forw=>$ft);
I am using something alike, but only for active calls. All my registrations
are handled by Kamailio, and Asterisk servers do not participate in
authentication.
On Sun, Sep 29, 2013 at 3:27 AM, Paul Penev <ppquant(a)gmail.com> wrote:
Hello all,
I'm trying to implement a load balancer for asterisk servers using
kamailio and the tutorial at
http://kb.asipto.com/asterisk:realtime:kamailio-4.0.x-asterisk-11.3.0-astdb
I must put kamailio in front of the media servers (asterisk) without
modifying their configuration (like a transparent proxy). It's a live
system and I cannot touch it.
The problem is that the asterisks require the devices to authenticate
themselves (and register with user and password too).
The sample implementation constructs a register request from scratch,
but does not handle the authorisation part
I guess that the uac_req should contain the user and password fetched
from the asterisk database. I would really appreciate some hints on
how to proceed.
Here's the current implementation of the register from kamailio->asterisk.
# Forward REGISTER to Asterisk
route[REGFWD] {
if(!is_method("REGISTER"))
{
return;
}
$var(rip) = $sel(cfg_get.asterisk.bindip);
$uac_req(method)="REGISTER";
$uac_req(ruri)="sip:" + $var(rip) + ":" +
$sel(cfg_get.asterisk.bindport);
$uac_req(furi)="sip:" + $au + "@" + $var(rip);
$uac_req(turi)="sip:" + $au + "@" + $var(rip);
$uac_req(hdrs)="Contact: <sip:" + $au + "@"
+ $sel(cfg_get.kamailio.bindip)
+ ":" + $sel(cfg_get.kamailio.bindport) + ">\r\n";
if($sel(contact.expires) != $null)
$uac_req(hdrs)= $uac_req(hdrs) + "Expires: " + $sel(contact.expires) +
"\r\n";
else
$uac_req(hdrs)= $uac_req(hdrs) + "Expires: " + $hdr(Expires) +
"\r\n";
uac_req_send();
}
Thank you,
Paul.
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users(a)lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users