[Kamailio-Users] SDP IP address not rewritten

Vikram Ragukumar vragukumar at signalogic.com
Thu Feb 11 04:04:51 CET 2010


Klaus,

  -----     -----------     --------     -----           --------
|Nokia|---|SMC7004VWBR|---|Internet|---|Proxy|---------|Asterisk|
  -----     -----------     --------     -----           --------
Cellphone  Wireless Router          Kamailio+rtpproxy

An update on what i've been able to find. The NAT detection section of 
my Kamailio.cfg was testing for NAT using nat_uac_test("19"). Turns out 
that after the first couple of REGISTER messages that the Cellphone 
sends out,subsequent messages have the IP:Port_num in both the Via 
header and the Contact header as PublicIP:Port_num and
Source port = Port in the Via header. So nat_uac_test("19") doesn't flag 
the message as having come from a UA that is behind NAT.

I presume the method to fix this issue is by using nat_uac_test("31"), 
so that the SDP ip address checks are run(which will pass). Is there 
anything else that needs to be done ?

Thanks in advance.
Regards,
Vikram.

Klaus Darilion wrote:
> You have to debug this yourself.
> 
> Add log statements to the .cfg file, e.g. add
>   xlog("L_INFO","calling rtpproxy ...");
> just before the call to force_rtpproxy().
> 
> then verify the logfile if rtpproxy is called.
> 
> Increase debugging (debug=4) and verify the log file for potential 
> problems.
> 
> Configure rtpproxy/kamilio to use a UDP socket instead of the unix 
> socket. Then you can use ngrep/tcpdump to watch the communication 
> between kamailio and rtpproxy.
> 
> regards
> klaus
> 
> Am 09.02.2010 01:25, schrieb Vikram Ragukumar:
>> Hello,
>>
>> I am running Kamailio version 1.5 and rtpproxy version 1.2. I have
>> enabled NAT support in Kamailio.cfg. I have a UA behind NAT (UA
>> IP:192.168.2.101), and the UA registers with an Asterisk server (Public
>> IP) through an outbound proxy running Kamailio and rtpproxy with 
>> Public IP.
>>
>> Registration succeeds, however when making an outbound call from the UA
>> to a cellphone, there is only one sided voice. This is happening because
>> Asterisk is addressing rtp streams to the UA's local IP address instead
>> of its PublicIP:port.
>>
>> Why is the IP address not being rewritten in the SDP ? Is there an
>> alternate way of invoking rtpproxy (with flags) such that the IP address
>> in the SDP is rewritten ?
>>
>> Thanks and Regards,
>> Vikram.
>>
>> PS : Below is the main routing section of my kamailio.cfg
>>
>> route{
>> if (!mf_process_maxfwd_header("10")) {
>> sl_send_reply("483","Too Many Hops");
>> exit;
>> }
>> # NAT detection
>> route(4);
>> 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
>> }
>> route(1);
>> } else {
>> if (is_method("SUBSCRIBE") && uri == myself) {
>> # 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.\n");
>> exit;
>> }
>> }
>> sl_send_reply("404","Not here");
>> }
>> exit;
>> }
>> # CANCEL processing
>> if (is_method("CANCEL"))
>> {
>> if (t_check_trans())
>> t_relay();
>> exit;
>> }
>> t_check_trans();
>> # record routing
>> if (!is_method("REGISTER|MESSAGE"))
>> record_route();
>> # account only INVITEs
>> if (is_method("INVITE")) {
>> setflag(1); # do accounting
>> }
>> if (!uri==myself)
>> {
>> append_hf("P-hint: outbound\r\n");
>> route(1);
>> }
>> # requests for my domain
>> if( is_method("PUBLISH|SUBSCRIBE"))
>> route(2);
>> if (is_method("REGISTER"))
>> {
>> 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")) {
>> 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] {
>> 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;
>> }
>> # Presence route
>> /* uncomment the whole following route for enabling presence server */
>> route[2]
>> {
>>
>> # if presence enabled, this part will not be executed
>> if (is_method("PUBLISH") || $rU==null)
>> {
>> sl_send_reply("404", "Not here");
>> exit;
>> }
>> return;
>> }
>> # Caller NAT detection route
>> /* uncomment the whole following route for enabling Caller NAT 
>> Detection */
>> route[4]{
>> force_rport();
>> if (nat_uac_test("19")) {
>> if (method=="REGISTER") {
>> fix_nated_register();
>> } else {
>> fix_nated_contact();
>> setflag(6);#VR
>> }
>> setflag(5);
>> }
>> return;
>> }
>> # RTPProxy control
>> /* uncomment the whole following route for enabling RTPProxy Control */
>> route[5] {
>> if (is_method("BYE")) {
>> unforce_rtp_proxy();
>> } else if (is_method("INVITE")){
>> force_rtp_proxy();
>> }
>> if (!has_totag()) add_rr_param(";nat=yes");
>> return;
>> }
>> branch_route[1] {
>> xdbg("new branch at $ru\n");
>> }
>> onreply_route[1] {
>> xdbg("incoming reply\n");
>>
>> if ((isflagset(5) || isbflagset(6)) && status=~"(183)|(2[0-9][0-9])") {
>> force_rtp_proxy();
>> }
>> 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;
>> }
>> }
>>
>> _______________________________________________
>> 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




More information about the Users mailing list