[SR-Users] Kamailio 3.2, NAT, rtpproxy bridging between interfaces

Russell McConnachie russell at mcconnachie.ca
Tue Sep 11 15:12:06 CEST 2012


Hello,

I'm having some issues getting media bridging working in kamailio and 
rtpproxy. I've attempted to attach as much relevant information as 
possible. Thanks in advance for taking a look; I'm completely stuck 
right now.

Actual results:No audio is being passed through the rtpproxy from caller 
"A" to caller "B" even though both media server and UAC are sending 
media to the rtpproxy.
Expected results:Audio that is sent to rtpproxy is bridged/proxied 
across from caller "A" to caller "B" and vice-versa.

-------------------------------------------------------------------------------
Signaling trace:
-------------------------------------------------------------------------------

08:34:57.543224 IP (tos 0x0, ttl  49, id 3237, offset 0, flags [none], 
proto: UDP (17), length: 1456) x.x.x.199.31280 > x.x.x.102.sip: SIP, 
length: 1428
         INVITE sip:9991 at r18.test-bwks.local:5060 SIP/2.0
         Via: SIP/2.0/UDP 
192.168.2.250:51620;branch=z9hG4bK1158b9f850c008ff7.6835b1eb6e3bffee5
         Route: <sip:x.x.x.102:5060;lr>
         Max-Forwards: 70
         From: "99999999" 
<sip:99999999 at r18.test-bwks.local:5060>;tag=1cf0b02fab
         To: "9991" <sip:9991 at r18.test-bwks.local:5060>
         Call-ID: b2af8b83e20b0740
         CSeq: 29663 INVITE
         Allow:  INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, OPTIONS, 
UPDATE, PRACK, SUBSCRIBE, INFO
         Allow-Events: talk, hold, conference, LocalModeStatus
         Contact: "99999999" 
<sip:99999999 at 192.168.2.250:51620;transport=udp;srcadr=192.168.2.250:5060>;+sip.instance="<urn:uuid:00000000-0000-1000-8000-00085D2DF3BB>"
         Supported: gruu, path, timer, 100rel, replaces
         User-Agent: Aastra 57i/2.6.0.1007
         Content-Type: application/sdp
         Content-Length: 619

         v=0
         o=MxSIP 0 0 IN IP4 192.168.2.250
         s=SIP Call
         c=IN IP4 192.168.2.250
         t=0 0
         m=audio 51720 RTP/AVP 0 18 106 107 113 110 111 112 98 97 115 96 
9 8 101
         a=rtpmap:0 PCMU/8000
         a=rtpmap:18 G729/8000
         a=rtpmap:106 BV16/8000
         a=rtpmap:107 BV32/16000
         a=rtpmap:113 L16/16000
         a=rtpmap:110 PCMU/16000
         a=rtpmap:111 PCMA/16000
         a=rtpmap:112 L16/8000
         a=rtpmap:98 G726-16/8000
         a=rtpmap:97 G726-24/8000
         a=rtpmap:115 G726-32/8000
         a=rtpmap:96 G726-40/8000
         a=rtpmap:9 G722/8000
         a=rtpmap:8 PCMA/8000
         a=rtpmap:101 telephone-event/8000
         a=silenceSupp:on - - - -
         a=fmtp:18 annexb=yes
         a=fmtp:101 0-15
         a=ptime:30
         a=sendrecv

08:34:57.545766 IP (tos 0x10, ttl  64, id 58136, offset 0, flags [none], 
proto: UDP (17), length: 439) x.x.x.102.sip > x.x.x.199.31280: SIP, 
length: 411
         SIP/2.0 100 trying -- your call is important to us
         Via: SIP/2.0/UDP 
192.168.2.250:51620;branch=z9hG4bK1158b9f850c008ff7.6835b1eb6e3bffee5;rport=31280;received=x.x.x.199
         From: "99999999" 
<sip:99999999 at r18.test-bwks.local:5060>;tag=1cf0b02fab
         To: "9991" <sip:9991 at r18.test-bwks.local:5060>
         Call-ID: b2af8b83e20b0740
         CSeq: 29663 INVITE
         Server: kamailio (3.2.4 (x86_64/linux))
         Content-Length: 0

