[OpenSIPS-Users] OpenSIPS mhomed

Bogdan-Andrei Iancu bogdan at voice-system.ro
Wed Dec 8 11:20:12 CET 2010


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..... at .@...w...
> .
> INVITE sip:555 at 10.22.10.1:6000 <http://sip:555@10.22.10.1: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:555@*<PUBLIC IP>*:5066>
> From: "User"<sip:6000@*<PUBLIC IP>*:5066>;tag=79557f47
> Call-ID: 927d4958c229b528 at 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... at .
> .
> .
> .
> .
> ..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:6000@*<PUBLIC IP>*:5066>;tag=79557f47
> To: <sip:555@*<PUBLIC IP>*:5066>;tag=as0b8e2c25
> Call-ID: 927d4958c229b528 at 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 <bogdan at voice-system.ro 
> <mailto:bogdan at voice-system.ro>>
>
>     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;
>         }
>         ------------------------------------------------------------------------
>





More information about the Users mailing list