[OpenSIPS-Users] Problem with OpenSIPS 1.7, NAT and RTPProxy

siponcloud user kash906 at gmail.com
Wed Aug 8 05:42:57 CEST 2012


Flavio E.Goncalves should be thanked for his exellent book on Building on
Telephony using Opensips 1.6. (Someone should update that for Opensips 1.7
or 1.8. )

Opensips website should consider some common scenarios and post the
opensips.cfg and other configurations for them, which would be directly
used with minor changes.

Thanks,

On Tue, Aug 7, 2012 at 11:36 PM, siponcloud user <kash906 at gmail.com> wrote:

> Opensips 1.6 + nathelper + rtpproxy 1.2.1 is working fine.
>
> Thanks everyone.
>
>
> On Tue, Aug 7, 2012 at 10:11 AM, Ali Pey <alipey at gmail.com> wrote:
>
>> Hi,
>>
>> It's your nat traversal. Capture your call and examine the media ip
>> addresses in the SDP of all invites. That should give you a clue what's
>> wrong.
>>
>> Regards,
>> Ali Pey
>>
>>
>> On Mon, Aug 6, 2012 at 1:47 PM, siponcloud user <kash906 at gmail.com>wrote:
>>
>>> Thanks, that really helped.
>>>
>>> I am still having problem with the following: when user x calls user y,
>>> audio is one-way, and when audio y calls x, audio is two-way. Why is it so?
>>> What could be the possible reasons?
>>>
>>> Also would like to add that -- iptables has to be appropriate rules on
>>> opensips to get clients connecting to it or even rtpproxy connecting to it.
>>>
>>> --
>>> sip user.
>>>
>>>
>>> On Fri, Aug 3, 2012 at 4:49 AM, SamyGo <govoiper at gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> You may not want to tell your rtpproxy module to use DB as well as a
>>>> socket connection at the same time: I wonder if it will work this way.
>>>>
>>>> modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:9999")
>>>>> modparam("rtpproxy", "nortpproxy_str", "a=sdpmangled:yes\r\n")
>>>>> modparam("rtpproxy", "db_url",
>>>>> "mysql://opensips:opensipsrw@localhost/opensips")
>>>>> #modparam("rtpproxy", "db_table", "nh_rtpp")
>>>>> modparam("rtpproxy", "rtpp_socket_col", "rtpproxy_sock")
>>>>
>>>>
>>>> Comment out the red lines as well.
>>>> Once commented restart opensips and verify that your RTPproxy is indeed
>>>> listening on the port 9999
>>>> *
>>>> *
>>>> *#netstat -pln | grep 9999*
>>>>
>>>> If you get an output then its fine, next you should make a call and see
>>>> if the error changes or not.
>>>>
>>>> Regards,
>>>> Sammy.
>>>>
>>>>
>>>> On Fri, Aug 3, 2012 at 2:38 AM, siponcloud user <kash906 at gmail.com>wrote:
>>>>
>>>>> Opensips is a great product, but I have been having problem in
>>>>> configuring
>>>>> the nat traversal + rtpproxy with opensips and have spent about a week
>>>>> on
>>>>> this.  I am a novice in this... when opensips runs with the following
>>>>> opensips.cfg relevant portions -- it raises the following rtpproxy
>>>>> problem:
>>>>>
>>>>> "ERROR:rtpproxy:select_rtpp_node: script error -no valid set selected"
>>>>> "ERROR:rtpproxy:force_rtp_proxy: no available proxies"
>>>>>
>>>>> #-------- nat_traversal params -----
>>>>> modparam("nat_traversal", "keepalive_interval", 30)
>>>>> modparam("nat_traversal", "keepalive_method", "OPTIONS")
>>>>> modparam("nat_traversal", "keepalive_from", "sip:[hidden email]")
>>>>> modparam("nat_traversal", "keepalive_state_file",
>>>>> "/var/run/opensips/keepalive_state")
>>>>>
>>>>> #ak# --- rtpproxy -----
>>>>> # single rtproxy with specific weight
>>>>> modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:9999")
>>>>> modparam("rtpproxy", "nortpproxy_str", "a=sdpmangled:yes\r\n")
>>>>> modparam("rtpproxy", "db_url",
>>>>> "mysql://opensips:opensipsrw@localhost/opensips")
>>>>> #modparam("rtpproxy", "db_table", "nh_rtpp")
>>>>> modparam("rtpproxy", "rtpp_socket_col", "rtpproxy_sock")
>>>>>
>>>>>
>>>>> ####### Routing Logic ########
>>>>>
>>>>>
>>>>> # main request routing logic
>>>>>
>>>>> route{
>>>>>         ####nat_traversal info
>>>>>         force_rport();
>>>>>         if (client_nat_test("7")) {
>>>>>                 fix_contact();
>>>>>                 setflag(5);
>>>>>         }
>>>>>
>>>>>         if ((method=="REGISTER" || method=="SUBSCRIBE" ||
>>>>>                 (method=="INVITE" && !has_totag())) &&
>>>>> client_nat_test("7"))
>>>>>         {
>>>>>                 nat_keepalive();
>>>>>         }
>>>>>         ####nat_traversal info ends
>>>>>
>>>>>         if (!mf_process_maxfwd_header("10")) {
>>>>>                 sl_send_reply("483","Too Many Hops");
>>>>>                 exit;
>>>>>         }
>>>>>
>>>>>         ##ak#
>>>>>         if ((is_method("INVITE")) && has_totag()) {
>>>>> #(has_body("application/sdp"))) {
>>>>>                 engage_rtp_proxy();
>>>>>         }
>>>>>
>>>>>         if (has_totag()) {
>>>>>                 # sequential request withing a dialog should
>>>>>                 # take the path determined by record-routing
>>>>>                 if (loose_route()) {
>>>>>                         if (is_method("BYE")) {
>>>>>                                 setflag(1); # do accounting ...
>>>>>                                 setflag(3); # ... even if the
>>>>> transaction
>>>>> fails
>>>>>                         } else if (is_method("INVITE")) {
>>>>>                                 # even if in most of the cases is
>>>>> useless,
>>>>> do RR for
>>>>>                                 # re-INVITEs alos, as some buggy
>>>>> clients do
>>>>> change route set
>>>>>                                 # during the dialog.
>>>>>                                 record_route();
>>>>>                         }
>>>>>                         # route it out to whatever destination was set
>>>>> by
>>>>> loose_route()
>>>>>                         # in $du (destination URI).
>>>>>                         route(1);
>>>>>                 } else {
>>>>>                         /* uncomment the following lines if you want to
>>>>> enable presence */
>>>>> ##if (is_method("SUBSCRIBE") && $rd == "your.server.ip.address") {
>>>>>                         ##      # in-dialog subscribe requests
>>>>>                         ##      route(2);
>>>>>                         ##      exit;
>>>>>                         ##}
>>>>>                         if ( is_method("ACK") ) {
>>>>>                                 if ( t_check_trans() ) {
>>>>>                                         # non loose-route, but
>>>>> stateful ACK;
>>>>> must be an ACK after
>>>>>                                         # a 487 or e.g. 404 from
>>>>> upstream
>>>>> server
>>>>>                                         t_relay();
>>>>>                                         exit;
>>>>>                                 } else {
>>>>>                                         # ACK without matching
>>>>> transaction
>>>>> ->
>>>>>                                         # ignore and discard
>>>>>                                         exit;
>>>>>                                 }
>>>>>                         }
>>>>>                         sl_send_reply("404","Not here");
>>>>>                 }
>>>>>                 exit;
>>>>>         }
>>>>>
>>>>>         #initial requests
>>>>>
>>>>>         # CANCEL processing
>>>>>         if (is_method("CANCEL"))
>>>>>         {
>>>>>                 if (t_check_trans())
>>>>>                         t_relay();
>>>>>                 #unforce_rtpproxy();
>>>>>                 exit;
>>>>>         }
>>>>>
>>>>>         t_check_trans();
>>>>>
>>>>> # preloaded route checking
>>>>>         if (loose_route()) {
>>>>>                 xlog("L_ERR",
>>>>>                 "Attempt to route with preloaded Route's
>>>>> [$fu/$tu/$ru/$ci]");
>>>>>                 if (!is_method("ACK"))
>>>>>                         sl_send_reply("403","Preload Route denied");
>>>>>                 exit;
>>>>>         }
>>>>>
>>>>>         # record routing
>>>>>         if (!is_method("REGISTER|MESSAGE"))
>>>>>                 record_route();
>>>>>
>>>>>         # account only INVITEs
>>>>>         if (is_method("INVITE")) {
>>>>>                 setflag(1); # do accounting
>>>>>         }
>>>>>         if (!uri==myself)
>>>>>         ## replace with following line if multi-domain support is used
>>>>>         ##if (!is_uri_host_local())
>>>>>         {
>>>>>                 append_hf("P-hint: outbound\r\n");
>>>>>                 # if you have some interdomain connections via TLS
>>>>>                 ##if($rd=="tls_domain1.net") {
>>>>>                 ##      t_relay("tls:domain1.net");
>>>>>                 ##      exit;
>>>>>                 ##} else if($rd=="tls_domain2.net") {
>>>>>                 ##      t_relay("tls:domain2.net");
>>>>>                 ##      exit;
>>>>>                 ##}
>>>>>                 route(1);
>>>>>         }
>>>>>
>>>>>         # requests for my domain
>>>>>
>>>>>         ## uncomment this if you want to enable presence server
>>>>>         ##   and comment the next 'if' block
>>>>>         ##   NOTE: uncomment also the definition of route[2] from
>>>>>  below
>>>>>         ##if( is_method("PUBLISH|SUBSCRIBE"))
>>>>>         ##              route(2);
>>>>>
>>>>>         if (is_method("PUBLISH"))
>>>>>         {
>>>>>                 sl_send_reply("503", "Service Unavailable");
>>>>>                 exit;
>>>>>         }
>>>>>
>>>>>
>>>>>         if (is_method("REGISTER"))
>>>>>         {
>>>>>                 # authenticate the REGISTER requests (uncomment to
>>>>> enable
>>>>> auth)
>>>>>                 ##if (!www_authorize("", "subscriber"))
>>>>> ##{
>>>>>                 ##      www_challenge("", "0");
>>>>>                 ##      exit;
>>>>>                 ##}
>>>>>                 ##
>>>>>                 ##if (!db_check_to())
>>>>>                 ##{
>>>>>                 ##      sl_send_reply("403","Forbidden auth ID");
>>>>>                 ##      exit;
>>>>>                 ##}
>>>>>
>>>>>                 #---- Request is behind NAT(flag5) save with bflag 6
>>>>> ----#
>>>>>                 #---- Use bflag 7 to start SIP pinging (Options)
>>>>> ----#
>>>>>                 if (isflagset(5)) {
>>>>>                         setbflag(6);
>>>>>                         setbflag(7);
>>>>>                 };
>>>>>
>>>>>                 if (!save("location"))
>>>>>                         sl_reply_error();
>>>>>
>>>>>                 exit;
>>>>>         }
>>>>>
>>>>>         if ($rU==NULL) {
>>>>>                 # request with no Username in RURI
>>>>>                 sl_send_reply("484","Address Incomplete");
>>>>>                 exit;
>>>>>         }
>>>>>
>>>>>         # apply DB based aliases (uncomment to enable)
>>>>>         ##alias_db_lookup("dbaliases");
>>>>> if (!lookup("location","m")) {
>>>>>                 switch ($retcode) {
>>>>>                         case -1:
>>>>>                         case -3:
>>>>>                                 t_newtran();
>>>>>                                 t_reply("404", "Not Found");
>>>>>                                 exit;
>>>>>                         case -2:
>>>>>                                 sl_send_reply("405", "Method Not
>>>>> Allowed");
>>>>>                                 exit;
>>>>>                 }
>>>>>         }
>>>>>
>>>>>         # when routing via usrloc, log the missed calls also
>>>>>         setflag(2);
>>>>>
>>>>>         route(1);
>>>>> }
>>>>>
>>>>>
>>>>> route[1] {
>>>>>         # for INVITEs enable some additional helper routes
>>>>>
>>>>>          #---- RTP Proxy handling ---#
>>>>>         if (is_method("BYE|CANCEL")) {
>>>>>                 unforce_rtp_proxy();
>>>>>         } else if (is_method("INVITE")){
>>>>>                 #---- Activates the RTP Proxy for the CALLEE ---#
>>>>>                 rtpproxy_offer();
>>>>>         };
>>>>>         #ak## catch and fix replies
>>>>>         #ak#t_on_reply("2");
>>>>>
>>>>>         if (is_method("INVITE")) {
>>>>>                 t_on_branch("2");
>>>>>                 t_on_reply("2");
>>>>>                 t_on_failure("1");
>>>>>         }
>>>>>
>>>>>         if (!t_relay()) {
>>>>>                 sl_reply_error();
>>>>>         };
>>>>>         exit;
>>>>> }
>>>>>
>>>>> branch_route[2] {
>>>>>         if (client_nat_test("3")) {
>>>>>                 fix_contact();
>>>>>         }
>>>>>
>>>>>         xlog("new branch at $ru\n");
>>>>> }
>>>>>
>>>>>
>>>>> onreply_route[2] {
>>>>>         if (client_nat_test("7")) {
>>>>>                 fix_contact();
>>>>>                 if ( is_method("INVITE") &&
>>>>> has_body("application/sdp") ){
>>>>>                         ######ak# (isflagset(5) || isbflagset(6)) &&
>>>>>                         rtpproxy_answer();
>>>>>                 }
>>>>>         }
>>>>>         xlog("incoming reply\n");
>>>>> }
>>>>>
>>>>>
>>>>> failure_route[1] {
>>>>>
>>>>>         if (t_was_cancelled()) {
>>>>>                 exit;
>>>>>         }
>>>>>
>>>>>         # uncomment the following lines if you want to block client
>>>>>         # redirect based on 3xx replies.
>>>>>         ##if (t_check_status("3[0-9][0-9]")) {
>>>>>         ##t_reply("404","Not found");
>>>>>         ##      exit;
>>>>>         ##}
>>>>>
>>>>>         # uncomment the following lines if you want to redirect the
>>>>> failed
>>>>>         # calls to a different new destination
>>>>>         ##if (t_check_status("486|408")) {
>>>>>         ##      sethostport("192.168.2.100:5060");
>>>>>         ##      # do not set the missed call flag again
>>>>>         ##      t_relay();
>>>>>         ##}
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> View this message in context:
>>>>> http://opensips-open-sip-server.1449251.n2.nabble.com/Problem-with-OpenSIPS-1-7-NAT-and-RTPProxy-tp7581021.html
>>>>> Sent from the OpenSIPS - Users mailing list archive at Nabble.com.
>>>>>
>>>>> _______________________________________________
>>>>> Users mailing list
>>>>> Users at lists.opensips.org
>>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at lists.opensips.org
>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.opensips.org
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20120807/c2c71113/attachment-0001.htm>


More information about the Users mailing list