[SR-Users] Modify DMQ 200OK in on_reply route

jenus at cyberchaos.nl jenus at cyberchaos.nl
Tue Jun 18 11:04:19 CEST 2019


All

Here the KDMQ reqest from the node that comes online:

------------------
Kamailio start on 10.20.8.89, sends a request to the active node 
10.20.8.88
------------------
KDMQ sip:usrloc at 10.20.8.88:5063 SIP/2.0
Via: SIP/2.0/UDP 
10.20.8.89:5063;branch=z9hG4bKd5bb.c2abf9b4000000000000000000000000.0
To: <sip:usrloc at 10.20.8.88:5063>
 From: 
<sip:usrloc at 172.17.0.2:5063>;tag=eeb67b6ee91998d3c4ad015de5249b76-7d61
CSeq: 10 KDMQ
Call-ID: 58f8ada547fd5ba0-225 at 172.17.0.2
Content-Length: 12
User-Agent: kamailio (5.1.8 (x86_64/linux))
Max-Forwards: 1
Content-Type: application/json

{"action":3}

SIP/2.0 200 OK
Via: SIP/2.0/UDP 
10.20.8.89:5063;branch=z9hG4bKd5bb.c2abf9b4000000000000000000000000.0
To: 
<sip:usrloc at 10.20.8.88:5063>;tag=616b7acb681ed5e9cbc485b3faa09d62.f2b6
 From: 
<sip:usrloc at 172.17.0.2:5063>;tag=eeb67b6ee91998d3c4ad015de5249b76-7d61
CSeq: 10 KDMQ
Call-ID: 58f8ada547fd5ba0-225 at 172.17.0.2
Server: kamailio (5.1.8 (x86_64/linux))
Content-Length: 0
-----------------


But after this to response from 10.20.8.88 back to 10.20.8.89 with the 
usrloc data.  If i replace the primary node that should send the usrloc 
info with the original kamailio server that is not running in docker i 
see a KDMQ usrloc at ... back to the server that is starting with all the 
usrloc data in the body.

Let me know if you need more details or debug logs.

Thanks,

Jan




