[SIP Beyond VoIP] FW: STUN keep-alive

Mihai Richard mihai.richard at softvision.ro
Tue Jan 17 09:43:59 CET 2012


In this case, from the sipsimple's interface point of view, how do I make it
periodically send that UDP packet to the server? I expect to have some kind
of setting for that but I don't know what it is.

#
U 192.168.33.166:5060 -> 69.61.11.18:5060
.

#
U 192.168.33.166:5060 -> 69.61.11.18:5060
.

These are the UDP packets shown by ngrep. Apparently the client just sends 1
byte at a time and in return the server sends an OPTIONS message.

Regards,
Mihai Richard

On 1/16/12 6:21 PM, "Adrian Georgescu" <ag at ag-projects.com> wrote:

> The nat_traversal module works just fine.
> 
> It looks like you have a SIP ALG router that breaks your SIP traffic. Try to
> disable it, google for 'SIP ALG'.
> 
> Adrian
> 
> On Jan 16, 2012, at 5:17 PM, Mihai Richard wrote:
> 
>> I tried to use the nat_traversal module from the OpenSIPS server but it
>> doesn't seem to work as expected. NAT bindings are not kept and a ngrep ran
>> on the server reveals this message
>> 
>> U 2012/01/16 10:18:43.418275 69.61.11.18:5060 -> 69.61.11.18:5060
>> REGISTER sip:69.61.11.18 SIP/2.0.
>> Via: SIP/2.0/UDP 69.61.11.18;branch=z9hG4bK06ff.55dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.45dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.35dd34d5.0.
>> Via: SIP/2.0/UDP
>> 74.228.12.88:5060;received=74.228.12.88;branch=z9hG4bK-3a253e4d;rport=49155.
>> From: reneconn11 <sip:reneconn11 at 69.61.11.18>;tag=4b13105c96b7ff53o0.
>> To: reneconn11 <sip:reneconn11 at 69.61.11.18>.
>> Call-ID: b3dcc82d-c538c0db at 192.168.1.6.
>> CSeq: 87929 REGISTER.
>> Max-Forwards: 67.
>> Contact: reneconn11 <sip:reneconn11 at 74.228.12.88:5060;nat=yes>;expires=240.
>> User-Agent: Linksys/PAP2-3.1.9(LSc).
>> Content-Length: 0.
>> Allow: ACK, BYE, CANCEL, INFO, INVITE, NOTIFY, OPTIONS, REFER.
>> Supported: x-sipura.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> 
>> And the message keeps growing like this:
>> 
>> U 2012/01/16 10:18:43.421649 69.61.11.18:5060 -> 69.61.11.18:5060
>> REGISTER sip:69.61.11.18 SIP/2.0.
>> Via: SIP/2.0/UDP 69.61.11.18;branch=z9hG4bK06ff.37dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.27dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.17dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.07dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.f6dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.e6dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.d6dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.c6dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.b6dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.a6dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.96dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.86dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.76dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.66dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.56dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.46dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.36dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.26dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.16dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.06dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.f5dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.e5dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.d5dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.c5dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.b5dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.a5dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.95dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.85dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.75dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.65dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.55dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.45dd34d5.0.
>> Via: SIP/2.0/UDP
>> 69.61.11.18;rport=5060;received=69.61.11.18;branch=z9hG4bK06ff.35dd34d5.0.
>> Via: SIP/2.0/UDP
>> 74.228.12.88:5060;received=74.228.12.88;branch=z9hG4bK-3a253e4d;rport=49155.
>> From: reneconn11 <sip:reneconn11 at 69.61.11.18>;tag=4b13105c96b7ff53o0.
>> To: reneconn11 <sip:reneconn11 at 69.61.11.18>.
>> Call-ID: b3dcc82d-c538c0db at 192.168.1.6.
>> CSeq: 87929 REGISTER.
>> Max-Forwards: 37.
>> Contact: reneconn11 <sip:reneconn11 at 74.228.12.88:5060;nat=yes>;expires=240.
>> User-Agent: Linksys/PAP2-3.1.9(LSc).
>> Content-Length: 0.
>> Allow: ACK, BYE, CANCEL, INFO, INVITE, NOTIFY, OPTIONS, REFER.
>> Supported: x-sipura.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> P-hint: outbound.
>> .
>> 
>> Where 69.61.11.18 is the server's ip address. Configurations for keep-alive
>> are:
>> modparam("nat_traversal", "keepalive_interval", 90)
>> modparam("nat_traversal", "keepalive_method", "OPTIONS")
>> modparam("nat_traversal", "keepalive_from", "sip:keepalive at budtobud.com")
>> 
>> ...
>> 
>> if ((method=="REGISTER" || method=="SUBSCRIBE" ||
>>     (method=="INVITE"&&  !has_totag()))&&  client_nat_test("3"))
>> {
>>     nat_keepalive();
>> }
>> 
>> 
>> On the other hand, before using sipsimple, I used pjsip and apparently pjsua
>> manages to keep the NAT bindings alive by periodically sending a UDP packet
>> to the opensips server and in turn, the opensips server sends periodically
>> at a lower rate some OPTIONS messages. Here is part of the ngrep dump:
>> 
>> #
>> U 192.168.33.166:5060 -> 69.61.11.18:5060
>> .
>> 
>> #
>> U 192.168.33.166:5060 -> 69.61.11.18:5060
>> .
>> 
>> #
>> U 192.168.33.166:5060 -> 69.61.11.18:5060
>> .
>> 
>> #
>> U 192.168.33.166:5060 -> 69.61.11.18:5060
>> .
>> 
>> #
>> U 69.61.11.18:5060 -> 192.168.33.166:5060
>> OPTIONS sip:82.79.96.20:52567 SIP/2.0.
>> Via: SIP/2.0/UDP 69.61.11.18:5060;branch=0.
>> From: sip:pinger at budtobud.com;tag=66edd3e2.
>> To: sip:82.79.96.20:52567.
>> Call-ID: bb3e1ee4-fc959124-28c at 69.61.11.18.
>> CSeq: 1 OPTIONS.
>> Content-Length: 0.
>> .
>> 
>> #
>> U 192.168.33.166:5060 -> 69.61.11.18:5060
>> SIP/2.0 200 OK.
>> Via: SIP/2.0/UDP 69.61.11.18:5060;received=69.61.11.18;branch=0.
>> Call-ID: bb3e1ee4-fc959124-28c at 69.61.11.18.
>> From: <sip:pinger at budtobud.com>;tag=66edd3e2.
>> To: <sip:82.79.96.20>;tag=0.
>> CSeq: 1 OPTIONS.
>> Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE, NOTIFY, REFER,
>> MESSAGE, OPTIONS.
>> Accept: application/sdp, application/pidf+xml, application/xpidf+xml,
>> application/simple-message-summary, message/sipfrag;version=2.0,
>> application/im-iscomposing+xml, text/plain.
>> Supported: replaces, 100rel, timer, norefersub.
>> Allow-Events: presence, message-summary, refer.
>> User-Agent: PJSUA v1.10.0 Darwin-10.8/i386.
>> Content-Type: application/sdp.
>> Content-Length:   478.
>> .
>> v=0.
>> o=- 3535716756 3535716756 IN IP4 192.168.33.166.
>> s=pjmedia.
>> c=IN IP4 192.168.33.166.
>> t=0 0.
>> m=audio 4000 RTP/AVP 10 98 97 106 3 0 8 10 99 96.
>> a=rtcp:4001 IN IP4 192.168.33.166.
>> a=rtpmap:10 L16/44100/2.
>> a=rtpmap:98 speex/16000.
>> a=rtpmap:97 speex/8000.
>> a=rtpmap:106 iLBC/8000.
>> a=fmtp:106 mode=30.
>> a=rtpmap:3 GSM/8000.
>> a=rtpmap:0 PCMU/8000.
>> a=rtpmap:8 PCMA/8000.
>> a=rtpmap:10 G722/44100/2.
>> a=rtpmap:99 speex/32000.
>> a=sendrecv.
>> a=rtpmap:96 telephone-event/8000.
>> a=fmtp:96 0-15.
>> .
>> 
>> My questions now are how do I get sipsimple to send that UDP packet to the
>> server? And also why does the server apparently send the keep-alive messages
>> to himslef?
>> 
>> 
>> On 1/16/12 1:41 PM, "Luci Stanescu" <luci at cnix.ro> wrote:
>> 
>>> 
>>> On 16 Jan 2012, at 11:03, Mihai Richard wrote:
>>> 
>>>> This might work. Now I'm just asking if there are some other messages that
>>>> I
>>>> can send to the server to keep the NAT binding and still not require much
>>>> processing from the server. If not, I'm going ahead and lowering the
>>>> registration interval.
>>> 
>>> 
>>> You can try it out to see if this makes it work, but keep in mind there are
>>> some important preconditions:
>>>  * the client must a single port for all SIP messages (both sending and
>>> receiving).
>>>  * there must be a single entry point IP address, protocol and port to the
>>> provider network (i.e. if the provider has multiple proxies, this will work
>>> for receiving incoming calls but other transactions might use another proxy
>>> =>
>>> those binding will likely expire)
>>> 
>>> As for the load put on the server, it's true, it's a horrible waste just for
>>> NAT traversal. You can technically send anything, which should make all NAT
>>> boxes keep the binding alive. But if you use OpenSIPS, give the
>>> nat_traversal
>>> module a try. It's the best point capable of detecting whether there's a NAT
>>> box in between the user and the proxy. Can't really think of a simple way a
>>> client could reliably do it.
>>> 
>>> Kind Regards,
>>> 
>>> --
>>> Luci Stanescu
>>> 
>> 
>> 
>> _______________________________________________
>> SIPBeyondVoIP mailing list
>> SIPBeyondVoIP at lists.ag-projects.com
>> http://lists.ag-projects.com/mailman/listinfo/sipbeyondvoip
>> 
> 

------ End of Forwarded Message




More information about the SIPBeyondVoIP mailing list