08:34:57.547619 IP (tos 0x10, ttl  64, id 47936, offset 0, flags [+], 
proto: UDP (17), length: 1500) 10.0.0.38.sip > 10.0.0.29.sip: SIP, 
length: 1472
         INVITE sip:9991 at 10.0.0.29 SIP/2.0
         Record-Route: <sip:10.0.0.38;r2=on;lr=on;nat=yes>
         Record-Route: <sip:x.x.x.102;r2=on;lr=on;nat=yes>
         Via: SIP/2.0/UDP 10.0.0.38;branch=z9hG4bK4ed5.ec1e41a.0
         Via: SIP/2.0/UDP 
192.168.2.250:51620;rport=31280;received=x.x.x.199;branch=z9hG4bK1158b9f850c008ff7.6835b1eb6e3bffee5
         Max-Forwards: 69
         From: "99999999" 
<sip:99999999 at r18.test-bwks.local:5060>;tag=1cf0b02fab
         To: "9991" <sip:9991 at r18.test-bwks.local:5060>
         Call-ID: b2af8b83e20b0740
         CSeq: 29663 INVITE
         Allow:  INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, OPTIONS, 
UPDATE, PRACK, SUBSCRIBE, INFO
         Allow-Events: talk, hold, conference, LocalModeStatus
         Contact: "99999999" 
<sip:99999999 at x.x.x.199:31280;transport=udp;srcadr=192.168.2.250:5060>;+sip.instance="<urn:uuid:00000000-0000-1000-8000-00085D2DF3BB>"
         Supported: gruu, path, timer, 100rel, replaces
         User-Agent: Aastra 57i/2.6.0.1007
         Content-Type: application/sdp
         Content-Length: 629

         v=0
         o=MxSIP 0 0 IN IP4 10.0.0.38
         s=SIP Call
         c=IN IP4 10.0.0.38
         t=0 0
         m=audio 29682 RTP/AVP 0 18 106 107 113 110 111 112 98 97 115 96 
9 8 101
         a=rtpmap:0 PCMU/8000
         a=rtpmap:18 G729/8000
         a=rtpmap:106 BV16/8000
         a=rtpmap:107 BV32/16000
         a=rtpmap:113 L16/16000
         a=rtpmap:110 PCMU/16000
         a=rtpmap:111 PCMA/16000
         a=rtpmap:112 L16/8000
         a=rtpmap:98 G726-16/8000
         a=rtpmap:97 G726-24/8000
         a=rtpmap:115 G726-32/8000
         a=rtpmap:96 G726-40/8000
         a=rtpmap:9 G722/8000
         a=rtpmap:8 PCMA/8000
         a=rtpmap:101 telephone-event

08:34:57.551126 IP (tos 0x0, ttl  64, id 0, offset 0, flags [DF], proto: 
UDP (17), length: 409) 10.0.0.29.55620 > 10.0.0.38.sip: SIP, length: 381
         SIP/2.0 100 Trying
         Via:SIP/2.0/UDP 
10.0.0.38;branch=z9hG4bK4ed5.ec1e41a.0,SIP/2.0/UDP 
192.168.2.250:51620;received=x.x.x.199;branch=z9hG4bK1158b9f850c008ff7.6835b1eb6e3bffee5;rport=31280
From:"99999999"<sip:99999999 at r18.test-bwks.local:5060>;tag=1cf0b02fab
         To:"9991"<sip:9991 at r18.test-bwks.local:5060>
         Call-ID:b2af8b83e20b0740
         CSeq:29663 INVITE
         Content-Length:0

08:34:57.561084 IP (tos 0x0, ttl  64, id 0, offset 0, flags [DF], proto: 
UDP (17), length: 723) 10.0.0.29.55620 > 10.0.0.38.sip: SIP, length: 695
         SIP/2.0 180 Ringing
         Via:SIP/2.0/UDP 
