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@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/


_______________________________________________
Kamailio (OpenSER) - Users mailing list
Users@lists.kamailio.org
http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
http://lists.openser-project.org/cgi-bin/mailman/listinfo/users

Reply via email to