VoIPGateway
From IckyWiki
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
- voxbone http://www.voxbone.com
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
