Kamailio is an Open Source, GPL2, SIP Server Routing Platform. It is written in C for Linux/Unix plaforms and focuses on performance, flexibility and security.
kamailio(OpenSER)源码安装说明:
1. untar src package to /usr/local/src/kamailio
2. vi Makefile.vars to enable mysql and presence modules
## Compile MySQL modules - debian-require: libmysqlclient-dev
MODS_MYSQL=on
## Compile Presence modules - debian-require: libxml2-dev libcurl3-dev
MODS_PRESENCE=on
3. make install
4. cd /usr/local/etc/kamailio
# *** To enamble mysql execute:
sed -i 's/#m#//g' kamailio.cfg
# *** To enamble presence server execute:
sed -i 's/#p#//g' kamailio.cfg
5. vi /usr/local/etc/kamctlrc
SIP_DOMAIN=wangxf.com
DBENGINE=MYSQL
DBHOST=localhost
DBNAME=openser
DB_PATH="/usr/local/etc/kamailio/dbtext"
DBRWUSER=openser
DBRWPW="openserrw"
DBROUSER=openserro
DBROPW=openserro
DBROOTUSER="root"
6. install mysql server
7. cd /usr/local/sbin
//create database tables
kamdbctl create
8. //start kamailio service
kamctl start
9. //monitor kamailio
kamctl moni
注:如果不使用数据库,可以省略2.4.5.6.7步骤
kamailio(OpenSER)转发配置,主要由dispatcher模块负责,大致对应于sipXecs中的dialplan,其中的uri部分是正则表达式
目标:
打给5900的电话转发到第一组的第一台服务器
打给400的电话转发到第二组的第二台服务器
打给500的电话在第二组的服务器间轮训
1. 编写/usr/local/etc/kamailio/dispatcher.list
################################################################################
# line format
# group sip addresses of your * units
1 sip:192.168.90.67:15060
1 sip:192.168.90.68:15060
2 sip:192.168.90.222:5150
2 sip:192.168.90.223:5150
#####注意这里配置了2组sip服务器,每组有2个成员,下面的转发配置中会用到此设置######
2. 修改/usr/local/etc/kamailio/kamailio.cfg
################################################################################
...
loadmodule "dispatcher.so"
modparam("dispatcher", "list_file", "/usr/local/etc/kamailio/dispatcher.list")
#####
route {
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if (method=="INVITE" && uri=~"sip:5900@.*")
{
ds_select_dst("1", "0"); #转发到第一组的第一台
forward();
exit;
}
if (method=="INVITE" && uri=~"sip:400@.*")
{
ds_select_dst("2", "1"); #转发到第二组的第二台
forward();
exit;
}
if (method=="INVITE" && uri=~"sip:500@.*")
{
ds_select_dst("2", "2"); #在第二组轮训
forward();
exit;
}
...
}
###
转自:http://blog.csdn.net/askcyg/article/details/4742741