SER基本使用

SER基本使用

 

说明,当前2.0.x已经发布,但以下内容还是基于SER 0.9.x

一、 SER的结构

SER由一个core和大量module组成,core接收sip消息并进行基本处理,module输出函数供core调用,modules实现了SER的绝大部分功能;配置文件ser.cfg定义了coremodules的调用,也包括了modules的参数配置。ser.cfgSER业务功能定义的核心。

module的详细文档参考modules目录中各module对应目录下的README文件,该文档说明了该module的可配置参数、输出函数、对其他module的依赖等信息。

二、 SER基本安装配置

Ser提供了二进制方式的安装包,我只用过从源码编译安装,环境Red Hat Linux AS4。按以下步骤安装后可以进行无认证的SIP注册,可以作为基本的proxy server使用。

make

make install

这将安装到/usr/local下,配置文件是/usr/local/etc/ser/ser.cfg,使用man ser查看目录信息;

如果需要安装到指定目录,命令为

make prefix=/your_path all

make prefix=/ your_path install

安装完后使用serctl start命令启动服务器就可以了。

三、 增加Mysql支持

建库

脚本/usr/sbin/ser_mysql.shSER mysql操作工具,提供了数个命令参数用于数据库处理,其中参数create用于新建数据库和tables,并会增加一个uriroot@localhost的用户,其realm是脚本执行时要求用户输入的参数。

建立的数据库,SER会使用用户ser登录,相应登录密码为heslo

相关配置参考下文ser.cfg的说明;

上文可参考SERINSTALL文档;

编译

以下步骤与INSTALL文档的说明不同;

进入modules/acc,提供提示信息更改Makefile,即增加“DEFS+=-DSQL_ACC”即可;然后进入主目录,只需make/make install等;

需要手动编译mysql.so库:进入modules/mysql目录,执行make,将生成的mysql.so copyser安装目录的modules目录,默认为/usr/local/lib/ser/modules

附录,Mysql的简单使用:

1,  root设置为mysql的用户,并设置密码:# mysqladmin -u root password yourpwd

2,  登录mysql

>> mysql –p

输入password,之后就可以使用show databases/use database_name/show tables等命令了,也可以直接执行sql语句。

四、 增加认证——数据库方式

本部分在增加了数据库支持基础上,实现基本的对REGISTER的认证功能。只需要根据注释更改ser.cfg文件,去掉某些注释符号即可。

使用serctl添加用户数据,此时必须首先设置环境变量SIP_DOMAIN来设置realm,该值会填入数据库realm列。不清楚该realm作何用途,因为SIP消息中的realm参数是在ser.cfg中确定的。添加需输入数据库登录密码——默认值为heslo

五、 ser.cfg的结构

主要分成7大块:

1,  Global Definitions Section:用于配置SER daemon本身

2,  Modules Section:配置要加载的modules,使用loadmodule命令

3,  Module Configuration Section:使用modparam命令,modparam(module_name, module_parameter, parameter_value)

4,  Main Route Block:像一个cmain函数,是SIP消息处理的入口点,控制每个SIP消息的处理过程;

5,  Additional Route Blocks:由main route block或其他Additional Route Blocks调用;

6,  Reply Route Block.:处理sip消息(主要是200OK)返回;on_reply_route[x]

7,  Failure Route Block.:处理busytimeout这样一些错误状态;failure_route[x]

详细配置

Forkyes作为后台程序运行;

listen=192.0.2.13 # INSERT YOUR IP ADDRESS HERE,配置IP,默认将在机器所有IP上监听,SER启动时会打印它监听的IP

children=4 #生成子进程的数量

 

dns=no #防止SERDNS中查询自己的IP???

rev_dns=no

fifo="/tmp/ser_fifo" #配置一个SER FIFO,用于测试SER的状态、外部程序直接插入消息到SER中,serctl工具就利用了该FIFO实现功能;

loadmodule "/usr/local/lib/ser/modules/sl.so" #

modparam("usrloc", "db_mode", 0)   #是否将注册数据持久化

#开始xxx

route {

}

 

部分语法:

route(1); #调用route(1)

