Hi Fabio!
It also depends on the configuration of your main proxy as the main proxy will save the contact address in the REGISTER requests.
If the NAT is symmetric, the SIP messages also has to use the outbound proxy for contacting the UA as shown below, as the pinhole in the NAT box is only open for requests from the same IP/port which received the REGISTER message:
UA1 UA2 outbound main -----INVITE-----------------> ---------INVITE------>
<----INVITE------ <------INVITE---------
To do this, the outbound proxy also has to keep state of the location of the NATed UAs. I think this is hard to do with ser. Thus, I suggest to do not use a separate outbound proxy but integrate the NAT traversal into the main proxy (as iptel does).
Is someone else using ser+nathelper+rtpproxy successful in a plain outbound proxy configuration (comparable to the jasomi boxes)?
regards, Klaus
Fábio Silvestri wrote:
WoW
Klaus, from client with public IP I can reach nated client very well. My problem is only when client with nat ip try to reach another client with nat ip too.
The ser.cfg on Outbound proxy machine, has this configuration:
route{ log(1, "-------------------------------------------\n"); log(1, "entering main loop (5060)\n");
if (nat_uac_test("2")) { log(1, "src address different than via header->NAT
detected\n"); log(1, "force_rport and fix_nated_contact and setflag(5)\n"); #try NAT traversal, works only if the client is symmetrical force_rport(); fix_nated_contact(); append_hf("P-hint: fixed NAT contact for request\r\n"); # flag 5 indicates that incoming request is from NATed client setflag(5); }; record_route(); # loose-route processing if (loose_route()) { t_relay(); break; }; #inserted by klaus if (method=="INVITE") { log(1, "INVITE\n"); record_route(); force_rtp_proxy(); /* set up reply processing */ t_on_reply("1"); }; # forward to current uri now; use stateful forwarding; that # works reliably even if we forward from TCP to UDP if (!t_relay()) { sl_reply_error(); };
}
#inserted by klaus # all incoming replies for t_onrepli-ed transactions enter here onreply_route[1] { log(1, "REPLY\n"); if (status=~"[12][0-9][0-9]") { force_rtp_proxy(); log(1, "PROXY\n"); } }
Klaus Darilion wrote:
rtpproxy also works fine within this setup.
Try if you can reach the natted client from an client with public IP. If this is not possible, maybe the conteact in the location table is wrong. Do you use fix_nated_contact(); and natping from the nathelper module to keep the bindings in the NAT boxes alive?
Klaus
Fábio Silvestri wrote:
Hi
I'm still in trouble with using SER & rtpproxy.
Everything works fine, just one only thing doesn't, if I'm registered with my ATA186 with nated ip (192.168.0.2) I can dial and talk with everybody on PSTN, but if I try to dial for another ATA186 (behind a nat 192.168.1.2) or maibe for the number configured on second port on ATA186, the call don't happen.
I think this maibe a problem with rtpproxy, maibe they can't control two sessions with behind nat; because if the second ATA186 has valid IP, everything works fine.