Hi Andrew,
My question was about the BYE request - all the routing information
(Route+RURI) are pointing to your server - I find this a bit strange as
there is no information about the end device (where openser should send
further the request).
If I understand correctly your scenario, it seams you change the contact
IP from INVITE into the openser IP - this is not good as it will make
impossible to make difference between loose route and strict route.
So your problem is that you put in INVITE's contact the server IP.
Regards,
Bogdan
Andrew Pogrebennyk wrote:
Hi Bogdan,
I'm a bit surprised by your question. OpenSER works in ALG mode -
connects two disconnected networks. So it inserts 2 Record-Routes
(enable_double_rr parameter of rr module is enabled by default). On
the public side OpenSER talks to b2bua. b2bua memorizes Record-Routes
and when it receives BYE that it must send further to OpenSER, it
inserts Route headers with both IPs of OpenSER - those it originally
got in Record-Routes.
To explain it further, end device 10.0.1.2 is connected to OpenSER ALG
via VPN. OpenSER listens on the private IP 10.0.0.100 that is directly
reachable for the client, and public IP a.b.c.d. Device is configured
with IP address of proxy/b2bua as "domain" (let's call it w.x.y.z) and
private IP address of OpenSER ALG 10.0.0.100 - as an outgoing proxy.
So when it calls it sends for example such INVITE to OpenSER 10.0.0.100:
INVITE sip:cld@w.x.y.z SIP/2.0
Via: SIP/2.0/UDP
10.0.1.2:8304;branch=z9hG4bK-d87543-e31904647634642f-1--d87543-;rport
Max-Forwards: 70
Contact: <sip:user@10.0.1.2:8304>
To: <sip:cld@w.x.y.z>
From: <sip:user@w.x.y.z>;tag=a1255825
...
OpenSER proxies this INVITE from private to public interface and then
to proxy/b2bua that it talks to. The latter receives it with such
headers (I believe vias, from and to can be omitted):
INVITE sip:cld@w.x.y.z SIP/2.0
Record-Route:
<sip:a.b.c.d;r2=on;lr;ftag=6751d9e2-80fb-1810-8010-0015c5bf2da5>
Record-Route:
<sip:10.0.0.100;r2=on;lr;ftag=6751d9e2-80fb-1810-8010-0015c5bf2da5>
Contact: sip:user@a.b.c.d
The call eventually gets connected. Some time later the callee gets
bored and sends BYE. Its contents are not relevant here - remember
that it talks to b2bua. b2bua puts Route headers and finally sends the
following request to OpenSER:
BYE sip:user@a.b.c.d SIP/2.0
Via: SIP/2.0/UDP
w.x.y.z;branch=z9hG4bK4f44.b91363e99e6c107e32eda5c5526933be.0
Via: SIP/2.0/UDP
w.x.y.z:5061;branch=z9hG4bK5bcae8426bb383dcf815d7db04dbaacf;rport=5061
Route: <sip:a.b.c.d;r2=on;lr;ftag=6751d9e2-80fb-1810-8010-0015c5bf2da5>
Route:
<sip:10.0.0.100;r2=on;lr;ftag=6751d9e2-80fb-1810-8010-0015c5bf2da5>
And this particular BYE confuses OpenSER. Hope I've been clear enough.
Now who's at fault?
I can send OpenSER config and detailed log files to your private email
if you deem it necessary.
Thanks,
Bogdan-Andrei Iancu wrote:
Hi Andrew,
Just a short question - how comes that your BYE has proxy ips in RURI
and Route ? where the end-device IP ??
Regards,
Bogdan
Andrew Pogrebennyk wrote:
> Hi,
> Im'm cross-posting this from OpenSER-Devel because I am not 100%
> sure this is a bug.
>
> I am trying to create openser configuration for proxy that connects
> private (VPN) network with public network. I started with a config
> similar to
http://voipembedded.com/resources/openser_cr.cfg, added a
> call to force_send_socket() to send from public IP and
> rtpproxy/nathelper in bridge mode. As per config loose_route() is
> called from openser.cfg to route a sequential request within a
> dialog through record-routing.
> Now when a BYE from callee comes in, it contains two Route headers:
> Route: <a.b.c.d;r2=on;lr;ftag=...> where a.b.c.d is server's public
> IP, Route: <10.0.0.100;r2=on;lr;ftag=...> where 10.0.0.100 is a
> private IP and username(a)a.b.c.d in Request-URI.