1,下载
openSIPS主页
http://www.opensips.org/
下载方式
1,svn : svn cohttps://svn.code.sf.net/p/opensips/svn/ opensips
2,git : git clonehttps://github.com/OpenSIPS/opensips.git -b 1.8 opensips_1_8
2,编译与安装
编译环境搭建
可能需要安装的一些lib包括如下:
apt-getinstall gcc bison flex make openssl libmysqlclient-dev libradiusclient-ng2libradiusclient-ng-dev mysql-server libxmlrpc-c3-dev
以1.8LTS版本为例
推荐使用menuconfig来统一管理编译和安装。
1,apt-getinstall libncurses5-dev
2,makemenuconfig进入配置界面,选择第一个"Configure compile Options"进行openSIPS的配置。并通过第二个"compileAnd Install OpenSIPS"进行安装。
3,配置完之后 makeinstall 进行安装,默认安装到/usr/local目录
3,安装完成之后包括以下几个路径
1,配置文件路径 /etc/opensips
2,依赖.so 路径/lib/opensips/modules
3,Binaries路径 /sbin
4,运行opensips
执行opensips -h查看opensips帮助。
执行opensips -c可以检测当前配置文件是否存在错误。
配置文件为usr/local/etc/opensips.cfg,检测包括配置文件是否存在,是否存在语法错误等。
启动opensips服务 使用命令 sudo opensipsctlstart ,若启动中出现错误,可查看/var/log/syslog中的log信息进行定位,一般情况下都是与配置文件相关的错误。
停止opensips服务,使用命令 sudoopensipsctl stop。详细命令可-help查看。
5,opensips.cfg配置文件
若安装到/usr/local中,则配置文件位于/usr/local/etc/opensips 中。
opensips.cfg包括三个部分:
1,#####globalparameters #################
这部分主要是配置debug,监听ip及端口,tcp/udp等信息,
其中listen 初始化为listen=udp:127.0.0.1:5060需要修改为本机的ip,以172.22.197.159为例,修改如下:
listen=udp:172.22.197.159:5060
修改这个之后,可以尝试最简单的使用,通过设置两个客户端如(mirocSIP或者skySip)的server地址,可以提供无认证功能的简单呼叫服务。
2,######ModulesSection###########
该部分是选择并载入各种模块,根据功能不同,配置不同的模块进去,
使用loadmodule"xxx.so" 载入模块。
使用modparam("xxx","param",value)将载入的xxx模块中的param设置为value。
3,#####RoutingLogic#########
该部分为路由策略,主要描述了处理各种sip信令的业务逻辑。
如处理INVITE的流程,处理BYE的流程等。
6,opensipsctlrc 配置文件。
该配置文件为opensips控制台的一些配置,包括了DBENGINE等的配置信息。
增加MYSQL及登录认证功能方法:
1,需要先搭建MySql环境。
2,修改opensips.cfg文件。
1,载入module :
loadmodule"db_mysql.so"
loadmodule"usrloc.so"
loadmodule"auth.so"
loadmodule"auth_db.so"
2, 配置所载入的module :
modparam("usrloc","nat_bflag","NAT")
modparam("usrloc","db_mode",2)
modparam("usrloc","db_url","mysql://opensips:opensipsrw@localhost/opensips")
modparam("auth_db","calculate_ha1",1)
modparam("auth_db","password_colum","password") modparam("auth_db","db_url","mysql://opensips:opensipsrw@localhost/opensips")
modparam("auth_db","load_credentials","")
3, 修改脚本处理逻辑
增加对register的处理
if(is_method("REGISTER")) // 对 REGISTER请求进行处理的逻辑
{
if(!www_authorize("","subscriber")) // 判断是否能subscriber成功
{
www_challenge("","0"); // 若不成功则执行challenge
exit;
}
if(!db_check_to())
{
sl_send_reply("403","Forbiddenauth ID");
exit;
}
}
抓包发现信令交互如下:
这里抓包使用ngrep 命令
安装 apt-getinstall ngrep
抓包 ngrep -p-q -W byline port 5060 > test.txt (默认使用的5060端口)
第一次REGISTER 信息如下,里面没有附带任何认证信息。
然后服务器给无情的拒绝了,通过www_challenge("","0");返回一个401,但是附带着一个nonce的串“54222xxxxx...”。
客户端不放弃,再注册一次,这次注册时附带着上次被拒绝时的nonce信息,然后根据自身password计算一个response信息。
这样不放弃有了回报,客户端成功的在服务器上进行了Register。
可以通过opensipsctl online 查看的当前系统在线的用户数。
TIPS:
1,网上资料的一些资料不靠谱,主要原因是opensips的开发更新比较快,一般网上的资料太旧。现在这个文档过俩月说不定就会过时了,建议直接去http://www.opensips.org/官网去查看Manuals。
2,如果配置文件出问题,可通过opensips -c 先对配置文件进行语义语法检测,若存在问题,可以去http://www.opensips.org/Documentation/Modules-1-12查看相关版本所出问题的module的manuals,可以快速定位错误。
3,如果opensips-c 检测不到错误,而在opensipsctl start 启动opensips服务时出错,可查看/var/log/opensips.log(需要配置log路径,默认是写到/var/log/syslog文件中,配置方法各个linux系统有些区别,ubuntu下面流程如下:
>>>> opensips.cfg 中设置log_facility=LOG_LOCAL0
>>>>> touch /var/log/opensips.log
>>>>>在/etc/sysylog.conf 中增加$IncludeConfig /etc/sysylog.d/*.conf
>>>>>在etc/syslog.d/50-default.conf 中增加local0.* -/var/log/opensips.log
>>>>> rsyslog restart重启服务)。
4,对于opensipsc fg 文件的配置,方式比较固定:
首先需要loadmodule。
然后设置参数,使用modparam("module_name","param_name","value")设置。
最后修改处理的逻辑。