你好,游客 登录 注册 搜索
阅读内容

开源SIP服务器 Kamailio

运行环境:
授权方式:BSD
软件大小:M
下载量:
更新日期:2014-10-17
来源地址:
联系作者:Linux

Kamailio是一个开源的SIP服务器,原名OpenSER。

Kamailio项目诞生于2005年7月,它是从德国FhG FOKUS研究所主导的SIP Express Router(SER)项目组分裂出来的。新项目建立的目标是创建一个开放的开发环境,以建立一个强大的可扩展的开源SIP服务器。最初,新项目命名为OpenSer,后来因为商标侵权问题,在2008年7月28号,重命名为Kamailio(另外一个分枝是OpenSips)。

Kamailio的官方主页是http://www.kamailio.org 。1.5.x前的版本,其源码托管在sourceforge.net的SVN库上。从3.0.0版开始,源码托管在sip-router.org的GIT库上。

2008年11月,Kamailio和SER的开发团队再度携手合作,整合两个SIP服务应用项目。整合结束后发布的V3.0.0版,在同一源码树包含了这两个应用。换句话说,从源码角度,Kamailio和SER已经合并为一个应用。不同的地方仅是编译时选择的名字和缺省配置的加载模块而已。

不同于PBX,KAMAILIO是个纯粹的SIP服务器,它可以作为PROXY、注册服务器、重定向服务器,也可作为简单的PRESENCE服务器,其本身并不处理RTP,可能通过RTPPROXY来处理RTP的NAT问题。

Ubuntu 12.04 下编译Kamailio 4.1.0 http://www.linuxidc.com/Linux/2014-01/95845.htm

Kamailio 安装指南 http://www.linuxidc.com/Linux/2014-01/95846.htm

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.

On Nov 04, 2008, Kamailio and SIP Express Router have started the SIP Router Project.

Web links
•Home page with new project name: http://www.kamailio.org
•Home page with old project name: http://www.openser-project.org
•SourceForge.net Project page: http://sourceforge.net/projects/openser/

Features
•SIP proxy/registrar/redirect server (RFC3261, RFC3263)
•UDP/TCP/TLS/SCTP support
•Transactional stateful proxy
•Modular architecture
•Programmable configuration file
•ENUM support
•Call Processing Language (CPL)
•Gateway to sms or xmpp
•Authentication, authorization and accounting via Radius or database
•NAT traversal system
•Least cost routing
•Load balancing
•Carrier routing
•Multiple database backends: MySQL, Postgres, Oracle, BDB or flat files
•SIMPLE Presence Server (IETF SIMPLE extensions - rich presence)
•Dialog Info Presence - SLA/BLA
•XCAP and RLS
•Presence User Agent
•Dialog Stateful Proxy
•Instant Messaging •Offline message storage
•Instant messaging conferencing

•SNMP support
•Perl Programming Interface
•Java SIP Servlet Application server
•Over 80 modules (extensions)

Documentation
•Main Documentation Page - http://www.kamailio.org/docs/
•Dokuwiki Page - http://www.kamailio.org/dokuwiki/

我们使用Kamailio主要用在SIP dispatcher server,即SIP redirect server
安装及配置手册如下

一.安装
1.依赖包:
libmysqlclient & libz (zlib) :mysql DB support (the db_mysql module) Shared libraries

                        MySQL-shared-5.1.32-0.glibc23.i386.rpm

                        MySQL-devel-community-5.1.32-0.rhel5.i386.rpm


libxml2:cpl-c (Call Processing Language) or the presence modules (presence and pua*)
libperl:perl scripting from you config file (perl module)
2.源代码安装
make,make modules,make install
或者make all,make install
参考:
3.启动:kamctl start
4.重启:kamctl restart
5.监控服务状态:kamctl moni
6.MySQL配置:
1)安装:
edit Makefile.var files to include the MySQL module
vim Makefile.vars
Uncomment the next line in the file:
MODS_MYSQL=on
cp /usr/local/lib/mysql/libmysqlclient.so.16 /usr/lib

Edit now /usr/local/etc/kamailio/kamctlrc and add:
DBENGINE=MYSQL
SIP_DOMAIN=pryko.com
6.1 创建数据库:kamdbctl create
6.2管理员登录:user 'admin' with password ' openserrw '
6.3 添加用户:kamctl add <name> <password> <email>
6.4 默认值:database url, users and passwords
  - DEFAULT_DB_URL="mysql://opensips:opensipsrw@localhost/opensips"
  - r/w user: openser; passwd: openserrw
  - r/o user: openserro; passwd: openserro

