Hi Douglas,

I've recently been through the process of setting opensips up as an 
authenticating relay much the same as you describe. I strip the User-Agent 
header but it would be a single line to add a replacement one in after this.
I also remove remove the g711 codecs due to bandwidth limitations and change 
any reference to internal IP addresses to our external IP for RTP traffic.

I've pasted the resulting config below for you to start with. Some more 
knowledgable people here can probably point out any issues with it. I'm sure 
I'm not handling packets on the external interface very well but without these 
steps (particularly in the branch route) BYEs from the ITSP got messed up 
before being passed to our PBX.

For reference:
        • this is running on our router
        • the external IP address is 203.31.111.19
        • the internal IP address is 192.168.52.1
        • the ITSP address is sip.pennytel.com
        • the PBX IP address is 192.168.52.31 (I really would rather not use 
this anywhere since it stuffs up using high availability, etc)

Regards,
Andrew Radke
Yuruga Nursery Pty Ltd
Clonal Solutions Australia Pty Ltd
PO Box 220
Walkamin Qld 4872
Phone: (07) 4093 3826
Fax: (07) 4093 3869
Email: andrew.ra...@yuruga.com.au
Web: www.yuruga.com.au

On 26/01/2012, at 3:58 AM, Douglas Adami wrote:

> Hello everyone, I'm new here and I go to test my settings, but I need to 
> authenticate a remote server, I was reading about the UAC module, one has 
> configuration examples? I can also customize the user_agent authentication 
> for each record, because the service only allows specific user_agents?
> 
> Thanks in advance!
> 
> Regards, Doug
> _______________________________________________
> Users mailing list
> Users@lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users



debug=2
log_stderror=no
log_facility=LOG_LOCAL0

fork=yes
children=4

port=5060
listen=192.168.52.1
listen=203.31.111.19
mhomed=1

dns=no
rev_dns=no
disable_tcp=yes
auto_aliases=no


####### Modules Section ########

#set module path
mpath="/usr/lib/opensips/modules/"

loadmodule "rr.so"
loadmodule "tm.so"
loadmodule "uac.so"
loadmodule "xlog.so"
loadmodule "textops.so"
loadmodule "sl.so"
loadmodule "uri.so"
loadmodule "exec.so"

# ----------------- setting module-specific parameters ---------------
modparam("uac", "credential", "<userid>:sip.pennytel.com:<password>")
modparam("uac","from_restore_mode","auto")
modparam("rr", "enable_full_lr", 1)
modparam("exec", "time_to_kill", 1)




####### Routing Logic ########

# main request routing logic

