[SR-Users] nathelper without usrloc

Daniel-Constantin Mierla miconda at gmail.com
Sat Apr 4 10:06:18 CEST 2020


Hello,

I looked a bit a the code of the nat_traversal module and it takes the
Expires values from SIP replies, when REGISTER is forwarded (it has to
be with tm t_relay()), but at that moment it compares the contacts with
the headers in request (taken from transaction structure) via string
comparison and in case of mismatch, they are ignored.

So, when you change the contacts during REGISTER request processing,
then you get different values in the replies.

The solution is to not touch the contact at all, but use Path (see path
module) when routing out REGISTERs, then call loose_route() for initial
requests as well.

An alternative is to try to use the keepalive module instead of
nat_traversal, maybe it gives what you need.

And the last one, in master branch I pushed 2 commits (one to core and
one to nat_traversal module) to add an option to match the contact URI
by comparing type, user, host, port and proto. You can try with master
branch by setting contact_match=1 for nat_traversal param and see if works.

Cheers,
Daniel

On 04.04.20 03:05, Daniel W. Graham wrote:
>
> Register time is not detected when add_contact_alias() is enabled:
>
>  
>
> With add_contact_alias() :
>
>  
>
> Apr  3 20:45:01 host /usr/local/sbin/kamailio[28022]: DEBUG: {2 2
> REGISTER 103104ZDUxMzk3ZTg4OTM4ZGFhM2M1NmI3ZjBjYTQ3NWM1NWI}
> nat_traversal [nat_traversal.c:963]: get_register_expire(): maximum
> expire for all contacts: 0
>
>  
>
> Without add_contact_alias():
>
> Apr  3 20:56:52 edgedev /usr/local/sbin/kamailio[28104]: DEBUG: {2 2
> REGISTER 103104ZmRiZTI0Y2NkNjUxNDRiYzg5Njc1MzI1NjRkZTM3MTI}
> nat_traversal [nat_traversal.c:963]: get_register_expire(): maximum
> expire for all contacts: 300
>
> -dan
>
>  
>
> *From: *"miconda at gmail.com" <miconda at gmail.com>
> *Reply-To: *"miconda at gmail.com" <miconda at gmail.com>
> *Date: *Friday, April 3, 2020 at 4:03 PM
> *To: *Daniel Graham <dan at cmsinter.net>, "Kamailio (SER) - Users
> Mailing List" <sr-users at lists.kamailio.org>
> *Subject: *Re: [SR-Users] nathelper without usrloc
>
>  
>
> OK, so there were some messages I still missed in the middle of the
> discussion...
>
> Can you get all log messages with debug=3 when the keepalive is
> attempted to be sent?
>
> Cheers,
> Daniel
>
> On 03.04.20 21:51, Daniel W. Graham wrote:
>
>     I resolved all of the routing issues. Only issue I’ve got now is
>     nat_keepalive not working when used with set/add_contact_alias().
>
>      
>
>     -dan
>
>      
>
>      
>
>     *From: *"miconda at gmail.com" <mailto:miconda at gmail.com>
>     <miconda at gmail.com> <mailto:miconda at gmail.com>
>     *Reply-To: *"miconda at gmail.com" <mailto:miconda at gmail.com>
>     <miconda at gmail.com> <mailto:miconda at gmail.com>
>     *Date: *Friday, April 3, 2020 at 1:43 PM
>     *To: *Daniel Graham <dan at cmsinter.net> <mailto:dan at cmsinter.net>,
>     "Kamailio (SER) - Users Mailing List"
>     <sr-users at lists.kamailio.org> <mailto:sr-users at lists.kamailio.org>
>     *Subject: *Re: [SR-Users] nathelper without usrloc
>
>      
>
>     Somehow I thought that the keepalive is not working and you look
>     for fixing it. Now I read the full thread and actually the routing
>     of requests within dialog doesn't work.
>
>     Can you send a pcap with such a call taken on Kamailio system? ACK
>     and BYE should be routed based on Contact of INVITE/200ok and
>     record-route headers, no longer related to REGISTER (only initial
>     INVITE should rely on registration data).
>
>     Cheers,
>     Daniel
>
>     On 02.04.20 22:11, Daniel W. Graham wrote:
>
>         Same behavior with add_contact_alias()
>
>          
>
>         -dan
>
>          
>
>          
>
>         *From: *"miconda at gmail.com" <mailto:miconda at gmail.com>
>         <miconda at gmail.com> <mailto:miconda at gmail.com>
>         *Reply-To: *"miconda at gmail.com" <mailto:miconda at gmail.com>
>         <miconda at gmail.com> <mailto:miconda at gmail.com>
>         *Date: *Thursday, April 2, 2020 at 2:59 PM
>         *To: *"Kamailio (SER) - Users Mailing List"
>         <sr-users at lists.kamailio.org>
>         <mailto:sr-users at lists.kamailio.org>, Daniel Graham
>         <dan at cmsinter.net> <mailto:dan at cmsinter.net>
>         *Subject: *Re: [SR-Users] nathelper without usrloc
>
>          
>
>         Hello,
>
>         can you try with add_contact_alias() instead of
>         set_contact_alias()? The second one updates the contact URI in
>         a way that is visible for the couple of local modules
>         immediately, typically needed when having dialog/presence
>         module in that instance (still no changes to the header
>         itself, it uses some internal mechanism to signal contact
>         value should be taken from a special field). The first one
>         uses the lumps system that makes the changes over the contact
>         URI not visible immediately (unless msg_apply_changes() is used).
>
>         Maybe nat_keepalive() needs the original contact URI, not the
>         one updated by set_contact_alias().
>
>         Cheers,
>         Daniel
>
>         On 02.04.20 18:45, Daniel W. Graham wrote:
>
>             I was able to fix all issues, but have one partially
>             lingering.
>
>              
>
>             For register only, if I apply: set_contact_alias() with
>             nat_keepalive(), keepalives are not sent. Removing
>             set_contact_alias() fixes this.
>
>              
>
>             I *shouldn’t need this if the pbx was saving received and
>             rport params as a result of add_path_received().
>
>              
>
>             Can anyone explain why these two functions conflict?
>
>              
>
>             Test scenario -
>
>             # Doesn’t result in register keepalive –
>
>              
>
>             route[NATDETECT] {
>
>                 force_rport();
>                 set_contact_alias();  # removal of this enables keepalive
>                 nat_keepalive();
>                 return;
>             }
>
>              
>
>             I’ve tested this with and without calls to
>             handle_ruri_alias() elsewhere in cfg script with same result.
>
>              
>
>             -dan
>
>              
>
>             *From: *sr-users <sr-users-bounces at lists.kamailio.org>
>             <mailto:sr-users-bounces at lists.kamailio.org> on behalf of
>             Sergiu Pojoga <pojogas at gmail.com> <mailto:pojogas at gmail.com>
>             *Reply-To: *"Kamailio (SER) - Users Mailing List"
>             <sr-users at lists.kamailio.org>
>             <mailto:sr-users at lists.kamailio.org>
>             *Date: *Wednesday, April 1, 2020 at 8:58 AM
>             *To: *"Kamailio (SER) - Users Mailing List"
>             <sr-users at lists.kamailio.org>
>             <mailto:sr-users at lists.kamailio.org>
>             *Subject: *Re: [SR-Users] nathelper without usrloc
>
>              
>
>             Nothing else comes to mind based on info provided. May be
>             you can send some sip traffic captures and elaborate?
>
>              
>
>             Regards,
>
>             --Sergiu 
>
>              
>
>             On Tue, Mar 31, 2020 at 10:29 PM Daniel W. Graham
>             <dan at cmsinter.net <mailto:dan at cmsinter.net>> wrote:
>
>                 Thanks, yeah I had already changed that, but
>                 registration works with either. I’m not asking for a
>                 solution, just looking for suggestions on anything
>                 that needs attention, so I appreciate your pointers. 
>
>                  
>
>                 -dan
>
>                 On Mar 31, 2020, at 8:55 PM, Sergiu Pojoga
>                 <pojogas at gmail.com <mailto:pojogas at gmail.com>> wrote:
>
>                      
>
>                     Oh and almost forgot - try *add_path_received()*
>                     instead of add_path()
>
>                      
>
>                     Good luck!
>
>                      
>
>                     On Tue, Mar 31, 2020 at 8:48 PM Sergiu Pojoga
>                     <pojogas at gmail.com <mailto:pojogas at gmail.com>> wrote:
>
>                         A lot of things may not be 'right' here,
>                         unfortunately your question is too broad to
>                         answer and too little info, the topology is
>                         indeed non-default and I doubt someone will
>                         present you with a final solution (there's
>                         business support, if you're looking for that).
>
>                          
>
>                         Otherwise, if I were to just throw a guess: 
>
>                         - try fix_nated_register() (instead of
>                         set_contact_alias) just for Register method on
>                         the way to the registrar
>
>                         - in the Registrar, make sure the Contact's
>                         Path address is correct
>
>                          
>
>                         Cheers,
>
>                         --Sergiu
>
>                          
>
>                         On Tue, Mar 31, 2020 at 7:34 PM Daniel W.
>                         Graham <dan at cmsinter.net
>                         <mailto:dan at cmsinter.net>> wrote:
>
>                             It did help, I read that a couple times
>                             already but something is still not right,
>                             and its only because of the decoupling of
>                             the registrar. I need to do more debugging
>                             and see if Im loosing the flag value.
>                             Hoping something sticks out that someone
>                             sees and can point me in the right direction.
>
>                             -dan
>
>                             On Mar 31, 2020, at 7:15 PM, Alex Balashov
>                             <abalashov at evaristesys.com
>                             <mailto:abalashov at evaristesys.com>> wrote:
>                             >
>                             > Daniel,
>                             >
>                             > Might this article be of aid?
>                             >
>                             >
>                             http://www.evaristesys.com/blog/server-side-nat-traversal-with-kamailio-the-definitive-guide/
>                             >
>                             > -- Alex
>                             >
>                             >> On Tue, Mar 31, 2020 at 11:12:23PM
>                             +0000, Daniel W. Graham wrote:
>                             >>
>                             >> It does but doesn't work as well as
>                             kamailio, and since the proxy is the entry
>                             point.
>                             >>
>                             >> The biggest issue here isnt the
>                             keepalive, as I did have that working. The
>                             main issue is the routing of messages,
>                             utilizing set_contact_alias and
>                             handle_ruri_alias, as Ive been unable to
>                             get ack and bye messages to make it past
>                             the proxy. I’m assuming these functions
>                             are not being used at the right locations
>                             or I need to rely on another mechanism to
>                             accomplish it. I also question my use of
>                             the PBX flag and the natmanage logic.
>                             >>
>                             >> -dan
>                             >>
>                             >> On Mar 31, 2020, at 7:01 PM, Sergiu
>                             Pojoga <pojogas at gmail.com
>                             <mailto:pojogas at gmail.com>> wrote:
>                             >>
>                             >>
>                             >> Hi Daniel,
>                             >>
>                             >> From what you are describing, my
>                             understanding is that the Registrar is the
>                             PBX, kamailio is acting as an edge proxy.
>                             If so, doesn't the PBX/registrar have NAT
>                             traversal/keepalive mechanisms of its own?
>                             >>
>                             >> Regards,
>                             >> --Sergiu
>                             >>
>                             >> On Tue, Mar 31, 2020 at 1:55 PM Daniel
>                             W. Graham <dan at cmsinter.net
>                             <mailto:dan at cmsinter.net><mailto:dan at cmsinter.net
>                             <mailto:dan at cmsinter.net>>> wrote:
>                             >> I’ve been missing with this for a while
>                             and seem to be missing something. Any
>                             suggestions on what is missing here?
>                             >>
>                             >> Trying to use set_contact_alias() and
>                             handle_ruri_alias() from nathelper module
>                             and nat_keepalive from nat_traversal
>                             module, without registrar.
>                             >>
>                             >> I had register keepalive working, that
>                             has since broke. When register keepalive
>                             was working, I was able to place call in
>                             either direction but ACK and BYE was not
>                             being routed past kamailio.
>                             >>
>                             >> Registrations are forwarded to the PBX
>                             using add_path() and is working.
>                             >>
>                             >> Also not included below is the routing
>                             to the PBX, that is just setting $du and
>                             t_relay, and is also working.
>                             >>
>                             >> Topology is: UA1 -> NAT -> kamailio ->
>                             PBX -> UA2
>                             >>
>                             >> Using default config file as the
>                             example, modified with above changes. I
>                             also removed RTP config as that is a
>                             non-issue.
>                             >>
>                             >> request_route {
>                             >>    ……
>                             >>    # FLAG MESSAGES FROM PBX
>                             >>        setflag(FLT_PBX);
>                             >>    route(NATDETECT);
>                             >>    ……
>                             >>
>                             >> route[NATDETECT] {
>                             >>            if (nat_uac_test("19")) {
>                             >> force_rport();
>                             >>                        set_contact_alias();
>                             >>                        nat_keepalive();
>                             >>            }
>                             >>            return;
>                             >> }
>                             >>
>                             >> route[WITHINDLG] {
>                             >>            if (!has_totag()) return;
>                             >>                        if (loose_route()) {
>                             >>                                   
>                             route(DLGURI);
>                             >>                        } else if (
>                             is_method("ACK") ) {
>                             >>                                   
>                             route(NATMANAGE);
>                             >>                        } else if (
>                             is_method("NOTIFY") ) {
>                             >>                                   
>                             record_route();
>                             >>                        }
>                             >>            route(RELAY);
>                             >>            exit;
>                             >>            }
>                             >>
>                             >>            if (is_method("SUBSCRIBE")
>                             && uri == myself) {
>                             >>                        route(PRESENCE);
>                             >>                        exit;
>                             >>            }
>                             >>            if ( is_method("ACK") ) {
>                             >>                        if (
>                             t_check_trans() ) {
>                             >>                                   
>                             route(RELAY);
>                             >>                                    exit;
>                             >>                        } else {
>                             >>                                    exit;
>                             >>                        }
>                             >>            }
>                             >>            sl_send_reply("404","Not here");
>                             >>            exit;
>                             >> }
>                             >>
>                             >> route[NATMANAGE] {
>                             >>        if(isflagset(FLT_PBX)) {
>                             >>            handle_ruri_alias();
>                             >>    }
>                             >>    if(!isflagset(FLT_PBX)) {
>                             >>        set_contact_alias();
>                             >>    }       return;
>                             >> }
>                             >>
>                             >> route[DLGURI] {
>                             >>            if(!isdsturiset()) {
>                             >>                        handle_ruri_alias();
>                             >>            }
>                             >>            return;
>                             >> }
>                             >>
>                             >> branch_route[MANAGE_BRANCH] {
>                             >>            route(NATMANAGE);
>                             >> }
>                             >>
>                             >> onreply_route[MANAGE_REPLY] {
>                             >>            if(status=~"[12][0-9][0-9]") {
>                             >>                        route(NATMANAGE);
>                             >>            }
>                             >> }
>                             >> failure_route[MANAGE_FAILURE] {
>                             >>            route(NATMANAGE);
>                             >>
>                             >>            if (t_is_canceled()) exit;
>                             >>
>                             >>
>                             >> -dan
>                             >>
>                             >>
>                             _______________________________________________
>                             >> Kamailio (SER) - Users Mailing List
>                             >> sr-users at lists.kamailio.org
>                             <mailto:sr-users at lists.kamailio.org><mailto:sr-users at lists.kamailio.org
>                             <mailto: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
>                             <mailto: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
>                             <mailto:sr-users at lists.kamailio.org>
>                             >>
>                             https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>                             >
>                             >
>                             > --
>                             > Alex Balashov | Principal | Evariste
>                             Systems LLC
>                             >
>                             > Tel: +1-706-510-6800 / +1-800-250-5920
>                             (toll-free)
>                             > Web: http://www.evaristesys.com/,
>                             http://www.csrpswitch.com/
>                             >
>                             >
>                             _______________________________________________
>                             > Kamailio (SER) - Users Mailing List
>                             > sr-users at lists.kamailio.org
>                             <mailto: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
>                             <mailto: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
>                     <mailto: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
>                 <mailto: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 <mailto:sr-users at lists.kamailio.org>
>
>             https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>
>         -- 
>
>         Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com>
>
>         www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda>
>
>     -- 
>
>     Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com>
>
>     www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda>
>
> -- 
> Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com>
> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda>

-- 
Daniel-Constantin Mierla -- www.asipto.com
www.twitter.com/miconda -- www.linkedin.com/in/miconda

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20200404/10e63bdd/attachment.html>


More information about the sr-users mailing list