OpenIMSCore的搭建过程

时间:2024-05-20 08:12:42

        openIMSCore是一个IMS架构的开源实现,由德国一个教授进行主管,在Ubuntu下搭建很方便。IMS架构作为多媒体业务核心网的一种发展方向,在越来越多的通信系统中,起到了重要作用。

        最近考虑在做的服务器中,原本协议提到了一种实体:SIP-CORE,由P-CSCF、I-CSCF、S-CSCF和HSS四个大组件组成,在整个通信协议栈中处于中间的位置,从底层来看像接入网,从顶层来看像核心网的一部分。由于SIP-CORE的组成和IMS架构有很大程度上的相似(实际原协议规定这类通信系统核心网以IMS架构为基础),考虑引入openIMSCore当做IMS基础架构,再上层AS(应用服务器)的开发由我们自己完成。这就涉及到了一个问题,需要验证openIMSCore用在这类通信系统上的可行性。

        首先,需要搭建openIMSCore整体环境。我个人在公网服务器中和内网服务器中均搭了一个openIMSCore环境,在公网上可能会碰到一些问题,待会再说。搭环境的事详见openIMSCore的官方网站:http://www.openimscore.org/。这个网站中将搭环境的事说得很清楚,照做就行了,无非就是一些配JAVA环境,装一些库,装DNS服务器(资料都是安装的bind9),然后再改一些配置文件就OK了,然后在按照网站中说的,通过脚本运行p-cscf,i-cscf,s-cscf,hss。(此时有一个注意问题,装JAVA环境是不要安装最新的JAVA1.8,HSS会报错500 internal error,装1.7版本即可,启动也不需要这么麻烦,自己写个自启动脚本就行了,很方便)。

        然后,现在就可以用一些SIP终端注册到网络中了,一般SIP终端有很多种,我随便选用了一种,X-Lite,个人觉得用起来没啥问题。原来默认配置好了的用户有两个,alice和bob。此时可能出现无法登陆的情况,修改s-cscf的配置文件,修改为MD5加密方式,重启s-cscf即可。但是如果是在公网中搭建的openIMSCore服务器的话,这里会返回一个错误码(具体多少忘了,好像是403),查看日志就可以知道openIMSCore的核心代码检查SIP-REGISTER中的via字段,但是问题很明显,公网上的服务器看到终端的ip和端口经过nat显然已经变化了,此时的via字段没有任何意义。我就修改了openIMSCore的源代码,屏蔽了源代码中检查via字段部分,但是这又带来了一个问题,待会再说。

        然后,两个终端之间就可以打电话了,通过一个X-Lite登录alice,一个X-Lite登录bob,打电话即可,这时抓包看一下具体过程。

        然后,自然就要考虑怎样加AS(应用服务器)了。我在自己的环境中,为了实验,没有用自己写的AS,而是采用了开源的openser和asterisk。以asterisk为例,在配置文件中配两个用户(当然也可以通过写数据库的方式来配置asterisk的用户,这都是asterisk的配置的事了),指定所有下行信令发送到固定ip的固定端口,一个简易的我所需要的asterisk就配置好了。然后配置openIMSCore,主要就是通过fhoss的网管(管理员默认用户名hssAdmin(或者不用大写),密码hss)进行配置即可:

(1)首先,配置application server(应用服务器)一栏,填入自己AS的ip和端口,再配置一个权限即可。openIMSCore有自己默认的一个as,可以用,当然也可以自己配。

OpenIMSCore的搭建过程

(2)然后就要配置trigger points(出发点)一栏,触发点一栏主要是配置一些条件,当收到的信令满足这些条件时,S-CSCF会将这些信令发送给指定的AS。这些条件有信令类型、头部内容、会话类型、request-uri等,基本上包括了所有SIP消息的要素。这里用的也是默认的,可以自己配。

OpenIMSCore的搭建过程

(3)接下来最重要就是要配置IFC了,主要作用就是将触发点和应用服务器相连接起来,这里用的也是默认的,可以自己配。

OpenIMSCore的搭建过程

        至此,AS的添加的配置就算完成了。当然,如果是公网上的openIMSCore,如果屏蔽了对via字段的检查,那么配置的AS将毫无作用,s-cscf不会将指定信令发送给AS,暂时没有找到原因。如果在内网中配置将不会出现这个问题。

        最后,自然就是测试了,抓包可以发现,从P-CSCF收到SIP-INVITE,发送给S-CSCF,再送到AS,再到S-CSCF,再到P-CSCF,wireshark显示共计耗时0.04s,这还不算终端处理时延和网络时延,感觉时延稍微大了一点,不过可以接受,之后如果服务器需要做得和目标通信系统完全一致的话,估计还是得采用这个开源架构。

        这个开源项目openIMSCore个人感觉还是挺好玩的,但是稍微有点专业化,如果真的要玩起来,专门玩asterisk应该会更过瘾。