VoIPGateway

From IckyWiki

Jump to: navigation, search

Contents

Current setup for the VoIP Gateway

software

  • openser (1.2.x) from cvs
  • rtpproxy (1.x.x) from cvs
  • Asterisk 1.2.12.x from portage

did source

hosts

  • rooter.erkkila.org(10.1.1.5/24.97.94.217)
    • openser
    • rtpproxy
  • nipplehead.erkkila.org(10.1.1.2)
    • asterisk


Configs

Inside Config

###############################################################################
###############################################################################
##                                                                           ##
## Internal openser config                                                   ##
##                                                                           ##
##                                                                           ##
##                                                                           ##
##                                                                           ##
###############################################################################
###############################################################################
debug=3
fork=yes
log_stderror=no
log_stderror=yes

check_via=no
dns=no
rev_dns=no

fifo="/home/openser/fifo/internal"

###############################################################################
###############################################################################
#mhomed=1

###############################################################################
###############################################################################
listen=tcp:10.1.1.5:5060
listen=udp:10.1.1.5:5060
alias=erkkila.org
alias=rooter.erkkila.org
alias=sip.erkkila.org
alias=sig13.net

###############################################################################
###############################################################################
server_signature=no
server_header="Server: poop on your shoes"

###############################################################################
###############################################################################
mpath="/opt/openser/lib/openser/modules"

loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "xlog.so"
loadmodule "enum.so"
loadmodule "options.so"
loadmodule "mysql.so"
loadmodule "nathelper.so"

###############################################################################
###############################################################################
modparam("usrloc", "db_url" , "mysql://username:password@localhost/openser")
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "use_domain", 1)
modparam("rr", "enable_full_lr", 1)
modparam("registrar", "default_expires", 600)
modparam("registrar", "min_expires", 60)
modparam("registrar", "use_domain", 1)
modparam("registrar", "use_path", 1)
modparam("nathelper", "rtpproxy_sock", "udp:127.0.0.1:12221")
modparam("nathelper", "natping_interval", 10)
modparam("nathelper", "ping_nated_only", 1)


###############################################################################
## Route Start
###############################################################################
route {

        xlog("L_ALERT","New ********************************\n");

        # initial sanity checks -- messages with
        # max_forwards==0, or excessively long requests
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483","Too Many Hops");
                exit;
        };

        if (msg:len >=  2048 ) {
                sl_send_reply("513", "Message too big");
                exit;
        };


        if (method == "BYE" || method == "CANCEL") {
                xlog("L_WARN", "Unforcing proxy\n");
                unforce_rtp_proxy();
        }

        # subsequent messages withing a dialog should take the
        # path determined by record-routing
        if ( loose_route() ) {
                xlog("L_ALERT","*** Message\r\n$mb\n");
                xlog("L_WARN","loose routing ...\n");
                record_route();
                append_hf("P-hint: rr-enforced\r\n");
                route(1);
                exit;
        };

       #
        # Call from the outside sip router
        #
        if ( src_ip == "24.97.94.220" ) {
                xlog("L_WARN", "Packet from external instance\n");
                route(3);
                exit;
        }


        #
        # call for not myself, try and send it outside
        if ( ! (uri == myself) ) {
                xlog("L_WARN","URI != myself => outoing call ...\n");
                record_route();
                append_hf("P-hint: outbound\r\n");
                t_forward_nonack("tcp:24.97.94.220:5060");
                route(1);
                exit;
        };

        #
        # Register
        #
        if ( method == "REGISTER" ) {
                route(2);
                exit;
        }

        #
        # Option
        #
        if ((method==OPTIONS) && (! uri=~"sip:.*[@]+.*")) {
                options_reply();
                exit;
        }


        if ( lookup("location") ) {
                route(4);
                exit;
        }

        # native SIP destinations are handled using our USRLOC DB
        xlog("L_WARN", "Location lookup failed forwarding to voicemail\n");
        record_route();
        rewritehost("10.1.1.2");

        if (!t_relay()) {
                sl_reply_error();
        }

        exit;

}


###############################################################################
###############################################################################