二.配置
1.配置文件 kamailio.cfg
/usr/local/etc/kamailio/kamailio.cfg
2.配置文件 kamctlrc
/usr/local/etc/kamailio/kamctlrc

三.脚本
参考文档:
Kamailio Wiki
http://www.kamailio.com/dokuwiki
Cookbooks and Reference
http://www.kamailio.com/dokuwiki/doku.php/core-cookbook:1.5.x
Kamalio 1.5.x Module Functions Index
http://www.kamailio.com/dokuwiki/doku.php/modules:1.5.x:index-functions


四.负载均衡Load Balancing
参考:http://www.kamailio.org/dokuwiki/doku.php/asterisk:load-balancing-and-ha
4.1配置文件 kamailio.cfg
loadmodule("dispatcher.so")
modparam("dispatcher", "list_file", "/usr/local/etc/kamailio/dispatcher.list")
modparam("dispatcher", "force_dst", 1)
4.2 ---dispatcher.list----文件
# group sip addresses of your * units
1 sip:221.5.152.171:5060
1 sip:221.5.152.170:5060
4.3 kamctl命令:kamctl dispatcher show
-- command 'dispatcher' - manage dispatcher
  * Examples:  dispatcher addgw 1 sip:1.2.3.1:5050 1 'outbound gateway'
  *            dispatcher addgw 2 sip:1.2.3.4:5050 3 ''
  *            dispatcher rmgw 4
dispatcher show ..................... show dispatcher gateways
dispatcher reload ................... reload dispatcher gateways
dispatcher dump ..................... show in memory dispatcher gateways
dispatcher addgw <setid> <destination> <flags> <description>
            .......................... add gateway
dispatcher rmgw <id> ................ delete gateway

查看载入的配置:kamctl dispatcher dump
修改后重新载入配置:kamctl dispatcher reload

 

如需使用,需安装MySQL-client-community-5.1.32-0.rhel5.i386.rpm
否则报错:ERROR: This command requires a database engine - none was loaded

 

五.与Asterisk对接负载均衡
注意事项:sip.conf
注释如下行
;canreinvite=no ; Asterisk by default tries to redirect

Asterisk#1  10.10.10.56
配置sip.conf
[5000]
type=friend
;username=5000
secret=5000_phone2
callerid=5000
qualify=yes ; Qualify peer is no more than 2000 ms away
nat=no ; This phone is natted
host=dynamic ; This device registers with us
;canreinvite=no ; Asterisk by default tries to redirect
配置extension.conf
[default]
exten => 6000,1,Dial(SIP/6000@10.10.10.57,60)
exten => 5000,1,Dial(SIP/5000,60)

Asterisk#2  10.10.10.57
配置sip.conf
[6000]
type=friend
;username=6000
secret=6000_phone2
callerid=6000
qualify=yes ; Qualify peer is no more than 2000 ms away
nat=no ; This phone is natted
host=dynamic ; This device registers with us
;canreinvite=no ; Asterisk by default tries to redirect
配置extension.conf
[default]
exten => 6000,1,Dial(SIP/6000,60)
exten => 5000,1,Dial(SIP/5000@10.10.10.136,60)

Kamailio 10.10.10.136
配置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","To Many Hops");
  drop();
};
ds_select_dst("1", "0");
forward();
}
配置dispatcher.list
# line format
# setit(integer) destination(sip uri) flags (integer, optional)
1 sip:10.10.10.56:5060

测试:
登录10.10.10.57上的6000,登录10.10.10.56上的5000
从6000呼叫5000,会呼叫10.10.10.136上的5000,10.136重定向到10.56

六.按号码段重定向网关
配置kamailio.cfg
使用正则表达式
route{
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483","Too Many Hops");
                exit;
        }
if (uri=~"^sip:5[0-9]+@10.10.10.136$") {
  if (is_method("INVITE")) {
  ds_select_dst("1", "0");
  forward();
  exit;
  }
}
if (uri=~"^sip:8[0-9]+@10.10.10.136$") {
  if (is_method("INVITE")) {
  ds_select_dst("2", "0");
  forward();
  exit;
  }
}
sl_send_reply("404","Not here");
exit;
}
配置dispatcher.list
# line format
# setit(integer) destination(sip uri) flags (integer, optional)
1 sip:10.10.10.56:5060 #1
2 sip:10.10.10.54:5060

测试:
登录10.10.10.57上的6000,登录10.10.10.56上的5000
从6000呼叫5000,会呼叫10.10.10.136上的5000,10.136重定向到10.56
从6000呼叫8002,会呼叫10.10.10.136上的8002,10.136重定向到10.54

 

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款