linux下开源sip server : opensips 的安装+配置 +使用
来源:互联网 发布:数据的最小单位是( ) 编辑:程序博客网 时间:2024/05/23 12:17
linux下开源sip server : opensips 的安装 ,配置 与使用
update 4/12/2012:
新的版本1.8中,会有几根问题:
1 如果你的ubuntu版本是11.10,那么gcc可能是最新的版本,会有curses.h的错误,这个时候去svn下载最新的版本,在branch的版本,作者做了一个修补版本,这个版本修补了这个错误。
2 新的版本中opensipsctlrc中已经不和原来的配置文件一样了,关于db_mysql.so的配置必须要 make menuconfig 中启用,然后再make install
3 如果发现有module db_mysql does not export db_use_table function这个错误,那么确认/usr/local/opensips/modules里面有db_mysql.so,如无的话,要在menuconfig中启用,并且重新install,如果还是有问题,那么检查opensips.cfg,是否load db_mysql.so,如无则添加
4 如果发现 error 1045 ,这个是因为你的opensipsctlrc中的密码没有设置正确,请比对下文中的opensipsrw的密码,然后重启opensipsdbctl
这几天一直尝试在Linux下搭建一个Sip服务器,以便防止到了学校没有设备了,之前也在windows下找到了一个不错的Sip服务器:MiniSipServer(MSS),可见这篇文章,但是可惜的是MSS要求本地的所有PHONE都必须发送Authentication也就是授权消息,我还没做这个,所以只能留在以后使用了。因此就找到了这个在linux平台下的OpenSips,开放了源代码,配置自由的工具
安装:
1 安装Mysql,如果后面编译的时候提示没有mysql.h 可以参照这片文章 ,找不到curses.h,安装sudo apt-get install libncurses5-dev
2 下载 opensips
http://www.opensips.org/Resources/Downloads
3 解压后,进入opensips目录
make all ,如果出错,一般是缺少一些编译工具,直接apt-get install xxx(相应的工具),或者是 关于mysql的,参照1的文章 。
make install ,注意权限,这里我做了很多操作,各种chmod
配置
1 opensips数据库
vi /usr/local/etc/opensips/opensipsctlrc 见最后附表
2 开启数据库
/usr/local/sbin/opensipsdbctl create
如果出现以下错误
“ERROR: could not load the script in /usr/local/lib/opensips/opensipsctl/opensipsdbctl.mysql for database engine MYSQL
ERROR: database engine not loaded - tried 'MYSQL'”
ERROR: database engine not loaded - tried 'MYSQL'”
则,
cd /usr/local/lib/opensips/opensipsctl/
cp $(你的opensips目录)/scrips/opensipsdbctrl.mysql ./
mkdir mysql
cp $(你的opensips目录)/scrips/mysql/*.sql ./
成功后,会有两个选项,全选y
3 察看设置是否正确
/usr/local/sbin/opensipsctl -c
使用
1 开启opensips服务
/usr/local/sbin/opensipsctl start
关闭stop 重启restart
这里我遇到了
i. ERROR: PID file/var/run/opensips.pid does not exist -- OpenSIPS start failed. 的问题
一般很多问题都会导致线程启动失败,在这里,vi /var/log/syslog,察看错误究竟出在哪里。
我的问题是db_url没有定义,所以在opensips.cfg里面,找到了default_db_ctl,去掉注释,果然就可以运行了
当然也有一些是权限问题。
ii.可以手动创建mkdir /var/run/opensips/
2 添加sip用户
opensipsctl add username password 如:opensipsctl add 100 100
使用软电话登陆如3cx ,x-lite等,成功登陆
3 察看注册的sip用户
opensipsctl ul show
4 是否在线
opensipsctl online
当然,更多的命令还可以使用opensipsctl ,就会打印出所有的命令帮助
附表
## database type: MYSQL, PGSQL, ORACLE, DB_BERKELEY, or DBTEXT, by default none is loaded# If you want to setup a database with opensipsdbctl, you must at least specify# this parameter.
SIP_DOMAIN= YOUR_PC_IP //这个是你的sip proxy 地址 DBENGINE=MYSQL## database host DBHOST=localhost## database name (for ORACLE this is TNS name) DBNAME=opensips# database path used by dbtext or db_berkeley DB_PATH="/usr/local/etc/opensips/dbtext"## database read/write user DBRWUSER=opensips## password for database read/write user DBRWPW="opensipsrw"## database read only user DBROUSER=opensipsro## password for database read only user DBROPW=opensipsro## database super user (for ORACLE this is 'scheme-creator' user) DBROOTUSER="root"# user name column USERCOL="username"
5 配置opensips的模块
vi /usr/local/etc/opensips/opensips.cfg
## $Id: opensips.cfg 8591 2011-11-26 08:27:25Z bogdan_iancu $## OpenSIPS basic configuration script# by Anca Vamanu <anca@voice-system.ro>## Please refer to the Core CookBook at:# http://www.opensips.org/Resources/DocsCookbooks# for a explanation of possible statements, functions and parameters.######## Global Parameters #########debug=3log_stderror=nolog_facility=LOG_LOCAL0fork=yeschildren=4/* uncomment the following lines to enable debugging */#debug=6#fork=no#log_stderror=yes/* uncomment the next line to disable TCP (default on) */disable_tcp=yes/* uncomment the next line to enable the auto temporary blacklisting of not available destinations (default disabled) */#disable_dns_blacklist=no/* uncomment the next line to enable IPv6 lookup after IPv4 dns lookup failures (default disabled) */#dns_try_ipv6=yes/* uncomment the next line to disable the auto discovery of local aliases based on revers DNS on IPs (default on) */#auto_aliases=no/* uncomment the following lines to enable TLS support (default off) */#disable_tls = no#listen = tls:your_IP:5061#tls_verify_server = 1#tls_verify_client = 1#tls_require_client_certificate = 0#tls_method = TLSv1#tls_certificate = "/usr/local/etc/opensips/tls/user/user-cert.pem"#tls_private_key = "/usr/local/etc/opensips/tls/user/user-privkey.pem"#tls_ca_list = "/usr/local/etc/opensips/tls/user/user-calist.pem"/* default db_url to be used by modules requiring DB connection; uncomment it if you use any module requiring DB connectivity */db_default_url="mysql://opensips:opensipsrw@localhost/opensips"port=5060/* uncomment and configure the following line if you want opensips to bind on a specific interface/port/proto (default bind on all available) */#listen=udp:192.168.1.2:5060####### Modules Section #########set module pathmpath="/usr/local/lib/opensips/modules/"/* uncomment next line for MySQL DB support */loadmodule "db_mysql.so"loadmodule "signaling.so"loadmodule "sl.so"loadmodule "tm.so"loadmodule "rr.so"loadmodule "maxfwd.so"loadmodule "usrloc.so"loadmodule "registrar.so"loadmodule "textops.so"loadmodule "mi_fifo.so"loadmodule "uri.so"loadmodule "acc.so"/* uncomment next lines for MySQL based authentication support NOTE: a DB (like db_mysql) module must be also loaded */loadmodule "auth.so"loadmodule "auth_db.so"/* uncomment next line for aliases support NOTE: a DB (like db_mysql) module must be also loaded */loadmodule "alias_db.so"/* uncomment next line for multi-domain support NOTE: a DB (like db_mysql) module must be also loaded NOTE: be sure and enable multi-domain support in all used modules (see "multi-module params" section ) */#loadmodule "domain.so"/* uncomment the next two lines for presence server support NOTE: a DB (like db_mysql) module must be also loaded */#loadmodule "presence.so"#loadmodule "presence_xml.so"# ----------------- setting module-specific parameters ---------------# ----- mi_fifo params -----modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")# ----- rr params -----# do not append from tag to the RR (no need for this script)modparam("rr", "append_fromtag", 0)# ----- registrar params -----/* uncomment the next line not to allow more than 10 contacts per AOR */#modparam("registrar", "max_contacts", 10)# ----- usrloc params -----#modparam("usrloc", "db_mode", 0)/* uncomment the following lines if you want to enable DB persistency for location entries */modparam("usrloc", "db_mode", 2)modparam("usrloc", "db_url","mysql://opensips:opensipsrw@localhost/opensips")# ----- uri params -----modparam("uri", "use_uri_table", 0)# ----- acc params -----/* what sepcial events should be accounted ? */modparam("acc", "early_media", 1)modparam("acc", "report_cancels", 1)/* by default ww do not adjust the direct of the sequential requests. if you enable this parameter, be sure the enable "append_fromtag" in "rr" module */modparam("acc", "detect_direction", 0)/* account triggers (flags) */modparam("acc", "failed_transaction_flag", 3)modparam("acc", "log_flag", 1)modparam("acc", "log_missed_flag", 2)/* uncomment the following lines to enable DB accounting also */modparam("acc", "db_flag", 1)modparam("acc", "db_missed_flag", 2)# ----- auth_db params -----/* uncomment the following lines if you want to enable the DB based authentication */modparam("auth_db", "calculate_ha1", yes)modparam("auth_db", "password_column", "password")#modparam("auth_db", "db_url","mysql://opensips:opensipsrw@localhost/opensips")#modparam("auth_db", "load_credentials", "")# ----- alias_db params -----/* uncomment the following lines if you want to enable the DB based aliases */#modparam("alias_db", "db_url",#"mysql://opensips:opensipsrw@localhost/opensips")# ----- domain params -----/* uncomment the following lines to enable multi-domain detection support */#modparam("domain", "db_url",#"mysql://opensips:opensipsrw@localhost/opensips")#modparam("domain", "db_mode", 1) # Use caching# ----- multi-module params -----/* uncomment the following line if you want to enable multi-domain support in the modules (dafault off) */#modparam("auth_db|usrloc|uri", "use_domain", 1)# ----- presence params -----/* uncomment the following lines if you want to enable presence */#modparam("presence|presence_xml", "db_url",#"mysql://opensips:opensipsrw@localhost/opensips")#modparam("presence_xml", "force_active", 1)#modparam("presence", "server_address", "sip:192.168.1.2:5060")####### Routing Logic ######### main request routing logicroute{if (!mf_process_maxfwd_header("10")) {sl_send_reply("483","Too Many Hops");exit;}if (has_totag()) {# sequential request withing a dialog should# take the path determined by record-routingif (loose_route()) {if (is_method("BYE")) {setflag(1); # do accounting ...setflag(3); # ... even if the transaction fails} else if (is_method("INVITE")) {# even if in most of the cases is useless, do RR for# re-INVITEs alos, as some buggy clients do change route set# during the dialog.record_route();}# route it out to whatever destination was set by loose_route()# in $du (destination URI).route(1);} else {/* uncomment the following lines if you want to enable presence */##if (is_method("SUBSCRIBE") && $rd == "your.server.ip.address") {### in-dialog subscribe requests##route(2);##exit;##}if ( is_method("ACK") ) {if ( t_check_trans() ) {# non loose-route, but stateful ACK; must be an ACK after # a 487 or e.g. 404 from upstream servert_relay();exit;} else {# ACK without matching transaction -># ignore and discardexit;}}sl_send_reply("404","Not here");}exit;}#initial requests# CANCEL processingif (is_method("CANCEL")){if (t_check_trans())t_relay();exit;}t_check_trans();# authenticate if from local subscriber (uncomment to enable auth)# authenticate all initial non-REGISTER request that pretend to be# generated by local subscriber (domain from FROM URI is local)##if (!(method=="REGISTER") && from_uri==myself) /*no multidomain version*/##if (!(method=="REGISTER") && is_from_local()) /*multidomain version*/##{##if (!proxy_authorize("", "subscriber")) {##proxy_challenge("", "0");##exit;##}##if (!db_check_from()) {##sl_send_reply("403","Forbidden auth ID");##exit;##}####consume_credentials();### caller authenticated##}# preloaded route checkingif (loose_route()) {xlog("L_ERR","Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]");if (!is_method("ACK"))sl_send_reply("403","Preload Route denied");exit;}# record routingif (!is_method("REGISTER|MESSAGE"))record_route();# account only INVITEsif (is_method("INVITE")) {setflag(1); # do accounting}if (!uri==myself)## replace with following line if multi-domain support is used##if (!is_uri_host_local()){append_hf("P-hint: outbound\r\n"); # if you have some interdomain connections via TLS##if($rd=="tls_domain1.net") {##t_relay("tls:domain1.net");##exit;##} else if($rd=="tls_domain2.net") {##t_relay("tls:domain2.net");##exit;##}route(1);}# requests for my domain## uncomment this if you want to enable presence server ## and comment the next 'if' block## NOTE: uncomment also the definition of route[2] from below##if( is_method("PUBLISH|SUBSCRIBE"))##route(2);if (is_method("PUBLISH")){sl_send_reply("503", "Service Unavailable");exit;}if (is_method("REGISTER")){# authenticate the REGISTER requests (uncomment to enable auth)#if (!www_authorize("", "subscriber"))#{#www_challenge("", "0");#exit;#}####if (!db_check_to()) ##{##sl_send_reply("403","Forbidden auth ID");##exit;##}if (!save("location"))sl_reply_error();exit;}if ($rU==NULL) {# request with no Username in RURIsl_send_reply("484","Address Incomplete");exit;}# apply DB based aliases (uncomment to enable)##alias_db_lookup("dbaliases");# do lookup with method filteringif (!lookup("location","m")) {switch ($retcode) {case -1:case -3:t_newtran();t_reply("404", "Not Found");exit;case -2:sl_send_reply("405", "Method Not Allowed");exit;}}# when routing via usrloc, log the missed calls alsosetflag(2);route(1);}route[1] {# for INVITEs enable some additional helper routesif (is_method("INVITE")) {t_on_branch("2");t_on_reply("2");t_on_failure("1");}if (!t_relay()) {sl_reply_error();};exit;}# Presence route/* uncomment the whole following route for enabling presence NOTE: do not forget to enable the call of this route from the main route */##route[2]##{##if (!t_newtran())##{##sl_reply_error();##exit;##};####if(is_method("PUBLISH"))##{##handle_publish();##}##else##if( is_method("SUBSCRIBE"))##{##handle_subscribe();##}####exit;##}branch_route[2] {xlog("new branch at $ru\n");}onreply_route[2] {xlog("incoming reply\n");}failure_route[1] {if (t_was_cancelled()) {exit;}# uncomment the following lines if you want to block client # redirect based on 3xx replies.##if (t_check_status("3[0-9][0-9]")) {##t_reply("404","Not found");##exit;##}# uncomment the following lines if you want to redirect the failed # calls to a different new destination##if (t_check_status("486|408")) {##sethostport("192.168.2.100:5060");### do not set the missed call flag again##t_relay();##}}
- linux下开源sip server : opensips 的安装+配置 +使用
- linux下开源sip server : opensips 的安装+配置 +使用
- OpenSIPS (Open SIP Server)--Install
- OpenSIPS (Open SIP Server) -Introduction from OpenSIPS website
- 搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用
- 搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用
- 搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用
- 搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用
- 搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用
- 搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用 .
- 搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用
- 搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用
- opensips安装配置
- opensips安装配置
- opensips安装与配置
- opensips安装配置
- linux opensips配置
- SIP服务器的搭建之一 opensips
- 记录一下运动效果的思路
- 读一本书,学一门课
- DataSet 操作Excel导入sql
- 在Eclipse中导入dtd ,使XML 自动提示
- Android Layout XML属性
- linux下开源sip server : opensips 的安装+配置 +使用
- Java并发总结(二):同步与原子性
- C++ 行指针访问(遍历)二维数组所有元素 .
- 第五周实验报告4
- 进程间通信相关
- 各种数据库的java链接
- [C] C程序100例_023
- 数组名和指针
- Java并发总结(三):中断线程