###############################################################################
## Normal Route                                                              ##
###############################################################################
route[1] {

        xlog("L_WARN", "route(1)\n");
        if (!t_relay()) {
                sl_reply_error();
        };
        exit;

}

###############################################################################
## Register                                                                  ##
###############################################################################
route[2] {

        xlog("L_WARN", "Registering\n");
        save("location");
        exit;

}


###############################################################################
###############################################################################
route[3] {

        xlog("L_WARN", "Route(3)\n");
        record_route();

        if ( method == INVITE ) {
                xlog("L_WARN", "Route(3) INVITE\n");

                if ( uri == "sip:13159268490@erkkila.org" ) {
                        xlog("L_WARN", "Rewriting 13159268490 as sip:laptop@erkkila.org\n");
                        rewriteuri("sip:laptop@erkkila.org");
                }

                force_rtp_proxy("erf");

                if ( lookup("location") ) {
                        xlog("L_WARN", "Route(3):INVITE:Location OK\n");
                        t_on_reply("1");
                        route(1);
                        exit;
                }

                xlog("L_WARN", "Route(3):INVITE:lookup location failed\n");
#               rewritehost("10.1.1.2");
                rewriteuri("sip:voicemail@10.1.1.2");
                t_on_reply("1");
                t_relay();
                exit;

        }

}

###############################################################################
###############################################################################
route[4] {

        xlog("L_WARN","Route(4)\n");
        record_route();
        append_hf("P-hint: usrloc applied\r\n");
        route(1);
        exit;

}

###############################################################################
###############################################################################
onreply_route {
        xlog("L_ALERT","ONREPLY_ROUTE(0)\n");
}

###############################################################################
###############################################################################
onreply_route[1] {

#       xlog("L_ALERT","ONREPLY_ROUTE(1)\r\n$mb\n");
#
        xlog("L_ALERT","ONREPLY_ROUTE(1)\n");
        if( status=~"1[0-9][0-9]") {
                xlog("L_WARN", "ONREPLY_ROUTE(1) Provisional response\n");
                exit;
        }

        if ( status =~ "(183)|2[0-9][0-9]" ) {
                xlog("L_WARN", "ONREPLY_ROUTE(1) 183,200-299\n");
                force_rtp_proxy("", "24.97.94.220");
        }

}






##
##
##


Outside Config

###############################################################################
###############################################################################
##                                                                           ##
##                                                                           ##
## External openser config                                                   ##
##                                                                           ##
##                                                                           ##
##                                                                           ##
###############################################################################
###############################################################################
debug=3
fork=yes
log_stderror=no
log_stderror=yes

check_via=no
dns=no
rev_dns=no
children=4
#mhomed=1

###############################################################################
###############################################################################
fifo="/home/openser/fifo/external"

###############################################################################
###############################################################################
listen=tcp:24.97.94.220:5060
listen=udp:24.97.94.220:5060

# http://paulandklaus.example.com/ federation
listen=tcp:24.97.94.220:5090

# http://fed.sig13.net/V1.0/ federation
listen=tcp:24.97.94.220:5100

###############################################################################
###############################################################################
alias=erkkila.org
alias=rooter.erkkila.org
alias=sip.erkkila.org
alias=sig13.net
alias=sip.sig13.net


###############################################################################
################################################################################
server_signature=no
server_header="Server: poop on your shoes"

###############################################################################
###############################################################################
mpath="/opt/openser/lib/openser/modules"

loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "textops.so"
loadmodule "xlog.so"
loadmodule "domainpolicy.so"
loadmodule "mysql.so"


###############################################################################
###############################################################################
modparam("rr", "enable_full_lr", 1)
modparam("domainpolicy", "port_override_avp",      "portoverride")
modparam("domainpolicy", "transport_override_avp", "transportoverride")



