Hi Yuri,
as I see, opensips really thinks and uses the 10.22.10.254 IP as
outbound IP - you see the RR with 10.22.10.254 IP and the VIA with this IP.
The message looks correctly formatted: the only issue in your case is
the outbound IP of the request - are you sure you do not have some
iptables rules to change the src IP of some packages??
Regards,
Bogdan
Yuri Kirsanov wrote:
Hi Bogdan,
Thank you for reply, I tried to do as you recommended, I moved
rewritehostport & force_send_socket into main routing block just
before route(1); I do understand that I'm doing two RRs, but here's
TCPdump of the softphone trying to Invite, notice that these are
packets from OpenSIPS to Asterisk, and they use Public IP to send SIP
packets to internal Private IP:
00:10:05.942128 IP *<PUBLIC IP>*.5068 > 10.22.10.1.6000: UDP, length 961
.pv.k..pv.s...e.....@[email protected]...
.
INVITE sip:[email protected]:6000 <http://sip:[email protected]:6000> SIP/2.0
Record-Route: <sip:10.22.10.254:5068;r2=on;lr=on;ftag=79557f47>
Record-Route: <sip:*<PUBLIC IP>*:5066;r2=on;lr=on;ftag=79557f47>
Via: SIP/2.0/UDP 10.22.10.254:5068;branch=z9hG4bK8b37.90541a01.0
Via: SIP/2.0/UDP <PHONE IP>:6036;received=<PHONE
IP>;branch=z9hG4bK-d87543-fe60ef3b8e5cdd4d-1--d87543-;rport=6036
Max-Forwards: 69
Contact: <sip:6000@<PHONE IP>:6036>
To: <sip:5...@*<PUBLIC IP>*:5066>
From: "User"<sip:6...@*<PUBLIC IP>*:5066>;tag=79557f47
Call-ID: 927d4958c229b...@zmxhc2g.
CSeq: 1 INVITE
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE,
SUBSCRIBE, INFO
Content-Type: application/sdp
Supported: eventlist
User-Agent: eyeBeam release 3015c stamp 27107
Content-Length: 190
v=0
o=- 3069147771 3069148115 IN IP4 <PHONE IP>
s=eyeBeam
c=IN IP4 <PHONE IP>
t=0 0
m=audio 8306 RTP/AVP 8 18 101
a=fmtp:101 0-15
a=rtpmap:101 telephone-event/8000
a=sendrecv
Then, Asterisk replies using private IPs:
00:10:05.942717 IP 10.22.10.1.6000 > 10.22.10.254.5068: UDP, length 637
.pv.s..pv.k...e...e...@.
.
.
.
.
..p....k7SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/UDP
10.22.10.254:5068;branch=z9hG4bK8b37.90541a01.0;received=*<PUBLIC IP>*
Via: SIP/2.0/UDP <PHONE IP>:6036;received=<PHONE
IP>;branch=z9hG4bK-d87543-fe60ef3b8e5cdd4d-1--d87543-;rport=6036
From: "User"<sip:6...@*<PUBLIC IP>*:5066>;tag=79557f47
To: <sip:5...@*<PUBLIC IP>*:5066>;tag=as0b8e2c25
Call-ID: 927d4958c229b...@zmxhc2g.
CSeq: 1 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO
Supported: replaces
Proxy-Authenticate: Digest algorithm=MD5, realm="asterisk",
nonce="1e41babb"
Content-Length: 0
And then OpenSIPS responds from Public IP again:
00:10:05.944903 IP *<PUBLIC IP>*.5068 > 10.22.10.1.6000: UDP, length 353
2010/12/7 Bogdan-Andrei Iancu <[email protected]
<mailto:[email protected]>>
Hi Yuri,
Yuri Kirsanov wrote:
Hi community,
I have following setup:
Public IP (eth0) < OpenSIPS > Private IP (eth1) <------>
Private IP (eth0) Asterisk.
I'm trying to relay all the initial packets received by
OpenSIPS to Asterisk, so I record-route initial packets and
process all responses using loose routing. OpenSIPS is
restricted to use only two UDP IP addresses - private & public
ones. It all works fine on SIP layer, I do understand that I
also need RTP proxy, but at this stage I've got strange
problem - with mhomed=1 in configuration file OpenSIPS still
sends packets using public IP address, while Contact, To and
Via fields are set correctly, to private IP address of OpenSIPS.
OpenSIPS does not changes Contact and To IPs when forwarding a
request.....are you sure you see such changes???
The only IPs that reflects the used interface are the VIA and
Record-Route...Actually in your case (if interface changing is
done), you should have 2 RR headers...
Also, using mhomed and force_send_socket() in the same time is a
bit redundant - they do the same : setting the outgoing interface
for the request:
- mhomed is doing autodetection based on destination IP
- force_send_socket() is setting the inteface from script.
BTW, it is bogus to do:
rewritehostport("10.22.10.1:6000 <http://10.22.10.1:6000>
<http://10.22.10.1:6000/>");
force_send_socket(10.22.10.254);
in route[1] as this route is a generic relay route used also for
sending sequential requests.....put that lines in main route just
where you do record_route().
Regards,
Bogdan
I have tried to use force_send_socket but without any luck.
Could you please help me with this configuration? At least -
why does OpenSIPS uses public IP? Thanks!
Here's my configuration:
####### Global Parameters #########
log_facility=LOG_LOCAL4
fork=yes
children=4
debug=9
disable_tcp=yes
auto_aliases=no
mhomed=1
port=5066
listen=udp:XXX.XXX.XXX.XXX:5066
listen=udp:10.22.10.254:5068 <http://10.22.10.254:5068>
<http://10.22.10.254:5068/>
####### Modules Section ########
#set module path
mpath="/opt/opensips/lib64/opensips/modules/"
loadmodule "signaling.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "textops.so"
loadmodule "mi_fifo.so"
loadmodule "uri.so"
# ----------------- setting module-specific parameters
---------------
# ----- mi_fifo params -----
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
# ----- rr params -----
# add value to ;lr param to cope with most of the UAs
modparam("rr", "enable_full_lr", 1)
modparam("rr", "append_fromtag", 1)
# ----- uri params -----
modparam("uri", "use_uri_table", 0)
####### Routing Logic ########
# main request routing logic
route{
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
if (is_method("BYE")) {
setflag(1); # do accounting ...
setflag(3); # ... even if the
transaction fails
} else if (is_method("INVITE")) {
# even if in most of the cases
is useless, do RR for
# re-INVITEs alos, as some
buggy clients do change route set
# during the dialog.
record_route();
}
# route it out to whatever destination
was set by loose_route()
# in $du (destination URI).
route(1);
} else {
if ( is_method("ACK") ) {
if ( t_check_trans() ) {
# non loose-route, but
stateful ACK; must be an ACK after
# a 487 or e.g. 404
from upstream server
t_relay();
exit;
} else {
# ACK without matching
transaction ->
# ignore and discard
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
#initial requests
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
# preloaded route checking
if (loose_route()) {
xlog("L_ERR",
"Attempt to route with preloaded Route's
[$fu/$tu/$ru/$ci]");
if (!is_method("ACK"))
sl_send_reply("403","Preload Route
denied");
exit;
}
record_route();
route(1);
}
route[1] {
rewritehostport("10.22.10.1:6000
<http://10.22.10.1:6000> <http://10.22.10.1:6000/>");
force_send_socket(10.22.10.254);
if (!t_relay()) {
sl_reply_error();
};
exit;
}
------------------------------------------------------------------------
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users