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/>");
       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/>

####### 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/>");
        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


--
Bogdan-Andrei Iancu
OpenSIPS Bootcamp
15 - 19 November 2010, Edison, New Jersey, USA
www.voice-system.ro


_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to