Hello community!
I would like to ask for your help in solving a case. I thank you in advance for any collaboration.

I have the following setup:

Both Asterisk and Kamailio are under my responsibility.


Problem:

When I initiate a call from Asterisk, I use Kamailio as the outbound proxy. The INVITE is sent to the SIP provider, and the dialogue proceeds normally until the provider responds with a 200 OK, indicating the call was answered.

However, the 200 OK received from the provider contains a modification in the Contact header, introducing a new IP address into the dialogue. Presumably, this new IP is where the subsequent ACK should be sent.

The issue arises when Kamailio receives this 200 OK: it overwrites the Contact field, replacing the received IP with its own LAN IP, used for communication with Asterisk. As a result, Asterisk sends the ACK back to Kamailio, which, instead of forwarding it to the new IP from the Contact in the 200 OK, sends it to the SIP provider at the same address used for the initial INVITE.

Since the ACK does not reach the IP expected by the provider (the new IP introduced in the Contact), the provider continues to send repeated 200 OK responses, until the call is disconnected due to a timeout, as a valid ACK was never received.


I looked for conceptual answers in RFC 3261 to support my conclusions, but I couldn’t clearly relate the information there to the behavior observed in this scenario.


Key Questions:

  1. Should Kamailio forward the ACK to the new IP provided in the Contact header of the 200 OK?

  2. Is the SIP provider correct in expecting the ACK to be sent to a different address from the original one used in the INVITE?

  3. How can I configure Kamailio to ensure the dialogue proceeds correctly and the ACK is sent to the correct IP?