[SR-Users] [sr-dev] SIP ping, sockets and multi homed

Daniel-Constantin Mierla miconda at gmail.com
Fri Sep 22 09:18:50 CEST 2017


Hello,


On 22.09.17 04:42, Patrick Wakano wrote:
> Hello list,
>
> After deep investigation I found out that the issue is happening
> because of the mechanism Kamailio uses to find the most appropriate
> socket combined with the virtual IP usage....
> For socket selection, Kamailio first asks Linux which would be the
> routing for a certain destination, then matches this outcome with the
> list of listened sockets.
> By default Linux will always return the local IP instead of the
> virtual one. So if Kamailio only binds to the virtual IP, the Linux's
> returned IP won't match our socket list and then the socket selection
> fails....
> So currently Kamailio active/stand-by HA setup with virtual IP in a
> multi-homed environment does not work properly...
> We can overcome this by listening to all addresses, but then Kamailio
> will decide to use the local IP instead of the virtual one, and then
> the HA idea end up broken....
> We can also force socket for everything. For regular call routing,
> this options actually works fine if the script always force some
> socket, but it seems to be not always possible for local generated
> messages.

do you have an event_route[tm:local-request] in your config? There you
should be able to force send socket for local requests, iirc.

> By disabling mhomed and using the dispatcher socket attr to send the
> OPTIONS message it works for example. But for the LCR module we have
> no option because apparently the LCR module has only one socket
> option, and so I am not able have a different socket per gateway.
> We can also explicitly set the src address for a routing rule to be
> the virtual IP instead of the local one. This makes Linux to return
> the virtual IP instead of the local one. This solution seems fine, but
> since it is done at linux level, every other service on the box would
> be affected and every route on the box would needed to be changed..
> Another problem I found out is that I am not able to force the socket
> for local generated messages. It actually crashes Kamailio, and I
> always get a "core was not generated" msg.... anyone aware of that?

Have you done 'ulimit -c unlimited' and then run kamailio as root?

> The actual fix for this, would be having Kamailio to search the most
> appropriate socket in a different manner. It could loop the sockets
> and see which one reaches the destination instead of asking Linux to
> do it, or it could have some routing directives which could be
> consulted before selecting a socket.... (just ideas, not sure how
> feasible they are...)

Should anyone make a PR for such a change, it will be obviously
considered for merging.

> I am considering using the Linux routing change option, but has anyone
> faced such situation before?

I typically do lcr by combining mtree+dispatcher, never run in such
issue myself, but I also do mainly force send socket explicitly because
makes it more clear in config.

Cheers,
Daniel

