Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
migration:kamailio-3.0-config [2009/05/13 12:57]
miconda
migration:kamailio-3.0-config [2009/11/27 16:27] (current)
188.27.169.22
Line 1: Line 1:
 ====== Kamailio 3.0 Config ====== ====== Kamailio 3.0 Config ======
  
-This page provides guidelines to get the default config file of Kamailio 1.5.x working with SIP Router core. 
  
-Functionalities: +Updated tutorial using the **kamailio_3.0** branch is available at:
-  SIP routing +
-  User location +
-  Authentication +
-  Accounting +
-  * NAT traversal +
-  * Presence server+
  
-===== Install from GIT ===== +http://www.kamailio.org/dokuwiki/doku.php/install:kamailio-3.0.x-from-git
- +
-<hi #6495ed>It is highly recommended that you have Kamailio 1.5.x installed already so you can use the additional tools coming with that version and not yet included in SIP Router. See here [[http://www.kamailio.org/dokuwiki/doku.php/install:kamailio-1.5.x-from-svn|a step by step guide to install Kamailio 1.5.x from SVN]]</hi> +
- +
-The steps here are given for Unbuntu/Debian based distributions and should be easy to adapt to other Linux distros. +
- +
-==== 1. Prerequisites ==== +
- +
-To be able to follow the guidelines from this document you need **root** access. +
- +
-The following packages are required before proceeding to the next steps. +
- +
-  * __git__ client: apt-get install git-core - it is recommended to have the latest version, which might not be part of the distribution yet, but you can get it from: http://git-scm.com/ +
- +
-  * __gcc__ compiler: apt-get install gcc +
- +
-  * __flex__ - apt-get install flex +
- +
-  * __bison__ - apt-get install bison +
- +
-  * __libmysqlclient15-dev__ - apt-get install libmysqlclient15-dev +
- +
-  * __make__ - apt-get install make +
- +
-==== 2. Getting sources from GIT ==== +
- +
- +
-First of all, you have to create a directory on the file system where the sources will be stored.  +
- +
-<code> +
-  mkdir -p /usr/local/src/sr +
-   +
-  cd /usr/local/src/sr +
-</code> +
- +
-Download the sources from GIT using the following command. +
- +
-<code> +
-git clone --depth 1 git://git.sip-router.org/sip-router +
-</code> +
- +
- +
-===== 3.Tuning Makefiles ===== +
- +
-Next step is to edit Makefile files to include the MySQL module. +
-<code> +
-  cd sip-router +
-   +
-  vim Makefile +
-</code> +
- +
-Remove **db_mysql** from **exclude_modules** variable. +
- +
-Note: if you need PCRE-dependent modules (e.g., lcr, dialplan, regexp), instal the PCRE devel library and uncomment +
- +
- +
-===== 4. Compile SIP Router ===== +
- +
-Once the mysql module was removed from excluded modules list, you can compile: +
- +
-<code> +
-  make all +
-</code> +
- +
- +
-===== 5. Install SIP Router ===== +
- +
-When the compilation is ready, install with the following command: +
- +
-  make install +
- +
-===== 6. What and where was installed ===== +
- +
-The binaries and executable scripts were installed in: +
- +
-<code> +
-  /usr/local/sbin +
-</code> +
- +
-These are: +
- +
-  * __ser__ - SIP Router binary +
- +
- +
-To be able to use the binaries from command line, make sure that '/usr/local/sbin' is set in PATH environment variable. You can check that with 'echo $PATH'. If not and you are using 'bash', open '/root/.bash_profile' and at the end add: +
- +
-  PATH=$PATH:/usr/local/sbin +
-  export PATH +
- +
-SIP Router modules are installed in: +
- +
-  /usr/local/lib/ser/modules/ +
- +
-The documentation and readme files are installed in: +
- +
-  /usr/local/share/doc/ser/ +
- +
-The man pages are installed in: +
- +
-  /usr/local/share/man/man5/ +
-  /usr/local/share/man/man8/ +
- +
-The configuration file was installed in: +
- +
-  /usr/local/etc/ser/ser.cfg +
- +
-However, this configuration file is not the one used by Kamailio (OpenSER) 1.5.x. Next section includes it. +
- +
- +
-===== 7. Kamailio Config File ===== +
- +
-  * this is the configuration file from Kamailio (OpenSER) 1.5.x adapted for the development version based on SIP-Router.org project +
-  * it has turned on most of the features that are by default commented (authentication, accounting, nat traversal, presence) +
-  * copy it and paste into **/usr/local/etc/ser/kamailio.org** +
- +
-<code> +
-+
-# $Id: kamailio.cfg 5679 2009-03-10 09:22:27Z ibc_sf $ +
-+
-# Kamailio (OpenSER) SIP Server - basic configuration script +
-#     - web: http://www.kamailio.org +
-#     - svn: http://openser.svn.sourceforge.net/viewvc/openser/ +
-+
-# Direct your questions about this file to: <users@lists.kamailio.org> +
-+
-# Refer to the Core CookBook at http://www.kamailio.org/dokuwiki/doku.php +
-# for an explanation of possible statements, functions and parameters. +
-+
-# There are comments showing how to enable different features in th econfig +
-# file. Such commented code starts with #X# where X is a letter to identify +
-# a feature. Delete entire #X# if you want to enable that feature. Next are +
-# sed commands that help you enable such features. +
-+
-# *** To enamble mysql execute: +
-#     sed -i 's///g' kamailio.cfg +
-+
-# *** To enamble authentication execute: +
-#     - enable mysql +
-#     sed -i 's///g' kamailio.cfg +
-#     - add users using 'kamctl' +
-+
-# *** To enamble persistent user location execute: +
-#     - enable mysql +
-#     sed -i 's///g' kamailio.cfg +
-+
-# *** To enamble presence server execute: +
-#     - enable mysql +
-#     sed -i 's///g' kamailio.cfg +
-+
-# *** To enamble nat traversal execute: +
-#     sed -i 's///g' kamailio.cfg +
-#     - install RTPProxy: http://www.rtpproxy.org +
-#     - start RTPProxy: +
-#        rtpproxy -l _your_public_ip_ -s udp:localhost:7722 +
-+
-# *** To enhance accounting execute: +
-#     - enable mysql +
-#     sed -i 's///g' kamailio.cfg +
-#     - add following columns to database +
-# ALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT ''; +
-# ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT ''; +
-# ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT ''; +
-# ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT ''; +
-# ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT ''; +
-# ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT ''; +
-# ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT ''; +
-# ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT ''; +
-# ALTER TABLE missed_call ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT ''; +
-# ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT ''; +
-+
- +
- +
-####### Global Parameters ######### +
- +
-debug=4 +
-memdbg=5 +
-memlog=5 +
-log_stderror=yes +
-log_facility=LOG_LOCAL0 +
- +
-fork=yes +
-children=1 +
- +
-/* uncomment the following lines to enable debugging */ +
-#debug=6 +
-#fork=no +
-#log_stderror=yes +
- +
-/* uncomment the next line to disable TCP (default on) */ +
-disable_tcp=yes +
- +
-/* uncomment the next line to enable the auto temporary blacklisting of  +
-   not available destinations (default disabled) */ +
-#disable_dns_blacklist=no +
- +
-/* uncomment the next line to enable IPv6 lookup after IPv4 dns  +
-   lookup failures (default disabled) */ +
-#dns_try_ipv6=yes +
- +
-/* uncomment the next line to disable the auto discovery of local aliases +
-   based on revers DNS on IPs (default on) */ +
-auto_aliases=no +
- +
-/* uncomment the following lines to enable TLS support  (default off) */ +
-#disable_tls = no +
-#listen = tls:your_IP:5061 +
-#tls_verify_server = 1 +
-#tls_verify_client = 1 +
-#tls_require_client_certificate = 0 +
-#tls_method = TLSv1 +
-#tls_certificate = "/usr/local/etc/kamailio/tls/user/user-cert.pem" +
-#tls_private_key = "/usr/local/etc/kamailio/tls/user/user-privkey.pem" +
-#tls_ca_list     = "/usr/local/etc/kamailio/tls/user/user-calist.pem" +
- +
- +
-listen=udp:192.168.1.23:5060 +
- +
-/* uncomment and configure the following line if you want Kamailio to  +
-   bind on a specific interface/port/proto (default bind on all available) */ +
-#listen=udp:192.168.1.2:5060 +
- +
- +
-####### Modules Section ######## +
- +
-#set module path +
-loadpath "./" +
- +
-/* uncomment next line for MySQL DB support */ +
-loadmodule "modules/db_mysql/db_mysql.so" +
-loadmodule "modules_k/mi_fifo/mi_fifo.so" +
-loadmodule "modules_k/mi_datagram/mi_datagram.so" +
-loadmodule "modules_k/kex/kex.so" +
-loadmodule "modules_k/sl/sl.so" +
-loadmodule "modules/tm/tm.so" +
-loadmodule "modules_k/tmx/tmx.so" +
-loadmodule "modules_k/rr/rr.so" +
-loadmodule "modules_k/pv/pv.so" +
-loadmodule "modules_k/maxfwd/maxfwd.so" +
-loadmodule "modules_k/usrloc/usrloc.so" +
-loadmodule "modules_k/registrar/registrar.so" +
-loadmodule "modules_k/textops/textops.so" +
-loadmodule "modules_k/uri_db/uri_db.so" +
-loadmodule "modules_k/siputils/siputils.so" +
-loadmodule "modules_k/xlog/xlog.so" +
-loadmodule "modules_k/acc/acc.so" +
-/* uncomment next lines for MySQL based authentication support  +
-   NOTE: a DB (like db_mysql) module must be also loaded */ +
-loadmodule "modules_k/auth/auth.so" +
-loadmodule "modules_k/auth_db/auth_db.so" +
-/* uncomment next line for aliases support +
-   NOTE: a DB (like db_mysql) module must be also loaded */ +
-#loadmodule "modules_k/alias_db/alias_db.so" +
-/* uncomment next line for multi-domain support +
-   NOTE: a DB (like db_mysql) module must be also loaded +
-   NOTE: be sure and enable multi-domain support in all used modules +
-         (see "multi-module params" section ) */ +
-#loadmodule "modules_k/domain/domain.so" +
-/* uncomment the next two lines for presence server support +
-   NOTE: a DB (like db_mysql) module must be also loaded */ +
-loadmodule "modules_k/presence/presence.so" +
-loadmodule "modules_k/presence_xml/presence_xml.so" +
- +
-loadmodule "modules_k/nathelper/nathelper.so" +
- +
-# ----------------- setting module-specific parameters --------------- +
- +
- +
-# ----- mi_fifo params ----- +
-modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo"+
- +
- +
-# ----- mi_datagram params ----- +
-modparam("mi_datagram", "socket_name", "udp:127.0.0.1:7744"+
- +
- +
-# ----- rr params ----- +
-# add value to ;lr param to cope with most of the UAs +
-modparam("rr", "enable_full_lr", 1) +
-# do not append from tag to the RR (no need for this script) +
-modparam("rr", "append_fromtag", 0) +
- +
- +
-# ----- rr params ----- +
-modparam("registrar", "method_filtering", 1) +
-/* uncomment the next line to disable parallel forking via location */ +
-# modparam("registrar", "append_branches", 0) +
-/* uncomment the next line not to allow more than 10 contacts per AOR */ +
-#modparam("registrar", "max_contacts", 10) +
- +
- +
-# ----- uri_db params ----- +
-/* by default we disable the DB support in the module as we do not need it +
-   in this configuration */ +
-modparam("uri_db", "use_uri_table", 0) +
-modparam("uri_db", "db_url", ""+
- +
- +
-# ----- acc params ----- +
-/* what sepcial events should be accounted ? */ +
-modparam("acc", "early_media", 1) +
-modparam("acc", "report_ack", 1) +
-modparam("acc", "report_cancels", 1) +
-/* by default ww do not adjust the direct of the sequential requests. +
-   if you enable this parameter, be sure the enable "append_fromtag" +
-   in "rr" module */ +
-modparam("acc", "detect_direction", 0) +
-/* account triggers (flags) */ +
-modparam("acc", "failed_transaction_flag", 3) +
-modparam("acc", "log_flag", 1) +
-modparam("acc", "log_missed_flag", 2) +
-modparam("acc", "log_extra",  +
- "src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd"+
-/* uncomment the following lines to enable DB accounting also */ +
-modparam("acc", "db_flag", 1) +
-modparam("acc", "db_missed_flag", 2) +
-modparam("acc", "db_url", +
- "mysql://openser:openserrw@localhost/openser"+
-modparam("acc", "db_extra", +
- "src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd"+
- +
- +
-# ----- usrloc params ----- +
-/* uncomment the following lines if you want to enable DB persistency +
-   for location entries */ +
-modparam("usrloc", "db_mode",   2) +
-modparam("usrloc", "db_url", +
- "mysql://openser:openserrw@localhost/openser"+
- +
-# ----- auth_db params ----- +
-/* uncomment the following lines if you want to enable the DB based +
-   authentication */ +
-modparam("auth_db", "calculate_ha1", yes) +
-modparam("auth_db", "password_column", "password"+
-modparam("auth_db", "db_url", +
- "mysql://openser:openserrw@localhost/openser"+
-modparam("auth_db", "load_credentials", ""+
- +
- +
-# ----- alias_db params ----- +
-/* uncomment the following lines if you want to enable the DB based +
-   aliases */ +
-#modparam("alias_db", "db_url", +
-# "mysql://openser:openserrw@localhost/openser"+
- +
- +
-# ----- domain params ----- +
-/* uncomment the following lines to enable multi-domain detection +
-   support */ +
-#modparam("domain", "db_url", +
-# "mysql://openser:openserrw@localhost/openser"+
-#modparam("domain", "db_mode", 1)   # Use caching +
- +
- +
-# ----- multi-module params ----- +
-/* uncomment the following line if you want to enable multi-domain support +
-   in the modules (dafault off) */ +
-#modparam("alias_db|auth_db|usrloc|uri_db", "use_domain", 1) +
- +
- +
-# ----- presence params ----- +
-/* uncomment the following lines if you want to enable presence */ +
-modparam("presence|presence_xml", "db_url", +
- "mysql://openser:openserrw@localhost/openser"+
-modparam("presence_xml", "force_active", 1) +
-modparam("presence", "server_address", "sip:192.168.1.23:5060"+
-modparam("presence_xml", "disable_bla", 1) +
- +
-# -- nathelper +
-modparam("nathelper", "rtpproxy_sock", "udp:127.0.0.1:7722"+
-modparam("nathelper", "natping_interval", 30) +
-modparam("nathelper", "ping_nated_only", 1) +
-modparam("nathelper", "sipping_bflag", 7) +
-modparam("nathelper", "sipping_from", "sip:pinger@kamailio.org"+
-modparam("registrar|nathelper", "received_avp", "$avp(i:80)"+
-modparam("usrloc", "nat_bflag", 6) +
- +
-#extra testing +
-modparam("pv", "avp_aliases", "test=i:11;st=s:asd"+
- +
-####### Routing Logic ######## +
- +
- +
-# main request routing logic +
- +
-route{ +
- +
- if (!mf_process_maxfwd_header("10")) { +
- sl_send_reply("483","Too Many Hops"); +
- exit; +
-+
- +
- $avp(test) = 1; +
- +
- # NAT detection +
- route(4); +
- +
- 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 +
-+
- route(1); +
- } else { +
- if (is_method("SUBSCRIBE") && uri == myself) { +
- # in-dialog subscribe requests +
- route(2); +
- exit; +
-+
- 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.\n"); +
- 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(); +
- +
- # authentication +
- route(3); +
- +
- # record routing for dialog forming requests (in case they are routed) +
- if (is_method("INVITE|SUBSCRIBE")) +
- record_route(); +
- +
- # account only INVITEs +
- if (is_method("INVITE")) { +
- setflag(1); # do accounting +
-+
- if (!uri==myself) +
- /* replace with following line if multi-domain support is used */ +
- ##if (!is_uri_host_local()) +
-+
- append_hf("P-hint: outbound\r\n");  +
- # if you have some interdomain connections via TLS +
- ##if($rd=="tls_domain1.net") { +
- ## t_relay("tls:domain1.net"); +
- ## exit; +
- ##} else if($rd=="tls_domain2.net") { +
- ## t_relay("tls:domain2.net"); +
- ## exit; +
- ##} +
- route(1); +
-+
- +
- # requests for my domain +
- +
- if( is_method("PUBLISH|SUBSCRIBE")) { +
- route(2); +
-+
- +
- if (is_method("REGISTER")) +
-+
- if (!save("location")) +
- sl_reply_error(); +
- +
- exit; +
-+
- +
- if ($rU=="") { +
- # request with no Username in RURI +
- sl_send_reply("484","Address Incomplete"); +
- exit; +
-+
- +
- # apply DB based aliases (uncomment to enable) +
- ##alias_db_lookup("dbaliases"); +
- +
- if (!lookup("location")) { +
- switch ($rc) { +
- case -1: +
- case -3: +
- t_newtran(); +
- t_reply("404", "Not Found"); +
- exit; +
- case -2: +
- sl_send_reply("405", "Method Not Allowed"); +
- exit; +
-+
-+
- +
- # when routing via usrloc, log the missed calls also +
- setflag(2); +
- +
- route(1); +
-+
- +
- +
-route[1] { +
- if (check_route_param("nat=yes")) { +
- setbflag("6"); +
-+
- if (isflagset(5) || isbflagset("6")) { +
- route(5); +
-+
- +
- /* example how to enable some additional event routes */ +
- if (is_method("INVITE")) { +
- #t_on_branch("1"); +
- t_on_reply("1"); +
- t_on_failure("1"); +
-+
- +
- if (!t_relay()) { +
- sl_reply_error(); +
-+
- exit; +
-+
- +
- +
-# Presence route +
-/* uncomment the whole following route for enabling presence server */ +
-route[2] +
-+
- if (!t_newtran()) +
-+
- sl_reply_error(); +
- exit; +
- }; +
- +
- if(is_method("PUBLISH")) +
-+
- handle_publish(); +
- t_release(); +
-+
- else +
- if( is_method("SUBSCRIBE")) +
-+
- handle_subscribe(); +
- t_release(); +
-+
- exit; +
-  +
- # if presence enabled, this part will not be executed +
- if (is_method("PUBLISH") || $rU!=""+
-+
- sl_send_reply("404", "Not here"); +
- exit; +
-+
- return; +
-+
- +
-# Authentication route +
-/* uncomment the whole following route for enabling authentication */ +
-route[3] { +
- if (is_method("REGISTER")) +
-+
- # authenticate the REGISTER requests (uncomment to enable auth) +
- if (! (www_authorize("", "subscriber"))) +
-+
- www_challenge("", "0"); +
- exit; +
-+
- +
- if ($au!=$tU)  +
-+
- sl_send_reply("403","Forbidden auth ID"); +
- exit; +
-+
- } else { +
- # authenticate if from local subscriber (uncomment to enable auth) +
- if (from_uri==myself) +
-+
- if (!proxy_authorize("", "subscriber")) { +
- proxy_challenge("", "0"); +
- exit; +
-+
- if (is_method("PUBLISH")) +
-+
- if ($au!=$tU) { +
- sl_send_reply("403","Forbidden auth ID"); +
- exit; +
-+
- } else { +
- if ($au!=$fU) { +
- sl_send_reply("403","Forbidden auth ID"); +
- exit; +
-+
-+
- +
- consume_credentials(); +
- # caller authenticated +
-+
-+
- return; +
-+
- +
-# Caller NAT detection route +
-/* uncomment the whole following route for enabling Caller NAT Detection */ +
-route[4]{ +
- force_rport(); +
- if (nat_uac_test("19")) { +
- if (method=="REGISTER") { +
- fix_nated_register(); +
- } else { +
- fix_nated_contact(); +
-+
- setflag(5); +
-+
- return; +
-+
- +
-# RTPProxy control +
-/* uncomment the whole following route for enabling RTPProxy Control */ +
-route[5] { +
- if (is_method("BYE")) { +
- unforce_rtp_proxy(); +
- } else if (is_method("INVITE")){ +
- force_rtp_proxy(); +
-+
- if (!has_totag()) add_rr_param(";nat=yes"); +
- return; +
-+
- +
-branch_route[1] { +
- xdbg("new branch at $ru\n"); +
-+
- +
- +
-onreply_route[1] { +
- xdbg("incoming reply\n"); +
- +
- if ((isflagset(5) || isbflagset("6")) && status=~"(183)|(2[0-9][0-9])") { +
- force_rtp_proxy(); +
-+
- if (isbflagset("6")) { +
- fix_nated_contact(); +
-+
-+
- +
- +
-failure_route[1] { +
- if (is_method("INVITE"+
- && (isbflagset("6") || isflagset(5))) { +
- unforce_rtp_proxy(); +
-+
- +
- if (t_is_canceled()) { +
- exit; +
-+
- +
- # uncomment the following lines if you want to block client  +
- # redirect based on 3xx replies. +
- ##if (t_check_status("3[0-9][0-9]")) { +
- ## t_reply("404","Not found"); +
- ## exit; +
- ##} +
- +
- # uncomment the following lines if you want to redirect the failed  +
- # calls to a different new destination +
- ##if (t_check_status("486|408")) { +
- ## sethostport("192.168.2.100:5060"); +
- ## append_branch(); +
- ## # do not set the missed call flag again +
- ## t_relay(); +
- ##} +
-+
- +
-</code>+
  
  

Navigation

Wiki

Other

QR Code
QR Code migration:kamailio-3.0-config (generated for current page)