10.0.0.38;branch=z9hG4bK4ed5.ec1e41a.0,SIP/2.0/UDP 
192.168.2.250:51620;received=x.x.x.199;branch=z9hG4bK1158b9f850c008ff7.6835b1eb6e3bffee5;rport=31280
From:"99999999"<sip:99999999 at r18.test-bwks.local:5060>;tag=1cf0b02fab
To:"9991"<sip:9991 at r18.test-bwks.local:5060>;tag=1693866893-1347366897367
         Call-ID:b2af8b83e20b0740
         CSeq:29663 INVITE
         Supported:
         Contact:<sip:10.0.0.29:5060>
Record-Route:<sip:10.0.0.38;r2=on;lr=on;nat=yes>,<sip:x.x.x.102;r2=on;lr=on;nat=yes>
         P-Asserted-Identity:"Auto Attendant"<sip:9991 at 10.0.0.29;user=phone>
         Privacy:none
Allow:ACK,BYE,CANCEL,INFO,INVITE,OPTIONS,PRACK,REFER,NOTIFY,UPDATE
         Content-Length:0

08:34:57.562404 IP (tos 0x10, ttl  64, id 58137, offset 0, flags [none], 
proto: UDP (17), length: 672) x.x.x.102.sip > x.x.x.199.31280: SIP, 
length: 644
         SIP/2.0 180 Ringing
         Via:SIP/2.0/UDP 
192.168.2.250:51620;received=x.x.x.199;branch=z9hG4bK1158b9f850c008ff7.6835b1eb6e3bffee5;rport=31280
From:"99999999"<sip:99999999 at r18.test-bwks.local:5060>;tag=1cf0b02fab
To:"9991"<sip:9991 at r18.test-bwks.local:5060>;tag=1693866893-1347366897367
         Call-ID:b2af8b83e20b0740
         CSeq:29663 INVITE
         Supported:
         Contact:<sip:10.0.0.29:5060>
Record-Route:<sip:10.0.0.38;r2=on;lr=on;nat=yes>,<sip:x.x.x.102;r2=on;lr=on;nat=yes>
         P-Asserted-Identity:"Auto Attendant"<sip:9991 at 10.0.0.29;user=phone>
         Privacy:none
Allow:ACK,BYE,CANCEL,INFO,INVITE,OPTIONS,PRACK,REFER,NOTIFY,UPDATE
         Content-Length:0

08:34:57.609771 IP (tos 0x0, ttl  64, id 0, offset 0, flags [DF], proto: 
UDP (17), length: 953) 10.0.0.29.55620 > 10.0.0.38.sip: SIP, length: 925
         SIP/2.0 200 OK
         Via:SIP/2.0/UDP 
10.0.0.38;branch=z9hG4bK4ed5.ec1e41a.0,SIP/2.0/UDP 
192.168.2.250:51620;received=x.x.x.199;branch=z9hG4bK1158b9f850c008ff7.6835b1eb6e3bffee5;rport=31280
From:"99999999"<sip:99999999 at r18.test-bwks.local:5060>;tag=1cf0b02fab
To:"9991"<sip:9991 at r18.test-bwks.local:5060>;tag=1693866893-1347366897367
         Call-ID:b2af8b83e20b0740
         CSeq:29663 INVITE
         Supported:
         Contact:<sip:10.0.0.29:5060>
Record-Route:<sip:10.0.0.38;r2=on;lr=on;nat=yes>,<sip:x.x.x.102;r2=on;lr=on;nat=yes>
         P-Asserted-Identity:"Auto Attendant"<sip:9991 at 10.0.0.29;user=phone>
         Privacy:none
Allow:ACK,BYE,CANCEL,INFO,INVITE,OPTIONS,PRACK,REFER,NOTIFY,UPDATE
Accept:application/media_control+xml,application/sdp,multipart/mixed
         Content-Type:application/sdp
         Content-Length:133

         v=0
         o=BroadWorks 196 1 IN IP4 10.0.0.24
         s=-
         c=IN IP4 10.0.0.24
         t=0 0
         m=audio 10498 RTP/AVP 0
         a=rtpmap:0 PCMU/8000
         a=ptime:20