>
> Regards,
> Patrick Wakano
>
>
> On 24 August 2017 at 09:18, Patrick Wakano <pwakano at gmail.com
> <mailto:pwakano at gmail.com>> wrote:
>
>     Hello Daniel,
>     I still couldn't make this SIP probing work.... So currently my
>     setup cannot actively check for GW availability...
>     Any idea about what may be causing it?
>
>     Thanks for your time,
>     Patrick Wakano
>
>     On 16 August 2017 at 13:01, Patrick Wakano <pwakano at gmail.com
>     <mailto:pwakano at gmail.com>> wrote:
>
>         Forgot to mention it is a centos7 box...
>
>         On 16 Aug. 2017 11:02 am, "Patrick Wakano" <pwakano at gmail.com
>         <mailto:pwakano at gmail.com>> wrote:
>
>             Hi Daniel!
>             Very grateful for your attention!
>
>             Apologies for lacking important info, check below the
>             version and sockets.
>             It may be worth mentioning these IPs are virtual ones and
>             I am using net.ipv4.ip_nonlocal_bind = 1(in this case the
>             virtual IP is assigned to the box)
>             Interesting that it has a "mhomed: no"for all sockets but
>             I do have mhomed=1 in my cfg file.... could that be the issue?
>             Also there is no message before this one:
>             /usr/sbin/kamailio[6164]: ERROR: <core>
>             [core/forward.c:181]: get_out_socket(): no socket found
>             This is the first one that pops when dispatcher tries to
>             ping....
>
>             Thanks,
>             Patrick
>
>             kamailio -v
>             version: kamailio 5.0.2 (x86_64/linux)
>             flags: STATS: Off, USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS,
>             DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP,
>             PKG_MALLOC, Q_MALLOC, F_MALLOC, TLSF_MALLOC,
>             DBG_SR_MEMORY, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT,
>             USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR,
>             USE_DST_BLACKLIST, HAVE_RESOLV_RES
>             ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144,
>             MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT
>             PKG_SIZE 8MB
>             poll method support: poll, epoll_lt, epoll_et, sigio_rt,
>             select.
>             id: unknown
>             compiled on 12:03:49 Jun 26 2017 with gcc 4.8.5
>
>             kamcmd> core.sockets_list
>             {
>                 socket: {
>                     proto: udp
>                     address: 172.28.128.100
>                     ipaddress: 172.28.128.100
>                     port: 5060
>                     mcast: no
>                     mhomed: no
>                 }
>                 socket: {
>                     proto: udp
>                     address: 192.168.33.100
>                     ipaddress: 192.168.33.100
>                     port: 5060
>                     mcast: no
>                     mhomed: no
>                 }
>                 socket: {
>                     proto: tcp
>                     address: 172.28.128.100
>                     ipaddress: 172.28.128.100
>                     port: 5060
>                     mcast: no
>                     mhomed: no
>                 }
>                 socket: {
>                     proto: tcp
>                     address: 192.168.33.100
>                     ipaddress: 192.168.33.100
>                     port: 5060
>                     mcast: no
>                     mhomed: no
>                 }
>                 socket: {
>                     proto: tcp
>                     address: 172.28.128.100
>                     ipaddress: 172.28.128.100
>                     port: 8080
>                     mcast: no
>                     mhomed: no
>                 }
>             }
>
>
>             On 15 August 2017 at 17:24, Daniel-Constantin Mierla
>             <miconda at gmail.com <mailto:miconda at gmail.com>> wrote:
>
>                 Hello,
>
>                 what are the sockets kamailio is listening on? See
>                 `kamcmd help` for the command that lists the sockets.
>
>                 Also, what is the log messages before the first one
>                 you pasted, there should be another one printed from
>                 get_out_socket().
>
>                 It is always important to provide kamailio version
>                 (kamailio -v) and the operating system you are using.
>
>                 Cheers,
>                 Daniel
>
>
>                 On 14.08.17 14:41, Patrick Wakano wrote:
>>                 Hello Kamailio list,
>>
>>                 Hope you all doing well!
>>
>>                 I am stuck with one problem that should be incredibly
>>                 easy to be done, but apparently it is not.... I want
>>                 my dispatcher, LCR and nathelper modules to always
>>                 SIP ping my SIP clients. I have a Kamailio based SBC
>>                 that is separating two networks, and so I am using
>>                 the 'mhomed' flag, but none of these SIP pings are
>>                 working.... for now I will only ask about the
>>                 dispatcher....
>>                 My dispatcher module has to talk with SIP servers in
>>                 both networks, the thing is when I enable SIP ping
>>                 for it (modparam("dispatcher", "ds_probing_mode",
>>                 1)), it gives me this type of error:
>>                 /usr/sbin/kamailio[6164]: ERROR: <core>
>>                 [core/forward.c:181]: get_out_socket(): no socket found
>>                 /usr/sbin/kamailio[6164]: ERROR: <core>
>>                 [core/forward.c:183]: get_out_socket(): no
>>                 corresponding socket found
>>                 for(udp:192.168.33.110:6060 <http://192.168.33.110:6060>)
>>                 /usr/sbin/kamailio[6164]: ERROR: tm [ut.h:317]:
>>                 uri2dst2(): no corresponding socket found for
>>                 "192.168.33.110" af 2 (udp:192.168.33.110:6060
>>                 <http://192.168.33.110:6060>)
>>                 /usr/sbin/kamailio[6164]: ERROR: tm [uac.c:443]:
>>                 t_uac_prepare(): no socket found
>>                 /usr/sbin/kamailio[6164]: ERROR: dispatcher
>>                 [dispatch.c:2652]: ds_ping_set(): unable to ping
>>                 [sip:192.168.33.110:6060 <http://192.168.33.110:6060>]
>>
>>                 After research it seems I need to manually set a
>>                 "socket" attribute for each of my GWs in dispatcher
>>                 list. After putting the socket parameter for the GW,
>>                 I got another error:
>>                 /usr/sbin/kamailio[14190]: ERROR: <core>
>>                 [core/socket_info.c:2046]: parse_protohostport(): bad
>>                 port number in udp:192.168.33.100:5060
>>                 <http://192.168.33.100:5060>
>>                 /usr/sbin/kamailio[14190]: ERROR: <core>
>>                 [core/forward.c:181]: get_out_socket(): no socket found
>>                 /usr/sbin/kamailio[14190]: ERROR: <core>
>>                 [core/forward.c:183]: get_out_socket(): no
>>                 corresponding socket found
>>                 for(udp:192.168.33.110:6060 <http://192.168.33.110:6060>)
>>                 /usr/sbin/kamailio[14190]: ERROR: tm [ut.h:317]:
>>                 uri2dst2(): no corresponding socket found for
>>                 "192.168.33.110" af 2 (udp:192.168.33.110:6060
>>                 <http://192.168.33.110:6060>)
>>                 /usr/sbin/kamailio[14190]: ERROR: tm [uac.c:443]:
>>                 t_uac_prepare(): no socket found
>>                 /usr/sbin/kamailio[14190]: ERROR: dispatcher
>>                 [dispatch.c:2652]: ds_ping_set(): unable to ping
>>                 [sip:192.168.33.110:6060 <http://192.168.33.110:6060>]
>>
>>                 What can be wrong in my port info in the socket
>>                 config? (I tried the socket with and without quotes
>>                 but had no luck...)
>>                 select * from dispatcher where id=2;
>>                  id | setid |       destination       | flags |
>>                 priority |                   
>>                 attrs                    |     description    
>>                 ----+-------+-------------------------+-------+----------+---------------------------------------------+---------------------
>>                   2 |     2 | sip:192.168.33.110:6060
>>                 <http://192.168.33.110:6060> |     0 |        0 |
>>                 socket="udp:192.168.33.100:5060
>>                 <http://192.168.33.100:5060>";rweight=50 |
>>                 (1 row)
>>
>>                 Anyhow, I was expecting the 'mhomed' parameter to do
>>                 the socket selection for me. Regular call routing
>>                 either by the dispatcher or by LCR, also seems to
>>                 require me to explicitly set the socket otherwise
>>                 Kamailio (or the OS) may end up using the wrong
>>                 socket. So, another question is why 'mhomed' does not
>>                 dictate the whole socket selection Kamailio has to do
>>                 regardless the module it is using to send SIP requests?
>>
>>                 Sorry for the long e-mail....
>>                 Best regards,
>>                 Patrick Wakano
>>
>>
>>                 _______________________________________________
>>                 Kamailio (SER) - Development Mailing List
>>                 sr-dev at lists.kamailio.org
>>                 <mailto:sr-dev at lists.kamailio.org>
>>                 https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev
>>                 <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev>
>
>                 -- 
>                 Daniel-Constantin Mierla
>                 www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda
>                 <http://www.linkedin.com/in/miconda>
>                 Kamailio Advanced Training - www.asipto.com <http://www.asipto.com>
>                 Kamailio World Conference - www.kamailioworld.com <http://www.kamailioworld.com>
>
>
>
>

-- 
Daniel-Constantin Mierla
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Kamailio Advanced Training - www.asipto.com
Kamailio World Conference - www.kamailioworld.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20170922/5c341cf6/attachment.html>


More information about the sr-users mailing list