[Kamailio-Users] Kamailio and RTPProxy

Daniel-Constantin Mierla miconda at gmail.com
Mon Dec 14 17:29:18 CET 2009


Hello,

On 12/14/09 1:24 PM, Bruce McAlister wrote:
> Hi All,
>
> I am trying to setup kamailio 1.5.3-notls for use with rtpproxy 1.2.1. I
> have a partially working setup, however, when I have a softphone
> configured behind nat it appears that rtpproxy is using the internal ip
> (prior to nat) to setup the sdp ports.
>
> I have rtpproxy configured in bridge mode as follows:
>
> rtpproxy -f -F -l public_ip/internal_ip -s udp:*:11211
>    

depending on flags, the public or internal IP is used to update the sdp. 
If you get it in the wrong order, then change the flags e and i in 
force_rtp_proxy() call.

It is ok to have the internal ip in the sdp going to the phone in 
internal network.

Cheers,
Daniel

> I have kamailio's nathelper module setup as follows:
>
> modparam("nathelper", "rtpproxy_sock", "udp:internal_ip:11211")
>
> I then use a softphone (x-lite) behind a nat firewall (ip =
> 192.168.11.2) to establish a call, and the log of rtpproxy is as follows:
>
> INFO:handle_command: new session
> ZmRkNjRlNjM0NzExZjQ5MWUxYjllOTFhZWFmZGZkMjY., tag 8330585e;1 requested,
> type strong
> INFO:handle_command: new session on a port 52572 created, tag 8330585e;1
> INFO:handle_command: pre-filling caller's address with 192.168.11.2:35498
> INFO:handle_command: lookup on ports 52572/40380, session timer restarted
> INFO:handle_command: pre-filling callee's address with internal_ip:11250
> INFO:handle_delete: forcefully deleting session 1 on ports 52572/40380
> INFO:remove_session: RTP stats: 906 in from callee, 0 in from caller,
> 906 relayed, 0 dropped
> INFO:remove_session: RTCP stats: 3 in from callee, 0 in from caller, 3
> relayed, 0 dropped
> INFO:remove_session: session on ports 52572/40380 is cleaned up
>
> In the log above it looks like rtpproxy is using 192.168.11.2:35498 as
> the remote ip/port combination to contact for the sdp session of the
> x-lite softphone. I would have thought that it would use the IP address
> that initial request was received from to establish this connection (via
> the fix_nated_contact() function).
>
> My route logic in kamailio is a slightly modified default configuration
> that is installed with kamailio :
>
> route{
>
> 	.
> 	.
> 	.
>
>          # NAT detection
>          route(4);
>
> 	.
> 	.
> 	.
>
> 	route(1);
> }
>
> route[1]{
>       if (check_route_param("nat=yes")) {
>               setbflag(6);
>       }
>       # if (isflagset(5) || isbflagset(6)) {
>               route(5);
>       # }
>
>          /* example how to enable some additional event routes */
>          if (is_method("INVITE")) {
>                  #t_on_branch("1");
>                  t_on_reply("1");
>                  t_on_failure("1");
>          }
>
>          if (!t_relay()) {
>                  sl_reply_error();
>          }
>          exit;
> }
>
> route[4]{
>       force_rport();
>       if (nat_uac_test("19")) {
>               if (method=="REGISTER") {
>                       fix_nated_register();
>               } else {
>                       fix_nated_contact();
>               }
>               setflag(5);
>       }
>          return;
> }
>
> Would the "fix_nated_contact" function in the "nat detection" route not
> fix the contact before passing over the request to rtpproxy to establish
> the sdp session?
>
> route[5] {
>       if (is_method("BYE")) {
>               unforce_rtp_proxy();
>       } else if (is_method("INVITE")){
>               # force_rtp_proxy();
>               if(src_ip==internal_ip_of_media_server)
>                  force_rtp_proxy("ocfaei");
>               else
>                  force_rtp_proxy("ocfaie");
>       }
>       if (!has_totag()) add_rr_param(";nat=yes");
>          return;
> }
>
> onreply_route[1] {
>          xdbg("incoming reply\n");
>
>       # if ((isflagset(5) || isbflagset(6))&&
> status=~"(183)|(2[0-9][0-9])") {
>       if (status=~"(183)|(2[0-9][0-9])") {
>               # force_rtp_proxy();
>               if(src_ip == internal_ip_of_media_server)
>                  force_rtp_proxy("ocfaei");
>               else
>                  force_rtp_proxy("ocfaie");
>       }
>       if (isbflagset(6)) {
>               fix_nated_contact();
>       }
> }
>
> failure_route[1] {
>       if (is_method("INVITE")
>                       &&  (isbflagset(6) || isflagset(5))) {
>               unforce_rtp_proxy();
>       }
>
>          if (t_was_cancelled()) {
>                  exit;
>          }
> }
>
> Any pointers would be greatly appreciated.
>
> Thanks
> Bruce
>
> _______________________________________________
> Kamailio (OpenSER) - Users mailing list
> Users at lists.kamailio.org
> http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
> http://lists.openser-project.org/cgi-bin/mailman/listinfo/users
>
>    

-- 
Daniel-Constantin Mierla
* http://www.asipto.com/




More information about the Users mailing list