jenus at cyberchaos.nl schreef op 2019-06-18 08:51:
> Julien,
> 
> I have the following config:
> 
> Host ip: 10.20.8.88  Internal container ip:  172.17.0.2
> 
> 
> listen=udp:172.17.0.2:5063 advertise 10.20.8.88:5063
> 
> 
> # ----- dmq params -----
> modparam("dmq", "server_address", "sip:172.17.0.2:5063")
> modparam("dmq", "num_workers", 4)
> modparam("dmq", "ping_interval", 90)
> modparam("dmq", "notification_address",
> "sip:sip12.voip.domain.test:5063")      (on the other node this is
> sip11.domain.test)
> modparam("dmq", "multi_notify", 1)
> 
> # ----- dmq_usrloc params -----
> modparam("dmq_usrloc", "enable", 1)
> modparam("dmq_usrloc", "sync", 1)
> modparam("dmq_usrloc", "batch_msg_contacts", 50)  # 50 contacts / 
> message
> modparam("dmq_usrloc", "batch_size", 10000)       # 10000 contacts / 
> batch
> modparam("dmq_usrloc", "batch_usleep", 500000)    # one batch every 
> 500ms
> 
> 
> Here is the output of the kamcmd dmq.list_nodes
> 
> root at 9d81434d491f:/# kamcmd dmq.list_nodes
> {
>         host: 10.20.8.89
>         port: 5063
>         resolved_ip: 10.20.8.89
>         status: active
>         last_notification: 0
>         local: 0
> }
> {
>         host: 10.20.8.88
>         port: 5063
>         resolved_ip: 10.20.8.88
>         status: active
>         last_notification: 0
>         local: 0
> }
> {
>         host: 172.17.0.2
>         port: 5063
>         resolved_ip: 172.17.0.2
>         status: active
>         last_notification: 0
>         local: 1
> }
> 
> 
> I will collect some traces as well of the sync request as requested by 
> Charles.
> 
> Thanks,
> 
> Jan
> 
> Julien Chavanton schreef op 2019-06-17 21:00:
>> Can you share the settings you are using :
>> 
>> modparam("dmq", "server_address", "?")
>> modparam("dmq", "notification_address", "?")
>> 
>> On Mon, Jun 17, 2019 at 11:30 AM <jenus at cyberchaos.nl> wrote:
>> 
>>> Hi all,
>>> 
>>> Is there any other way to filter DMQ peers? I now have a issue with
>>> dmq_usrloc when running in a docker container. When the node comes
>>> online the peer is sending the KDMQ usrloc packet (with the
>>> registered
>>> contacts) to the internal container ip and not the actual external
>>> ip.
>>> Both ip's show up as DMQ peers, after a few keepalive failures the
>>> dmq
>>> peer with the internal container ip becomes inactive and no updates
>>> are
>>> sent to that peer. But the usrloc sync seems to happen before the
>>> peer
>>> is inactive.
>>> 
>>> I tried to strip the peers with the internal container ip's, this
>>> works
>>> for the requests, but i'm not able to fix this for the responses.
>>> 
>>> Thanks,
>>> 
>>> Jan
>>> 
>>> jenus at cyberchaos.nl schreef op 2019-05-02 08:59:
>>>> Hi all,
>>>> 
>>>> I'm trying to run a kamailio DMQ node inside a docker container.
>>> All
>>>> works fine but i have one issue with DMQ. Since the kamailio
>>> process
>>>> inside the container is behind a nat i have set the advertise
>>> address
>>>> to the external ip, this works fine for the via headers but DMQ
>>> keeps
>>>> sending the internal interface in the KDMQ notification_peer
>>> messages.
>>>> The external ip is in there as well. Example:
>>>> 
>>>> SIP/2.0 200 OK
>>>> Via: SIP/2.0/UDP
>>>> 10.10.10.13;branch=z9hG4bK2dcb.c6326de2000000000000000000000000.0
>>>> To:
>>>> <sip:notification_peer at 10.10.10.94:5060
>>> [1]>;tag=616b7acb681ed5e9cbc485b3faa09d62.0a3d
>>>> From:
>>>> <sip:notification_peer at 10.10.10.13:5060
>>> [2]>;tag=e8f29c06c4b85a188f6533f08d60feb6-ff29
>>>> CSeq: 10 KDMQ
>>>> Call-ID: 17042656602ca532-23367 at x.x.x.x
>>>> Content-Type: text/plain
>>>> Server: kamailio (5.1.4 (x86_64/linux))
>>>> Content-Length: 222
>>>> 
>>>> sip:10.10.10.13:5060;status=active
>>>> sip:10.10.10.12:5060;status=active
>>>> sip:10.10.10.92:5060;status=active
>>>> sip:10.10.10.93:5060;status=active
>>>> sip:10.10.10.94:5060;status=active   <-- entry for container
>>> external
>>>> ip
>>>> sip:172.17.0.2:5060;status=disabled  <-- entry for container
>>> internal
>>>> ip
>>>> 
>>>> 
>>>> I tried to strip this entry using the replace_body_atonce in the
>>>> tm:local-request route. This works fine for the KDMQ request, but
>>> when
>>>> i try to remove the same line from 200OK responses that are send
>>> out
>>>> as a response to incomming KDMQ messages this seems to fail. I use
>>> the
>>>> following code:
>>>> 
>>>> # Working code (for outgoing KDMQ requests):
>>>> event_route [tm:local-request]
>>>> {
>>>> if(is_method("KDMQ") && $rU == "notification_peer")
>>>> replace_body_atonce("sip:172.17.0.*:5060;status=.*", "");
>>>> }
>>>> 
>>>> # Failing code (for 200OK responses):
>>>> reply_route
>>>> {
>>>> xlog("L_ALERT", "REPLY: Sending out reply, tU is $tU  rs is
>>> $rs\n");
>>>> if ($rs == "200" && $tU == "notification_peer")
>>>> {
>>>> replace_body_atonce("sip:172.17.0.*:5060;status=.*", "");
>>>> }
>>>> }
>>>> 
>>>> 
>>>> I'm running kamailio 5.1.4. Is there a way to strip a line from
>>> the
>>>> body of a local generated 200OK response? Or is there a way to
>>> avoid
>>>> that DMQ inserts the internal container ip in the first place.
>>>> 
>>>> 
>>>> Thanks,
>>>> 
>>>> Jan Hazenberg
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Kamailio (SER) - Users Mailing List
>>>> sr-users at lists.kamailio.org
>>>> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>>> 
>>> _______________________________________________
>>> Kamailio (SER) - Users Mailing List
>>> sr-users at lists.kamailio.org
>>> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>> 
>> 
>> Links:
>> ------
>> [1] http://sip:notification_peer@10.10.10.94:5060
>> [2] http://sip:notification_peer@10.10.10.13:5060
>> _______________________________________________
>> Kamailio (SER) - Users Mailing List
>> sr-users at lists.kamailio.org
>> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
> 
> 
> _______________________________________________
> Kamailio (SER) - Users Mailing List
> sr-users at lists.kamailio.org
> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users




More information about the sr-users mailing list