[SR-Users] How to forward REGISTERs to Asterisk in kamailio with dispatcher module with several Asterisk PBXs?

Tickling Contest tickling.contest at gmail.com
Mon Jul 25 01:52:05 CEST 2016


Sorry, here it is:

root at kamailio:/etc/kamailio# kamctl dispatcher dump
SET_NO:: 1
SET:: 1
URI:: sip:192.168.1.102:5060;transport=tcp flags=AP priority=0
attrs=weight=100


On Sun, Jul 24, 2016 at 7:40 PM, SamyGo <govoiper at gmail.com> wrote:

> I asked for "kamctl dispatcher dump". 'show' only prints the table.
>
> On Jul 24, 2016 18:38, "Tickling Contest" <tickling.contest at gmail.com>
> wrote:
>
>> Thanks, Sammy. I fixed the error re: transport on Kamailio, but now
>> nothing is sent as the dispatcher doesn't seem to work as expected by me.
>> Here's the output you requested, any help is appreciated:
>>
>> root at kamailio:/etc/kamailio# kamctl dispatcher show
>> dispatcher gateways
>>
>> +----+-------+--------------------------------------+-------+----------+------------+-------------+
>> | id | setid | destination                          | flags | priority |
>> attrs      | description |
>>
>> +----+-------+--------------------------------------+-------+----------+------------+-------------+
>> |  1 |     1 | sip:192.168.1.102:5060;transport=tcp |     0 |        0 |
>> weight=100 | Asterisk A  |
>>
>> +----+-------+--------------------------------------+-------+----------+------------+-------------+
>>
>> root at kamailio:/etc/kamailio# netstat -pln | grep kamailio
>> tcp        0      0 0.0.0.0:5060            0.0.0.0:*
>> LISTEN      4453/kamailio
>> unix  2      [ ACC ]     STREAM     LISTENING     789407   4447/kamailio
>>       /tmp/kamailio_ctl
>> root at opensipsA:/etc/kamailio#
>>
>>
>> And on the Asterisk server:
>>
>> root at asterisk:~# netstat -pln | grep asterisk
>> tcp        0      0 0.0.0.0:5060            0.0.0.0:*
>> LISTEN      2826/asterisk
>> tcp        0      0 0.0.0.0:2000            0.0.0.0:*
>> LISTEN      2826/asterisk
>> udp        0      0 0.0.0.0:5000            0.0.0.0:*
>>         2826/asterisk
>> udp        0      0 0.0.0.0:4520            0.0.0.0:*
>>         2826/asterisk
>> udp        0      0 0.0.0.0:4569            0.0.0.0:*
>>         2826/asterisk
>> udp        0      0 0.0.0.0:49207           0.0.0.0:*
>>         2826/asterisk
>> udp        0      0 0.0.0.0:54857           0.0.0.0:*
>>         2826/asterisk
>> udp        0      0 0.0.0.0:2727            0.0.0.0:*
>>         2826/asterisk
>> unix  2      [ ACC ]     STREAM     LISTENING     31087    2826/asterisk
>>       /var/run/asterisk/asterisk.ctl
>>
>>
>> Now, the ds_select in the REGFWD does not seem to select anything (and so
>> nothing is forwarded).
>>
>> My complete, current kamailio.cfg is here:
>> https://gist.github.com/ticklingcontest/0b46e8e53bf50aa3875395c8fb86ff66
>>
>> BTW, I moved away from dispatcher.list file as I could not get it to work
>> (the DB values always registered, but the list file didn't take).
>>
>> Any insight is appreciated.
>>
>> Thanks!
>>
>>
>>
>> On Sun, Jul 24, 2016 at 5:34 PM, SamyGo <govoiper at gmail.com> wrote:
>>
>>> Hey,
>>> Can you show whats the output of the following commands on Kamailio
>>> server:
>>> "kamctl dispatcher dump"
>>> "netstat -pln | grep kamailio"
>>>
>>> Send the output of the second command from asterisk server as well i.e
>>> "netstat -pln | grep asterisk"
>>>
>>> Looking at the error it seems like you are trying to reach asterisk on a
>>> protocol which kamailio is not listening on.
>>>
>>> Regards,
>>> Sammy
>>>
>>> On Jul 24, 2016 14:38, "Tickling Contest" <tickling.contest at gmail.com>
>>> wrote:
>>>
>>>> Hey guys,
>>>>
>>>> I dug a little deeper and I found these logs in /var/log/kamailio where
>>>> 192.168.1.102 is my asterisk server:
>>>>
>>>> ul 24 14:25:32 kamailio /usr/sbin/kamailio[3726]: ERROR: tm [ut.h:343]:
>>>> uri2dst2(): no corresponding socket for af 2
>>>> Jul 24 14:25:32 kamailio /usr/sbin/kamailio[3726]: ERROR: tm
>>>> [uac.c:266]: t_uac_prepare(): t_uac: no socket found
>>>> Jul 24 14:25:32 kamailio /usr/sbin/kamailio[3726]: ERROR: dispatcher
>>>> [dispatch.c:2436]: ds_check_timer(): unable to ping [sip:
>>>> 192.168.1.102:5060]
>>>>
>>>> I can broadly tell that the message was not even sent, but the asterisk
>>>> server VM is alive and well (and indeed on the same physical machine as
>>>> kamailio VM).
>>>>
>>>> What am I missing? Why is this failing? I am running kamailio 4.0.4.
>>>>
>>>> On Sat, Jul 23, 2016 at 8:07 PM, Tickling Contest <
>>>> tickling.contest at gmail.com> wrote:
>>>>
>>>>> I corrected an error with my dispatcher configuration and now, I do
>>>>> hit the code where
>>>>>
>>>>> ds_select_dst ("1", "4")
>>>>>
>>>>> is no longer null.
>>>>>
>>>>> However, while the xlog I added says uac_req_send () is called,
>>>>> nothing is sent. The xlog prints out the value of $uac_req(hdrs) as
>>>>>
>>>>>  Contact: <sip:101 at 192.168.1.101:5060>#015#012Expires: 600#015
>>>>>
>>>>> after which the uac_req_send () is called.
>>>>>
>>>>> I am not sure if this is the correct way? What am I missing?
>>>>>
>>>>> Oh, nothing shows up in the tcpdump trace (only the OPTIONS message
>>>>> for the asterisk<->kamailio peering shows up).
>>>>>
>>>>> On Sat, Jul 23, 2016 at 3:48 PM, Tickling Contest <
>>>>> tickling.contest at gmail.com> wrote:
>>>>>
>>>>>> Thanks, guys!
>>>>>>
>>>>>> Sammy, I tried your code in REGFWD, but unfortunately, it does not
>>>>>> forward anything to Asterisk. I can confirm this because it keeps going
>>>>>> into the else clause in the REGFWD (which I added to confirm). My current
>>>>>> REGFWD looks like this:
>>>>>>
>>>>>> route[REGFWD] {
>>>>>>         if(!is_method("REGISTER"))
>>>>>>         {
>>>>>>                 return;
>>>>>>         }
>>>>>>         xlog ("L_DEBUG", "MYDEBUG: In REGFWD");
>>>>>>         if(!ds_select_dst("1", "4"))    {
>>>>>>                $var(rip) = $(du{s.select,1,:});
>>>>>>                $var(rport) = $(du{s.select,2,:});
>>>>>>                $uac_req(method)="REGISTER";
>>>>>>                $uac_req(ruri)="sip:" + $var(rip) + ":" + $var(rport)
>>>>>> + ";transport=tcp";
>>>>>>                $uac_req(furi)="sip:" + $au + "@" + $var(rip);
>>>>>>                $uac_req(turi)="sip:" + $au + "@" + $var(rip);
>>>>>>                $uac_req(hdrs)="Contact: <sip:" + $au + "@
>>>>>> 192.168.1.101:5060" + ">\r\n";
>>>>>>                 xlog ("L_DEBUG", "MYDEBUG: In REGFWD, sending
>>>>>> registration info to Asterisk at $uac_req(ruri)");
>>>>>>                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();
>>>>>>         }
>>>>>>         else
>>>>>>         {
>>>>>>                 xlog ("L_DEBUG", "In REGFWD, not forwarding!");
>>>>>>         }
>>>>>>
>>>>>> }
>>>>>>
>>>>>>
>>>>>>
>>>>>> My entire kamailio.cfg file is here:
>>>>>> https://gist.github.com/ticklingcontest/f96aa4d08b08dc4643056d73da24f0a5
>>>>>>
>>>>>> Any insight is appreciated. Thanks again.
>>>>>>
>>>>>> My dispatcher at the moment has only one Asterisk server. My endpoint
>>>>>> registers (auth with realtime DB in Mysql), but the registration
>>>>>> information does not reach Asterisk.
>>>>>>
>>>>>> My kamailio box is peering with the asterisk box like so:
>>>>>>
>>>>>> root at asterisk:~# more /etc/asterisk/pjsip_wizard.conf
>>>>>> [kamailio]
>>>>>> type = wizard
>>>>>> sends_auth = no
>>>>>> sends_registrations = no
>>>>>> remote_hosts = 192.168.1.101
>>>>>> server_uri_pattern = sip:${REMOTE_HOST}\;transport=tcp
>>>>>> client_uri_pattern = sip:${REMOTE_HOST}\;transport=tcp
>>>>>> contact_pattern = sip:${REMOTE_HOST}\;transport=tcp
>>>>>> outbound_auth/username = dispatcher
>>>>>> aor/qualify_frequency = 0
>>>>>> endpoint/context = from-external ;;; change later
>>>>>> endpoint/disallow = all ;;; change later
>>>>>> endpoint/allow = ulaw ;;; change later
>>>>>> endpoint/dtmf_mode=rfc4733
>>>>>> endpoint/media_address=192.168.1.101 ;;
>>>>>> aor/qualify_frequency = 15
>>>>>>
>>>>>> BTW, my intention is to store the registrations on the Asterisk
>>>>>> servers as well as my ARI code depends on it. As soon I get the single
>>>>>> Asterisk situation working, I intend adding more servers to check the load
>>>>>> balancing and REGISTER forwarding, and to Colin's point, the business of
>>>>>> just using Kamailio as an outbound proxy.
>>>>>>
>>>>>> Again, any insight wrt why no REGISTERs are forwarding to Asterisk is
>>>>>> appreciated. Why is ds_select_dst("1", "4") evaluating to false for me?
>>>>>>
>>>>>> My dispatcher info:
>>>>>>
>>>>>> root at kamailio:/etc/kamailio# kamctl dispatcher show
>>>>>> dispatcher gateways
>>>>>>
>>>>>> +----+-------+-------------------+-------+----------+-------+-------------+
>>>>>> | id | setid | destination       | flags | priority | attrs |
>>>>>> description |
>>>>>>
>>>>>> +----+-------+-------------------+-------+----------+-------+-------------+
>>>>>> |  1 |     1 | sip:192.168.1.102 |     1 |        0 |       |
>>>>>> AsteriskA   |
>>>>>> |  2 |     1 | sip:192.168.1.102 |     1 |        0 |       |
>>>>>> AsteriskA   |
>>>>>>
>>>>>> +----+-------+-------------------+-------+----------+-------+-------------+
>>>>>>
>>>>>>
>>>>>> Thanks!
>>>>>>
>>>>>> On Fri, Jul 22, 2016 at 11:01 AM, Colin Morelli <
>>>>>> colin.morelli at gmail.com> wrote:
>>>>>>
>>>>>>> If you're using Kamailio as a registrar, then it would make the most
>>>>>>> sense to also use it as your outbound proxy for Asterisk.
>>>>>>>
>>>>>>> This would mean whenever Asterisk needs to dial an extension, it
>>>>>>> would instead make a SIP call to your Kamailio instance which would then
>>>>>>> perform the lookup, forking, and forwarding.
>>>>>>>
>>>>>>> Is there a reason this wouldn't work in your infrastructure? If for
>>>>>>> some reason it can't - though I can't imagine how - then I don't see the
>>>>>>> purpose in using Kamailio as a registrar at all. You should just forward
>>>>>>> everything to Asterisk since it needs to be there anyway.
>>>>>>>
>>>>>>> Best,
>>>>>>> Colin
>>>>>>>
>>>>>>> On Fri, Jul 22, 2016 at 9:58 AM SamyGo <govoiper at gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi Tickles,
>>>>>>>>
>>>>>>>> a) Have you tried doing this on Asterisk realtime ? for any regular
>>>>>>>> direct registering extension w/o kamailio(even before kamailio) ? If an
>>>>>>>> extension registers to one asterisk the rest of the boxes would know where
>>>>>>>> to contact this extension via realtime-db ? I'd say give that a try and it
>>>>>>>> may solve your problem, else using this REGFWD block you can parallel fork
>>>>>>>> this register request to ALL of your boxes and everybox would think it is
>>>>>>>> registered locally ! (not a recommended option I must say)
>>>>>>>>
>>>>>>>> b) If you ignore my previous comment of parallel forking registers,
>>>>>>>> using this  REGFWD block you can use dispatcher module to replace the
>>>>>>>> $var(rip) and $sel(cfg_get.asterisk.bindport) by changing your
>>>>>>>> REGFWD block like this:
>>>>>>>>
>>>>>>>> route[REGFWD] {
>>>>>>>>         if(!is_method("REGISTER"))
>>>>>>>>         {
>>>>>>>>                 return;
>>>>>>>>         }
>>>>>>>>         if(!ds_select_dst("1", "4"))    {
>>>>>>>>                $var(rip) = $(du{s.select,1,:});
>>>>>>>>                $var(rport) = $(du{s.select,2,:});
>>>>>>>>                $uac_req(method)="REGISTER";
>>>>>>>>                $uac_req(ruri)="sip:" + $var(rip) + ":" +
>>>>>>>> $var(rport) + ";transport=tcp";
>>>>>>>>                $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();
>>>>>>>>         }
>>>>>>>>
>>>>>>>> }
>>>>>>>>
>>>>>>>>
>>>>>>>> In summary, depending upon your business logic/use case there could
>>>>>>>> be other ways to make this work as well.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Sammy
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Jul 22, 2016 at 8:53 AM, Tickling Contest <
>>>>>>>> tickling.contest at gmail.com> wrote:
>>>>>>>>
>>>>>>>>> Hello,
>>>>>>>>>
>>>>>>>>> When using Kamailio with the dispatcher module for Asterisk load
>>>>>>>>> balancing, I am offloading REGISTERs to Kamailio (works fine), but would
>>>>>>>>> like to forward the REGISTERs to Asterisk so that outgoing calls from
>>>>>>>>> Asterisk will be possible. I know this is not strictly necessary (e.g.,
>>>>>>>>> just use Kamailio to forward everything), but I have a lot of application
>>>>>>>>> logic behind my Asterisk boxes (using ARI) and so I don't want that to
>>>>>>>>> break. Thereby, I do need this information in Asterisk as soon as possible
>>>>>>>>> from Kamailio.
>>>>>>>>>
>>>>>>>>> Let's say I have three boxes Asterisk_1, Asterisk_2 and Asterisk_3
>>>>>>>>> in the dispatcher module like so:
>>>>>>>>>
>>>>>>>>> 1 sip:192.168.1.201:5060;transport=tcp
>>>>>>>>> 1 sip:192.168.1.202:5060;transport=tcp
>>>>>>>>> 1 sip:192.168.1.203:5060;transport=tcp
>>>>>>>>>
>>>>>>>>> My system has endpoints as numerical extensions, from 101 to 110.
>>>>>>>>> When a new endpoint registers with kamailio (and authenticates), I would
>>>>>>>>> like to send the REGISTER to Asterisk. But I have the following questions:
>>>>>>>>>
>>>>>>>>> (a) Which Asterisk? I could send it to a round-robinned Asterisk
>>>>>>>>> (say, Asterisk_2), but that Asterisk may not be the one responsible for
>>>>>>>>> handling calls outbound for the endpoint that just registered. Even if I
>>>>>>>>> use "hash over auth username" instead of round-robin (In
>>>>>>>>> http://www.kamailio.org/docs/modules/4.0.x/modules/dispatcher.html#idp16940048,
>>>>>>>>> choose 5 for "alg", for example) that wont solve this problem as an
>>>>>>>>> outbound request may come from another Asterisk box which won't have the
>>>>>>>>> requisite registration information. Should I forward REGISTERs to all
>>>>>>>>> Asterisk boxes? Maybe I won't have to deal with this issue as I use
>>>>>>>>> realtime and so the REGISTER information, sent to one Asterisk box, is
>>>>>>>>> available to all Asterisk boxes after the write to the realtime DB. Is my
>>>>>>>>> understanding correct?
>>>>>>>>>
>>>>>>>>> (b) How do I do this in kamailio.cfg? With some examples on the
>>>>>>>>> Internet for WITH_ASTERISK directive, I see that you do
>>>>>>>>>
>>>>>>>>> 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) + ";transport=tcp";
>>>>>>>>>         $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();
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> What is the equivalent for when you are using the dispatcher
>>>>>>>>> module and the kamailio.bindip and asterisk.bindip etc. are not set in the
>>>>>>>>> configuration, but instead should be procured from elsewhere?
>>>>>>>>>
>>>>>>>>> Any help is appreciated.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing
>>>>>>>>> list
>>>>>>>>> sr-users at lists.sip-router.org
>>>>>>>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>>>>>>
>>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing
>>>>>>>> list
>>>>>>>> sr-users at lists.sip-router.org
>>>>>>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing
>>>>>>> list
>>>>>>> sr-users at lists.sip-router.org
>>>>>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>>>> sr-users at lists.sip-router.org
>>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>
>>>>
>>> _______________________________________________
>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>>> sr-users at lists.sip-router.org
>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>
>>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>> sr-users at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20160724/3957705e/attachment.html>


More information about the sr-users mailing list