route{
        xlog ("L_INFO","$ci -------START main_route------\n");
        xlog ("L_NOTICE","$ci $rm $ou from $si\n");
        remove_hf("Proxy-Authorization");
        remove_hf("User-Agent");
        
        # Remove reference to high bandwidth codecs and internal media 
addresses if appropriate
        # ------------
        if ( has_body("application/sdp") ) {
                if ( search_body("a=rtpmap:. PCM.\/.*\n") ) {
                        xlog ("L_INFO","$ci Removing g711 codecs...\n");
                        replace_body_all("a=rtpmap:. PCM.\/.*\n", "");
                }
                if ( search_body("192\.168\.52\..*") ) {
                        xlog ("L_INFO","$ci Correcting RTP IP address...\n");
                        replace_body_all("192\.168\.52\..*", "203.31.111.19");
                }
        }
        
        if (method == "BYE" || method == "CANCEL") {
                xlog ("$ci $fU ($fn) $rm $oU\n");
        }
        
        # Loose Route
        # -----------
        if (loose_route()) {
                xlog ("L_INFO","$ci Loose routing\n");
                route(1);
                return;
        }
        if (dst_ip == "203.31.111.19") {
                xlog ("L_NOTICE", "$ci main route external: $rm $ou from $si to 
$rd\n");
                route(4);
                xlog ("L_INFO","$ci INVITE: Recording route\n"); 
                record_route();
                route(1);
                return;
        }

        # Call Type Processing
        # --------------------
        if (uri != myself) {
                xlog ("L_ERR","$ci $rm $ou / $rs $rr NOT for here from $si to 
$rd:\n");
                xlog ("L_ERR","$ci request body: $rb\n");
                sl_send_reply("404", "Won't relay calls");
                return;
        };

        if (uri == myself) {
                xlog ("L_INFO","$ci $rm for router from $si\n");
                if (method == "BYE" || method == "CANCEL") {
                        route(1);
                        return;
                } else if (method == "ACK") {
                        route(3);
                        return;
                } else if (method == "INVITE") {
                        route(2);
                        return;
                } else {
                        sl_send_reply("404", "Unsupported");
                        return;
                }
        };
        
        xlog ("L_CRIT","$ci Made it to the end... SHOULD NOT BE HERE!\n");
        route(1);
}


# Default Message Handling
# -----------------------
route[1] {
        t_on_reply("1");
        t_on_branch("1");
        if (!t_relay()) {
                xlog ("L_ERR","$ci Forwarding failed to $rd\n");
                sl_reply_error();
        } else {
                xlog ("L_INFO","$ci Forwarded okay to $rd\n");
        };
}

# INVITE Message Handling
# ----------------------------------
route[2] {
        xlog ("$ci $fU ($fn) calling $oU\n");
        
        exec_avp("ifconfig ppp0 | grep UP | sed 's/.* UP .*/UP/'", 
"$avp(s:ppp0)");
        xlog ("L_ERR", "$ci ppp0 status: $avp(s:ppp0)\n");
        if ( $avp(s:ppp0) != "UP" ) {
                xlog ("L_ERR", "$ci Internet connection (ppp0) is down. Cannot 
place call.\n");
                sl_send_reply("404", "Internet down. Cannot place call.");
                return;
        }

        xlog ("L_INFO","$ci INVITE: Recording route\n"); 
        record_route();
        if (t_newtran()) { 
                xlog ("L_INFO","$ci INVITE: created new transaction\n"); 
                t_reply("183","Trying internet call..."); 
        }
        
        xlog ("L_INFO","$ci Forwarding request to sip.pennytel.com\n");
        
        rewritehost("sip.pennytel.com");
        
        t_on_failure("1");
        route(1);
        return;
}

# ACK Message Handling
# ----------------------------------
route[3] {
        # ACK sent to router to be forwarded to ITSP
        rewritehost("sip.pennytel.com");
        route(1);
        return;
}

route[4] {
        xlog ("L_INFO","$ci -------START external packet------\n");
        $var(i) = 0;
        $var(dest) = "";
        while ( $var(i) < 10 ) {
                if ( $var(dest) == "" && $(hdr(Route)[$var(i)]) != NULL ) {
                        $var(route) = $(hdr(Route)[$var(i)]);
                        $var(route) = $(var(route){s.select,0,;});
                        $var(route) = $(var(route){s.select,1,:});
                        xlog ("L_INFO","$ci Route $var(i): $var(route)\n");
                        if ( $var(route) != "203.31.111.19" && $var(route) != 
"192.168.52.1" ) {
                                xlog ("L_INFO","$ci Found next route: 
$var(route)\n");
                                $var(dest) = $var(route);
                        }
                }
                $var(i) = $var(i) + 1;
        }
        if ( $var(dest) == "" ) {
                $var(dest) = "192.168.52.31";
                xlog ("L_ERR","$ci Using fallback next route of $var(dest)\n");
        }
        if ( $rd != $var(dest) ) {
                xlog ("L_NOTICE", "$ci Changing next route from $rd to 
$var(dest)\n");
                $rd = $var(dest);
        }
        xlog ("L_INFO", "$ci Next route: $rd\n");
        xlog ("L_INFO","$ci -------END external packet------\n");
}

failure_route[1] {
        xlog ("L_INFO","$ci -------START failure_route------\n");
        if (t_check_status("40[17]")) {
                xlog ("L_INFO","$ci Authentication requested\n");
                if (uac_auth()) {
                        xlog ("L_INFO","$ci Authentication successfull\n");
                        t_relay("udp:sip.pennytel.com");
                } else {
                        xlog ("L_CRIT","$ci Authentication FAILED\n");
                }
        }
        xlog ("L_INFO","$ci -------END failure_route------\n");
}

onreply_route[1] {
        xlog ("L_INFO","$ci -------START onreply_route------\n");
        xlog ("L_INFO","$ci $rs $rr from $si\n");
        if (t_check_status("183")) {
                if (subst_uri('/Session Progress/Ringing.../i') ) {
                        xlog ("L_INFO","$ci Changing 'Session Progress' to 
'Ringing...'");
                }
                replace("Session Progress", "Ringing...");      # Doesn't work 
because it's not inside the body
                #drop();
        }
        xlog ("L_INFO","$ci -------END onreply_route------\n");
}

branch_route[1] {
        xlog ("L_INFO","$ci -------START branch_route------\n");
        xlog ("L_INFO","$ci SIP Request's original URI: $ou\n");
        xlog ("L_INFO","$ci SIP Request's URI:          $ru\n");
        xlog ("L_INFO","$ci Destination URI:            $du\n");
        if ( $oU != NULL && subst_uri('/^sip:([^@]+)(;.*|)$/sip:$oU@\1\2/i') ) {
                xlog ("L_NOTICE","$ci adding extension ($oU) back in to uri");
        }
        if (dst_ip == "203.31.111.19") {
                xlog ("L_NOTICE", "$ci branch route external: $rm $ou from $si 
to $rd\n");
                route(4);
        }
        xlog ("L_INFO","$ci -------END branch_route------\n");
}
_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to