That's likely because kamailio does not know where the destination endpoint is. You must either share user location information with kamailio or somehow keep track of registered users on kamailio (dual registration or cascade registration or path header if supported by pbx etc.).

--
Muhammad Shahzad Shafi
Tel: +49 176 99 83 10 85





Sent from my phone


-------- Original message --------
From: Алексей Якимкин <ayakimkin@gmail.com>
Date: Wed, 29 Jun 2022, 11:24
To: sr-users@lists.kamailio.org
Subject: [SR-Users] Kamailio behind NAT
Hello,

I have  kamailio in local network behind NAT. Kamailio have one interface eth1 with ip 10.130.0.23

UserAgent - (internet) - (178.0.0.169)router_with_NAT - (LAN) - kamailio+rtpproxy - pbx

I made two listeners:
listen=udp:10.130.0.23:5070 #to pbx in lan (I don`t want to put via header with 178.0.0.169)
listen=udp:10.130.0.23:5060 advertise 178.0.0.169:5060 #to internet (UserAgent need to get via header with 178.0.0.169  )


mhomed = 1 # I think It not useful  for my case

UserAgent send Register and Invite to 178.0.0.169:5060, Kamailio get it on udp:10.130.0.23:5060

Kamailio Relay it to   udp:10.130.0.23:5070

My pbx get requests from  udp:10.130.0.23:5070 with via header 10.130.0.23

Responses to UserAgent go from  udp:10.130.0.23:5060 with via 178.0.0.169


In  RELAY block:
if ($Ru == «udp:10.130.0.23:5070») {
#set_send_socket(«udp:10.130.0.23:5060»);
$fs = «udp:10.130.0.23:5060»;
#force_send_socket(«udp:10.130.0.23:5060»);
} else {
#set_send_socket(«udp:10.130.0.23:5070»);
$fs = «udp:10.130.0.23:5070»;
}
#$fs = «udp:10.130.0.23:5070»;
if (!t_relay()) {
sl_reply_error();
}

route[REGISTRAR] {

        if ($rd == "mydomain.ru" || $rd == "mydomain2.ru") {

          set_send_socket("udp:10.130.0.23:5070");

         }

}


It works for requests from UserAgent to PBX. But INVITE from my pbx to UserAgent goes only through udp:10.130.0.23:5070 ,  Kamailio realy it to internet from udp:10.130.0.23:5070

I get error in syslog:  (pv [pv_branch.c:62]: pv_get_branchx_helper(): error accessing branch [0])

I tried set_send_socket(«udp:10.130.0.23:5070»); and $fs = «udp:10.130.0.23:5070»;

Why I can`t relay outgoing requests to internet through another socket? 


--
Best regards,
Alex