08:34:57.612047 IP (tos 0x10, ttl  64, id 58138, offset 0, flags [none], 
proto: UDP (17), length: 930) x.x.x.102.sip > x.x.x.199.31280: SIP, 
length: 902
         SIP/2.0 200 OK
         Via:SIP/2.0/UDP 
192.168.2.250:51620;received=x.x.x.199;branch=z9hG4bK1158b9f850c008ff7.6835b1eb6e3bffee5;rport=31280
From:"99999999"<sip:99999999 at r18.test-bwks.local:5060>;tag=1cf0b02fab
To:"9991"<sip:9991 at r18.test-bwks.local:5060>;tag=1693866893-1347366897367
         Call-ID:b2af8b83e20b0740
         CSeq:29663 INVITE
         Supported:
         Contact:<sip:10.0.0.29:5060>
Record-Route:<sip:10.0.0.38;r2=on;lr=on;nat=yes>,<sip:x.x.x.102;r2=on;lr=on;nat=yes>
         P-Asserted-Identity:"Auto Attendant"<sip:9991 at 10.0.0.29;user=phone>
         Privacy:none
Allow:ACK,BYE,CANCEL,INFO,INVITE,OPTIONS,PRACK,REFER,NOTIFY,UPDATE
Accept:application/media_control+xml,application/sdp,multipart/mixed
         Content-Type:application/sdp
         Content-Length:161

         v=0
         o=BroadWorks 196 1 IN IP4 x.x.x.102
         s=-
         c=IN IP4 x.x.x.102
         t=0 0
         m=audio 29774 RTP/AVP 0
         a=rtpmap:0 PCMU/8000
         a=ptime:20
         a=sdpmangled:yes

08:34:57.844645 IP (tos 0x0, ttl  49, id 3239, offset 0, flags [none], 
proto: UDP (17), length: 506) x.x.x.199.31280 > x.x.x.102.sip: SIP, 
length: 478
         ACK sip:10.0.0.29:5060 SIP/2.0
         Via: SIP/2.0/UDP 
192.168.2.250:51620;branch=z9hG4bK15c3c5e900b3f6d36.26b037b92d0bba7c9
         Route: <sip:x.x.x.102;r2=on;lr=on;nat=yes>, 
<sip:10.0.0.38;r2=on;lr=on;nat=yes>
         Max-Forwards: 70
         From: "99999999" 
<sip:99999999 at r18.test-bwks.local:5060>;tag=1cf0b02fab
         To: "9991" 
<sip:9991 at r18.test-bwks.local:5060>;tag=1693866893-1347366897367
         Call-ID: b2af8b83e20b0740
         CSeq: 29663 ACK
         User-Agent: Aastra 57i/2.6.0.1007
         Content-Length: 0

08:34:57.845182 IP (tos 0x10, ttl  64, id 47937, offset 0, flags [none], 
proto: UDP (17), length: 509) 10.0.0.38.sip > 10.0.0.29.sip: SIP, 
length: 481
         ACK sip:10.0.0.29:5060 SIP/2.0
         Via: SIP/2.0/UDP 10.0.0.38;branch=z9hG4bKcydzigwkX
         Via: SIP/2.0/UDP 
192.168.2.250:51620;rport=31280;received=x.x.x.199;branch=z9hG4bK15c3c5e900b3f6d36.26b037b92d0bba7c9
         Max-Forwards: 69
         From: "99999999" 
<sip:99999999 at r18.test-bwks.local:5060>;tag=1cf0b02fab
         To: "9991" 
<sip:9991 at r18.test-bwks.local:5060>;tag=1693866893-1347366897367
         Call-ID: b2af8b83e20b0740
         CSeq: 29663 ACK
         User-Agent: Aastra 57i/2.6.0.1007
         Content-Length: 0

-------------------------------------------------------------------------------

The call session is up at this point.

CPE Router, Source NAT IP x.x.x.199, Internal Network: 192.168.2.0/24
     192.168.2.250  is an Aastra 6757i IP Phone, behind the

x.x.x.102 is the external interface on our SIP proxy allowing traffic on:
     Inbound: port 5060/udp
     Inbound: range 16384 - 32768/udp

     10.0.0.38      is the internal interface facing our BroadWorks lab 