###############################################################################
## Route Start
###############################################################################
route {

        xlog("L_ALERT","New ********************************\r\n$mb\n");

        # initial sanity checks -- messages with
        # max_forwards==0, or excessively long requests
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483","Too Many Hops");
                exit;
        };

        #######################################################################
        #######################################################################
        if (msg:len >=  2048 ) {
                sl_send_reply("513", "Message too big");
                exit;
        };


        #######################################################################
        # Block REGISTER for now
        #######################################################################
        if ( method == "REGISTER" ) {
                xlog("Blocking register\n");
                sl_reply_error();
        }

        #######################################################################
        # Block SUBSCRIBE for now
        #######################################################################
        if ( method == "SUBSCRIBE" ) {
                xlog("Blocking subscribes\n");
                sl_reply_error();
        }
        #######################################################################
        # Block NOTIFY for now
        #######################################################################
        if ( method == "NOTIFY" ) {
                xlog("Blocking notify\n");
                sl_reply_error();
        }

        #######################################################################
        # Block OPTIONS for now
        #######################################################################
        if ( method == "OPTIONS" ) {
                xlog("Blocking options\n");
                sl_reply_error();
        }

        #######################################################################
        # subsequent messages withing a dialog should take the
        # path determined by record-routing
        if ( loose_route() ) {
                xlog("L_WARN","loose routing ...\n");
                record_route();
                append_hf("P-hint: rr-enforced\r\n");
                route(1);
                return;
        };

        #######################################################################
        #######################################################################
        if( (dst_port==5090) && (proto==TCP) ) {
                xlog("L_WARN", "message received via TCP port 5090 enum.at federation test\n");
                sl_reply_error();
                return;
        };

        #######################################################################
        #######################################################################
        if ( uri == "sip:13159268490@24.97.94.220" ) {
                xlog("L_WARN", "voxbone inbound to sip:13159268490@24.97.94.220\n");
                record_route();
                rewriteuri("sip:13159268490@erkkila.org");
                if ( ! forward("tcp:10.1.1.5:5060") ) {
                        sl_reply_error();
                }
                return;
        }
        #######################################################################
        #######################################################################
        # voxbone DID servers
        if (    src_ip == 213.246.216.81
                || src_ip == 213.246.216.82
                || src_ip == 213.246.216.90
                || src_ip == 213.246.216.91
                || src_ip == 213.246.216.92 ) {
                # rewritehostport( "12.34.56.78:5060" );
                t_forward_nonack("tcp:10.1.1.5:5060");
                sl_reply_error();
                return;
        };

        #######################################################################
        #######################################################################
        # check the domainpolicy of the destination
        if (dp_can_connect()) {
                # apply domain policy
                if (dp_apply_policy()) {
                        t_relay();
                        exit;
                }
                xlog("L_WARN", "dp_can_connect policy did not get applied\n");
        }

        #######################################################################
        #######################################################################
        xlog("L_WARN", "Falling though the bottom\n");
        record_route();
        route(1);
        return;
}

###############################################################################
###############################################################################

###############################################################################
## Normal Route                                                              ##
###############################################################################
route[1] {
        xlog("L_WARN", "********** ROUTE_1 **********\n");
        # send it out now; use stateful forwarding as it works reliably
        # even for UDP2TCP
        if (!t_relay()) {
                sl_reply_error();
        };
        exit;
}


onreply_route {
        xlog("L_WARN", "*********** ONREPLY_ROUTE **********\r\n$mb\n");
}



##
##
##

openserctl

inside

SIP_DOMAIN=erkkila.org
CTLENGINE="FIFO"
OSER_FIFO="/home/openser/fifo/internal"
OSERBIN="/opt/openser/sbin/openser"
PID_FILE="/home/openser/pid/int.pid"
SYSLOG=0
STARTOPTIONS="-f /home/openser/etc/openser.cfg.int"
VERBOSE=1

outside

SIP_DOMAIN=erkkila.org
CTLENGINE="FIFO"
OSER_FIFO="/home/openser/fifo/external"
OSERBIN="/opt/openser/sbin/openser"
PID_FILE="/home/openser/pid/ext.pid"
SYSLOG=0
STARTOPTIONS="-f /home/openser/etc/openser.cfg.ext"
VERBOSE=1

rtpproxy

This is how to start RTP proxy

rtpproxy -l 10.1.1.5/24.97.94.220 -s udp:127.0.0.1:12221
Personal tools