It is not necessary to use 2 tables. You could also use the nat_flag as described in
http://lists.iptel.org/pipermail/serusers/2003-December/004412.html
regards, Klaus
-----Original Message----- From: Thilo Salmon [mailto:salmon@netzquadrat.de] Sent: Monday, December 29, 2003 4:53 PM To: serusers@lists.iptel.org Subject: [Serusers] nathelper / calling UAs behind symmetric NATs
Hi,
I am trying to force incoming calls destined for a UA behind a symmetric NAT through rtpproxy. In order to distinguish between those agents behind a NAT and those out in the open, I saved their location in two different tables upon registration. It now appears that even though I set db_mode to '1' to force usrloc to immediately write-back all data to the db, ser remembers a successful registration in the regular location tables.
A REGISTER request is immediately written into my NAT tables while the regular tables follows only a little later. When I call the UA in question ser will find the agent in my regular location table. When I manually delete the UA entry from the location table (and restart ser!) my configuration will force the rtp stream just as expected.
Can anybody enlighten my whether this is a bug or a feature? Also I would be very interested in learning how to handle UAs behind symmetric NATs or how to keep state learned at registration time.
I attached parts of my configuration hoping to clarify what I am trying to do.
Thilo
P.S.: this is ser 0.8.12
if (method=="REGISTER") { if ("header indicates symmetric NAT") { save("natlocation"); } else { save("location"); }; };
[...]
if ((method==INVITE)) { if(lookup("location")) { xlog("L_ERR", "UA found in
'location'\n"); } else { if(lookup("natlocation")) { xlog("L_ERR", "UA found in 'natlocation'\n"); force_rtp_proxy(); t_on_reply("2"); } else { sl_send_reply("404", "Not Found"); break; }; }; };
[...]
onreply_route[2] { if (status=~"2[0-9][0-9]"){ xlog("L_ERR", "forcing rtp stream back from NATed UA through localhost\n"); force_rport(); force_rtp_proxy(); }; }
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Klaus,
thanks for pointing this out. This looks like a way better solution to me. You would not believe how long I searched for this solution. Let's feed google some keyword here:
symmetric NAT incoming ser force rtp rtpproxy state register registration called UA location usrloc.
Thanks
Thilo
On Mon, 2003-12-29 at 17:01, Klaus Darilion wrote:
It is not necessary to use 2 tables. You could also use the nat_flag as described in
http://lists.iptel.org/pipermail/serusers/2003-December/004412.html