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(a)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/