Hi Alberto,

Yes, in the registration record the Contact URI is kept as received and the "fixed" src IP is stored into the "received" field. Upon lookup the contact URI goes into RURI (as you observed) and the "received" goes into dst_uri (destination URI) or $du. When OpenSIPS relays, the $du takes precedence to the $ru, the requests goes to the right destination.

Best regards,

Bogdan-Andrei Iancu

OpenSIPS Founder and Developer
  https://www.opensips-solutions.com
OpenSIPS Bootcamp 5-16 Dec 2022, online
  https://www.opensips.org/training/OpenSIPS_eBootcamp_2022/

On 12/14/22 1:50 AM, Alberto wrote:
Hi,
I have a problem with a vpn setup, not really nat, or maybe it's nat...

The setup I have is:
Phone - openvpn - opensips - public internet - asterisk

openvpn subnet: 10.0.0.0/24 <http://10.0.0.0/24>
openvpn server: 172.172.0.2/24 <http://172.172.0.2/24>
opensips server: 172.172.0.10/24 <http://172.172.0.10/24>

In my configuration I have:

loadmodule "mid_registrar.so"
modparam("mid_registrar", "max_contacts", 1)
modparam("mid_registrar", "mode", 0)
modparam("mid_registrar", "received_avp", "$avp(rcv)")
modparam("mid_registrar", "tcp_persistent_flag", "TCP_PERSIST_REGISTRATIONS")

if (nat_uac_test(119)) {
  setbflag("NAT");
  if (is_method("REGISTER")) {
    fix_nated_register();
  } else {
    fix_nated_contact();
  }
}

if (is_method("REGISTER")) {
  mid_registrar_save("location", "p0");
  .....
}

if ($(tu{uri.param,ctid}) != NULL && mid_registrar_lookup("location")) {
  if (!t_relay()) {
    send_reply(500, "Internal Error");
  }
}

So, when the phone sends a REGISTER to opensips, the contact header contains the private ip of the vpn (10.0.0.X/24). fix_nated_register is able to detect that the ip in the contact is different from the source ip and sets the received avp. But if I do opensips-cli -x mi ul_dump, I see that the contact still contains the openvpn ip, and the received field contains the correct openvpn ip. This is a problem because when I do the mid_registrar_lookup, $ru is set to the contact, which contains an ip that the opensips server is not aware of. It should instead contain the openvpn server ip (172.172.0.2), that could then route the call to the phone.

I tried to change $rd manually, but that just breaks routing for ACK messages.
What am I doing wrong?

Thanks


_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to