break; #相当于exit,退出整个处理block

使用ser –C检查配置文件是否正确;

 

1、 增加数据库和认证支持——使用mysql

编译时需要加上mysql支持,并使用一个sh脚本建好数据库表;简单使用将simple.ser.cfg中的几个配置项的#去掉即可。

详细配置:

需要加载mysql.so/auth.so/auth_db.so几个module;注意加载的顺序;uri_db.so提供check_to(),用于将用户的注册数据保存到数据库中?

 

modparam("auth_db|uri_db|usrloc", "db_url", "mysql://ser:heslo@localhost/ser")    #user:pwd@host/database

# subscriber表是否使用加密密码,0加密,subscriber是注册信息表。uri是什么表?

modparam("auth_db", "calculate_ha1", 1)

modparam("auth_db", "password_column", "password")

#2 to store contact information and authentication data

modparam("usrloc", "db_mode", 2)

其他:

#检查用户名与密码,对非REGISTER消息总是返回失败?参数:使用哪个数据库表检查哪个域,

www_authorize("realm","subscriber")

#发送401要求对方发送注册信息,可设置返回的401消息的realm

www_challenge("realm","0")

check_to()

sl_send_reply("401", "Unauthorized")

consume_credentials()

save("location")

proxy_authorize("","subscriber")

proxy_challenge("","0")

check_from()

sl_send_reply("403", "Use From=ID")

route(1)

 

使用工具serctl增加用户,需要使用Mysql登录密码:

serctl add 1000 password1 [email protected] [mailto:[email protected]]

 

Nat

SER提供两种方式处理NATRTP Proxyrtpproxymediaproxy

NAT后的UA与公网中的SER

1,   SERREGISTER的处理:

2,  INVITE的处理:

 

六、 Ser提供的工具与命令

1、 Ser

ser命令附带了一些参数,某些可以作为工具使用;

直接执行ser命令会启动ser服务器,但ser没有提高相应的停止方法,故应使用serctl start命令启动服务。

命令man 8 ser可以查看ser的简单帮助信息,如可以看到安装路径、modules的安装路径等。

2、 Serctl

serctl安装路径为/usr/sbin//usr/local/sbin/

命令使用说明参考serctl的帮助输出——输入serctl命令即可。

serctl start启动服务,这种方式启动后可以使用serctl stop停止,否则没有好的办法停止serserctl moni监控SER执行状态;

增加用户:serctl add <name> <password> <email>

输出环境变量:export SIP_DOMAIN="myserver.foobar.com"

3、 ser_mysql.sh

请参考联机帮助。

七、 SERNAT穿越的支持

SER提供了rtpproxymediaproxy两种方式,下面的叙述中SER位于公网上,SipPhoneNAT之后;

1、 注册消息

SIP消息中附带的SipPhoneIP:Port是它的私网参数,而通过Socket函数能够获得其NAT地址和在NAT上的端口,SER将记录这些数据;

SER提供函数fix_nated_contact,可以重写Contact头域;函数fix_nated_register则不改写Contack头域而记录正确的地址参数;

函数setflag()用于记录sipphone位于NAT后;

内网IP:PortNAT设备上某个Port的对应关系只会保存有限的时间,过期后NAT会将port关系、对应关系删除。该问题的解决办法是Sipphone频繁向SER发消息,或反过来SER向它发消息。

2、 INVITE消息

这主要关系到媒体流的处理,SDPIP:PortSER的处理方式包括:

1、      SDP中增加一个属性行:direction:active,这用于让被叫UA等待直到它收到了媒体流,然后将它的媒体流发回给这个地址(即对称RTPsymmetric RTP);该方式需要至少有一个UA拥有公网地址的情况,如PSTN网关;

2、      更改“c=”行的IP地址为公网地址,这可以与方式1同时使用;

3、      RTP流通过一个Proxy,使用一个拥有公网地址、双方UA都能将媒体流发给它的Proxy

八、 参考资料:

SER附带文档

Ser的联机帮助

http://www.iptel.org/

SER-GettingStarted.pdf

 

你可能感兴趣的:(数据库,mysql,Module,Authentication,文档,credentials)