Hi

You also uploaded a pcap trace, using this link (which you sent directly to me).
- https://1drv.ms/u/s!AkdU9Y6p5WVyjnrodIHt6EgS-h3U
I read it and it's clear what's going wrong.

This is your desired flow.

192.168.0.11  --->  192.168.0.2  --->  122.97.130.198
192.168.0.11  <--- 36.140.122.12 <---  122.97.130.198

In this, your INVITE goes to the public IP address (122.97.130.198) like this.

INVITE sip:+8618626439917@122.97.130.198:15060;user=phone SIP/2.0
Record-Route: <sip:36.140.122.12:7080;lr;ftag=5c1a6b917a705e9e;did=2c4.8532;nat=yes;vst=AAAAAAAAAAAAAAAAAAAAAAAAAAALAAAIARYfAx4cCw4IAgE1MDYwO3VzZXI9cGhvbmU->
Via: SIP/2.0/UDP 36.140.122.12:7080;branch=z9hG4bKe61a.5fe9d645ef1bbe470ca6d57fa20375bf.0
Via: SIP/2.0/UDP 192.168.0.11:45642;received=192.168.0.11;branch=z9hG4bK98457cb5b0e44505;rport=45642

The 200-OK goes to the UAC (192.168.0.11) like this.

SIP/2.0 200 OK
Via: SIP/2.0/UDP 36.140.122.12:7080;rport=7080;branch=z9hG4bKe61a.5fe9d645ef1bbe470ca6d57fa20375bf.0
Via: SIP/2.0/UDP 192.168.0.11:45642;received=192.168.0.11;branch=z9hG4bK98457cb5b0e44505;rport=45642
Record-Route: <sip:192.168.0.159;r2=on;lr=on;nat=yes>
Record-Route: <sip:122.97.130.198:15060;r2=on;lr=on;nat=yes>
Record-Route: <sip:36.140.122.12:7080;lr;ftag=5c1a6b917a705e9e;did=2c4.8532;nat=yes;vst=AAAAAAAAAAAAAAAAAAAAAAAAAAALAAAIARYfAx4cCw4IAgE1MDYwO3VzZXI9cGhvbmU->


The problem is, as you know, that the ACK from the UAC is routed to the public IP address 36.140.122.12, whereas you want it to be sent to the private IP address.
For this, double record-routing is required, as suggested earlier in this thread.

My best guess is that your proxy has one IP address. A problem is that we now know that you have your listen directive set to listen on the private interface, but always advertise the public IP address, but this is not what you want. You want to advertise one address in one direction and another in the other direction. You want two Record-Route header fields when relaying the initial INVITE.

I see two possible solutions (but there may be others).
- Get your proxy server to listen on two addresses, and force the socket when relaying messages. This can be cumbersome and tricky.
- Try using the record_route_preset() function from the rr module. This can be used to write the two Record-Route header fields exactly as you want (in the correct order, of course).

I recommend the second option, because it would be simpler for me to implement. I don't know how to do it in KEMI, though.
https://kamailio.org/docs/modules/5.7.x/modules/rr.html#rr.f.record_route_preset

James

On Mon, 9 Oct 2023 at 07:12, 城门 虾米 via sr-users <sr-users@lists.kamailio.org> wrote:
listen=udp:0.0.0.0:7080 advertise 36.140.122.12:7080

发件人: Nick F <nik.oloakt@gmail.com>
发送时间: 2023年10月9日 6:36
收件人: 城门 虾米 <codenot@msn.com>
抄送: Kamailio (SER) - Users Mailing List <sr-users@lists.kamailio.org>
主题: Re: [SR-Users] 回复: Re: kamailio Behind nat. How Record-Route should be added ?
 
Hello, 

Could you please share part of "listen=" in your config. Do you have two separate interfaces for each IP?

пн, 9 окт. 2023 г. в 06:00, 城门 虾米 via sr-users <sr-users@lists.kamailio.org>:




UA(192.168.0.11) received 183,  find Record-Route(36.140.122.12)
then send ACK  to 36.140.122.12(Kamialio public ip)   not 192.168.0.2(kamailio internal ip),  so Kamailio can't receive ACK.

this is my config,192.168.0.11 -> Kamailio ->  Other SBC(public ip)
function ksr_request_route()
      if KSR.is_INVITE() then
            KSR.rr.record_route();
            KSR.nathelper.fix_nated_contact()
      end
end

This question has been bothering me for a long time,  help me

发件人: James Browne <james@frideo.com>
发送时间: 2023年10月2日 12:03
收件人: Kamailio (SER) - Users Mailing List <sr-users@lists.kamailio.org>
抄送: codenot@msn.com <codenot@msn.com>
主题: Re: [SR-Users] Re: kamailio Behind nat. How Record-Route should be added ?
 
If you upload a packet capture, I'll look at it and try to tell you
what's going wrong.
This is certainly something that can work, and I always find that
making a diagnosis with a packet capture is the root to the solution.
It's going to be difficult for anyone to help resolve your problem
without a code example, a trace, or a detailed description of the
problem. If you start with a packet capture, then I'll try to help
you. If you give me a sample of code, too, then it'll be easier for
me.

James

On Thu, 28 Sept 2023 at 10:56, codenot--- via sr-users
<sr-users@lists.kamailio.org> wrote:
>
> i tried. but it does't work.
> modparam("rr", "enable_double_rr", 1)
> __________________________________________________________
> Kamailio - Users Mailing List - Non Commercial Discussions
> To unsubscribe send an email to sr-users-leave@lists.kamailio.org
> Important: keep the mailing list in the recipients, do not reply only to the sender!
> Edit mailing list options or unsubscribe:
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
To unsubscribe send an email to sr-users-leave@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
To unsubscribe send an email to sr-users-leave@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe: