No estoy seguro de estar posteando esto en el lugar adecuado, sin embargo, creo que puede ayudar a alguien más.
En una implementación sobre un VPS en donde OML tiene, por un lado un NAT 1:1 contra una IP publica y por otro lado la salida a la PSTN por medio de una PBX que convive en su misma LAN, sucede que la negociación de media en llamados entrantes se efectúa por medio de la WAN. Dejo un grafico para ejemplificar:
(Se puede ver en la imagen que el trafico desde la OML a la PBX se da por la privada y mientras que el correspondiente trafico desde la PBX a OML se da por la WAN)
Esto puede, desde generar trafico WAN innecesario por el cual se debe abonar un diferencial, generar problemas de perdida de paquetes o incluso generar un one-way audio.
La forma de resolver el inconveniente que hemos encontrado es modificar los archivos de configuración de Kamailio y RTP Engine, para forzar el uso de la LAN cuando se trata del troncal entre OML y la PBX local. Esto tiene como drawback que no es persistente entre actualizaciones.
Paso 1 - RTP Engine
Modificar el archivo de configuración, por defecto en /etc/rtpengine-config.conf indicando que tendremos 2 interfaces, una externa que será un NAT 1:1 y otra interna que será la misma IP privada
OPTIONS="-i external/IP-PRIV!IP-PUB -i internal/IP-PRIV -o 60 -a 3600 -d 30 -s 120 -n 127.0.0.1:22222 -m 20000 -M 30000 -L 7 --log-facility=local1"
(sustituir "IP-PRIV" e "IP-PUB" por las correspondientes IPs privadas y públicas respectivamente)
Paso 2 - Kamailio
Modificar el archivo de configuración, por defecto en /opt/omnileads/kamailio/etc/kamailio/kamailio.cfg . Lo que se debe hacer es buscar la ruta “route[rtpengine_answer]” (en la versión 1.16 del archivo es la linea 1322) y modificar el ultimo else (linea 1328) agregando la dirección internal/internal. Con esos parámetros se establece la sesión de rtpengine con los flags que fuerzan el trafico por la LAN.
$var(reflags) = "direction=internal direction=internal trust-address replace-origin replace-session-connection rtcp-mux-demux ICE=remove RTP/AVP";
Quedo a disposición para dar una mano si les parece adecuado subir este cambio al repo.
Saludos cordiales
Exequiel