cluster
     10.0.0.29       is the internal interface of our BroadWorks 
Application Server
     10.0.0.24       is the internal interface of our BroadWorks Media 
Server

RTP Proxy has been spawned with the following command line arguments:

     /usr/bin/rtpproxy -p /var/run/rtpproxy.pid -u rtpproxy \
         -u root \
         -s udp:localhost:7722 \
         -l x.x.x.102/10.0.0.38 \
         -d DBUG LOG_LOCAL5 \
         -m 16384 -M 32768

We've changed the /etc/kamailio/kamailio.cfg and added the #!define's at 
the top of the
configuration file:

#!define WITH_NAT
#!define WITH_DEBUG

In the route[NATMANAGE] { } block we've added a few additional lines to 
handle the setup
of the rtpproxy_manage() function which handles the rtpproxy_offer(), 
rtpproxy_answer()
and unforce_rtp_proxy() convientenly in one function.

The logic we've got in place currently is:

     if ((src_ip =~ "10\.0\.0\.*") && (dst_ip =~ "10\.0\.0\.*")) {
             xlog("L_INFO", "Media session for ($ci) with source address 
($si): Internal > External: SDP contact/origin will be x.x.x.102");
             rtpproxy_manage("FAIEOC", "x.x.x.102");

     } else if (!(src_ip =~ "10\.0\.0\.*") && (dst_ip == x.x.x.102)) {
             xlog("L_INFO", "Media session for ($ci) with source address 
($si): External > Internal: SDP contact/origin will be 10.0.0.38");
             rtpproxy_manage("FAEIOC", "10.0.0.38");

     } else {
             xlog("L_INFO", "!!! Uncaught condition for media session 
for ($ci) with source address ($si) !!!");
     }

This rtpproxy log is not from the call above, but the same source #, 
destination # were used:

Sep 11 08:50:27 sip-proxy1 rtpproxy[3101]: INFO:handle_command: new 
session 84bf2a7cb9d4ab24, tag dcfa6a860e;1 requested, type strong
Sep 11 08:50:27 sip-proxy1 rtpproxy[3101]: INFO:handle_command: new 
session on a port 28282 created, tag dcfa6a860e;1
Sep 11 08:50:27 sip-proxy1 rtpproxy[3101]: INFO:handle_command: 
pre-filling caller's address with 192.168.2.250:51720
Sep 11 08:50:27 sip-proxy1 rtpproxy[3101]: INFO:handle_command: lookup 
on ports 28282/22500, session timer restarted
Sep 11 08:50:27 sip-proxy1 rtpproxy[3101]: INFO:handle_command: 
pre-filling callee's address with 10.0.0.24:10502

... Call is currently active and then hung-up ...

Sep 11 08:51:28 sip-proxy1 rtpproxy[3101]: INFO:process_rtp: session timeout
Sep 11 08:51:28 sip-proxy1 rtpproxy[3101]: INFO:remove_session: RTP 
stats: 0 in from callee, 0 in from caller, 0 relayed, 0 dropped
Sep 11 08:51:28 sip-proxy1 rtpproxy[3101]: INFO:remove_session: RTCP 
stats: 0 in from callee, 0 in from caller, 0 relayed, 0 dropped
Sep 11 08:51:28 sip-proxy1 rtpproxy[3101]: INFO:remove_session: session 
on ports 28282/22500 is cleaned up

Example of the RTP:

08:53:13.555834 IP (tos 0x0, ttl  48, id 510, offset 0, flags [none], 
proto: UDP (17), length: 200) x.x.x.199.32052 > x.x.x.102.16552: UDP, 
length 172

     x.x.x.199:32052 > x.x.x.102:16552
         Why is this packet not being forwarded to the media proxy
         (rtpproxy) to 10.0.0.24 (specified in the 200 OK from the 
BroadWorks Application Server)

08:53:13.562206 IP (tos 0x10, ttl  64, id 0, offset 0, flags [DF], 
proto: UDP (17), length: 200) 10.0.0.24.10504 > 10.0.0.38.17968: UDP, 
length 172

     10.0.0.24:10504 > 10.0.0.38:17968
         Why is this packet not being forwarded from rtpproxy to the UAC 
at x.x.x.199?


-------------------------------------------------------------------------------
System details:
-------------------------------------------------------------------------------
OS: CentOS 5.8 x86-64, Hypervisor is qemu-kvm
Memory: 2GB
Disk: 40G
VCPU: 1

/etc/sysctl.conf:

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

-------------------------------------------------------------------------------
Current software versions:
-------------------------------------------------------------------------------
[root at sip-proxy1 kamailio]# rpm -qa | grep -E 'kamailio|rtpproxy' | 
xargs rpm -qi
Name        : rtpproxy                     Relocations: (not relocatable)
Version     : 1.2.1                             Vendor: Fedora Project
Release     : 2.el5                         Build Date: Sun 19 Sep 2010 
08:12:23 AM EDT
Install Date: Mon 10 Sep 2012 09:23:28 PM EDT      Build Host: 
x86-10.phx2.fedoraproject.org
Group       : Applications/Internet         Source RPM: 
rtpproxy-1.2.1-2.el5.src.rpm
Size        : 105682                           License: BSD
Signature   : DSA/SHA1, Mon 20 Sep 2010 12:40:46 PM EDT, Key ID 
119cc036217521f6
Packager    : Fedora Project
URL         : http://www.rtpproxy.org
Summary     : A symmetric RTP proxy
Description :
This is symmetric RTP proxy designed to be used in conjunction with
the SIP Express Router (SER) or any other SIP proxy capable of
rewriting SDP bodies in SIP messages that it processes.

Name        : kamailio                     Relocations: (not relocatable)
Version     : 3.2.4                             Vendor: kamailio.org
Release     : 1.1                           Build Date: Fri 03 Aug 2012 
05:14:14 AM EDT
Install Date: Tue 11 Sep 2012 08:22:32 AM EDT      Build Host: build08
Group       : Productivity/Telephony/SIP/Servers   Source RPM: 
kamailio-3.2.4-1.1.src.rpm
Size        : 10200784                         License: GPL
Signature   : DSA/SHA1, Fri 03 Aug 2012 05:14:38 AM EDT, Key ID 
c9a75909941fdbdd
Packager    : Daniel-Constantin Mierla <miconda at gmail.com>
URL         : http://kamailio.org/
Summary     : Kamailio, very fast, reliable and flexible SIP Server
Description :
Kamailio is a very fast, reliable and flexible SIP (RFC3261)
proxy server. Written entirely in C, kamailio can handle thousands calls
per second even on low-budget hardware. A C Shell like scripting language
provides full control over the server's behaviour. It's modular
architecture allows only required functionality to be loaded.
Among available features: IPv4, IPv6, digest authentication, accounting,
CPL scripts, instant messaging, MySQL and UNIXODBC support, SIMPLE presence
agent, radius authentication, record routing, SMS gateway, ENUM, UDP, TCP,
TLS and SCTP, transaction and dialog module, OSP module, statistics support,
registrar and user location, SNMP, SIMPLE Presence and Perl programming
interface.

Name        : kamailio-cpl                 Relocations: (not relocatable)
Version     : 3.2.4                             Vendor: kamailio.org
Release     : 1.1                           Build Date: Fri 03 Aug 2012 
05:14:14 AM EDT
Install Date: Tue 11 Sep 2012 08:22:33 AM EDT      Build Host: build08
Group       : Productivity/Telephony/SIP/Servers   Source RPM: 
kamailio-3.2.4-1.1.src.rpm
Size        : 296947                           License: GPL
Signature   : DSA/SHA1, Fri 03 Aug 2012 05:14:38 AM EDT, Key ID 
c9a75909941fdbdd
Packager    : Daniel-Constantin Mierla <miconda at gmail.com>
URL         : http://kamailio.org/
Summary     : CPL module (CPL interpreter engine) for Kamailio
Description :
The kamailio-cpl package provides a CPL interpreter engine for Kamailio




More information about the sr-users mailing list