opensips 配置

Posted by WildCow on June 17, 2019

写在前面


爱我所爱,无问西东





方便阅读可能是必要的说明


因为配置的叫 opensips,配置过程中有若干文件名称 or 指令名称也叫 opensips

为了区分,对于所有在指令、文件名称中出现的 opensips 我会用代码框框起来 opensips

前置条件


  • mysql

    sudo apt-get install mysql-server
    sudo apt-get isntall mysql-client
    sudo apt-get install libmysqlclient-dev
    
  • 缺啥就装啥

    • 我缺了 curse.h,装上

      sudo apt-get install libncurses5-dev
      

下载


选择的是直接在官网下载稳定版本 2.4.5(opensips-2.4.5.tar.gz),下载到本地后解压

解压出来的是一个==带自定义配置的安装包==

安装


先进入你解压出来的文件

然后 make menuconfig 进入自定义配置菜单 menuconfig

先康康菜单的使用说明= =!

Use UP and DOWN arrow keys to navigate.
Use RIGHT arrow or ENTER key to enter a certain menu.
Use LEFT arror or Q key to go back.
Use SPACE to toggle an entry ON/OFF.
Press any key to return to menuconfig.

Configure Install Prefix 中可以选择安装路径,默认的是 ‘/usr/local’,我不太敢改成其他的,就选择了默认的

按照 Configure Compile Options -> Configure Excluded Modules 的顺序进入,找到 []db_mysql ,敲空格选中,让他变成 [*]db_mysql

其他的不要动,返回上一级,Save Changes保存你的修改

再返回上一级,选中Compile And Install OpenSIPS 确认安装

值得一提的是这个也支持在解压出的文件内使用命令行,就是不知道怎么进行自定义,只知道下面两个指令,这个好像这个也没有给文档,下载下来的东西中可能有说明,我没去找。。。

make all
make install

安装过程中会缺少一些编译环境,老规矩,缺啥查查自己安上就好啦

因为默认的路径是 ‘/usr/local’

所以在安装的时候以及以后可能会遇到很多权限问题,所以我直接 sudo su

也就是说以下操作全是走管理员权限

在你安装好后,文件目录如下

  • /usr/local/sbin/ 可执行命令

    • opensips
    • opensipsctl:安装用的
    • opensipsdbctl
    • opensipsunix
    • osipsconfig:进入 menuconfig 中的 Generate OpenSIPS Script
    • osipsconsole
  • /usr/local/etc/opensips/ 配置文件

    • opensips.cfg:用于 opensips 启动时的配置,由三部分组成:全局变量设置、加载模块相应参数、路由策略和功能应用

      • 全局变量部分,这些全局参数提供了配置网络侦听器,可用传输协议,分叉(以及进程数),日志记录和其他全局内容

        debug=3
        log_stderror=no
        log_facility=LOG_LOCAL0
              
        fork=yes
        children=4
              
        /* uncomment the following lines to enable debugging */
        #debug=6
        #fork=no
        #log_stderror=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
              
        /* comment the next line to enable the auto discovery of local aliases
        based on revers DNS on IPs */
        auto_aliases=no
        
    • opensipsctlrc:用于数据库配置

    • osipsconsolerc:里面的内容和 opensips.cfg 一样,我没用。。。也不知道是干啥的,猜测是 opensips.cfg 的备份

  • /usr/local/lib/opensips/ 库文件(其实是两个目录)

    • modules:当前 opensips 所支持的模块。
    • opensipsctl

数据库配置


进入 /usr/local/etc/opensips,运行 osipsconfig ,(其实这个就是上面的 menuconfig

按照 Generate OpenSIPS Script -> Residential Script -> Configure Residential Script

选择下面七项:(对于每一项的说明见后文)

[*] ENABLE_TCP
[*] USE_ALIASES
[*] USE_AUTH
[*] USE_DBACC
[*] USE_DBUSRLOC
[*] USE_DIALOG
[*] USE_NAT

返回后选择 Generate Residential Script,生成新的配置文件,退出后(连戳三次 q),会发现新生成的被命名为 opensips_residential_*.cfg,把它重命名成 opensips.cfg,并编辑,编辑的时候注意所有带 # CUSTOMIZE ME 注释的。 这些注释通常是标记了自定义 OpenSIPS 侦听地址或设置正确的数据库 URL。

需要改三个地方

  • IP 地址,即你自己的 IP 地址,当然不是 127.0.0.1 = =!可以通过终端输入 ifconfig 查到,没有的安装就好了

    listen=udp:xxx.xxx.xxx.xxx:5060   # CUSTOMIZE ME
    listen=tcp:xxx.xxx.xxx.xxx:5060   # CUSTOMIZE ME
    
  • 端口号,选择你自己喜欢的端口号,但必须和后面设置的 rtpproxy 的端口号相同

    loadmodule "rtpproxy.so"
    modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:22222") # CUSTOMIZE ME
    
  • 增加 MediaProxy 模块,增加下边这一段(这里的代码在报错,我正在尝试修改)

保存并退出,然后去修改opensipsctlrc文件去设置数据库,去掉所有 DB 相关的注释

# $Id$
#
# The OpenSIPS configuration file for the control tools.
#
# Here you can set variables used in the opensipsctl and opensipsdbctl setup
# scripts. Per default all variables here are commented out, the control tools
# will use their internal default values.

## your SIP domain
SIP_DOMAIN=xxx.xxx.xxx.xxx  #你自己的IP地址

## chrooted directory
# $CHROOT_DIR="/path/to/chrooted/directory"

## 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.
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 super user (for ORACLE this is 'scheme-creator' user)
DBROOTUSER="root"

# user name column
# USERCOL="username"

从这里也可以看到我们数据库的一些信息,默认的数据库用户为 opensips,密码为 opensipsrw

然后新建数据库,增加用户

cd /usr/local/sbin/
opensipsdbctl create
opensipsctl add username password

可以通过 opensipsctl rm username 删除用户

想查看用户,先 mysql -u root -p 后输入密码,然后通过以下指令:

show databases;
use opensips;
show tables;
select * from subscriber;

关于Generate OpenSIPS Script的补充

这个是一个自动脚本生成器(automated script generator),他支持三种脚本,官方文档解释以及个人翻译如下:

  • Residential Script
    • ENABLE_TCP : OpenSIPS will listen on TCP for SIP requests
    • ENABLE_TLS : OpenSIPS will listen on TCP for SIP requests
    • USE_ALIASES : OpenSIPS will allow the use of Aliases for SIP users
    • USE_AUTH : OpenSIPS will authenticate Register & Invite requests
    • USE_DBACC : OpenSIPS will save ACC entries in DB for all calls
    • USE_DBUSRLOC : OpenSIPS will persistently store User Location entries in the DB
    • USE_DIALOG : OpenSIPS will keep track of active dialogs
    • USE_MULTIDOMAIN : OpenSIPS will handle multiple domains for subscribers
    • USE_NAT : OpenSIPS will try to cope with NAT by fixing SIP msgs and engaging RTPProxy
    • USE_PRESENCE : OpenSIPS will act as a Presence server
    • USE_DIALPLAN : OpenSIPS will use dialplan for transformation of local numbers
    • VM_DIVERSION : OpenSIPS will redirect to VM calls not reaching the subscribers
    • HAVE_INBOUND_PSTN : OpenSIPS will accept calls from PSTN gateways (with static IP authentication)
    • HAVE_OUTBOUND_PSTN : OpenSIPS will send numerical dials to PSTN gateways (with static IP definition)
    • USE_DR_PSTN : OpenSIPS will use Dynamic Routing Support ( LCR ) for PSTN interconnection
  • Trunking Script
    • ENABLE_TCP : OpenSIPS will listen on TCP for SIP requests
    • ENABLE_TLS : OpenSIPS will listen on TCP for SIP requests
    • USE_DBACC : OpenSIPS will save ACC entries in DB for all calls
    • USE_DIALPLAN : OpenSIPS will use dialplan for transformation of local numbers
    • USE_DIALOG : OpenSIPS will keep track of active dialogs
    • DO_CALL_LIMITATION : OpenSIPS will limit the number of parallel calls per trunk
  • Load-Balancer Script
    • ENABLE_TCP : OpenSIPS will listen on TCP for SIP requests
    • ENABLE_TLS : OpenSIPS will listen on TCP for SIP requests
    • USE_DBACC : OpenSIPS will save ACC entries in DB for all calls
    • USE_DISPATCHER : OpenSIPS will use DISPATCHER instead of Load-Balancer for distributing the traffic
    • DISABLE_PINGING : OpenSIPS will not ping at all the destinations (otherwise it will ping when detected as failed)
  • 住宅脚本
    • ENABLE_TCP:OpenSIPS将在TCP上侦听SIP请求
    • ENABLE_TLS:OpenSIPS将在TCP上侦听SIP请求(文档上就是和上文一样的,我也不知道为什么,我怀疑是OpenSIPS将在TLS上侦听SIP请求 )
    • USE_ALIASES:OpenSIPS将允许SIP用户使用别名
    • USE_AUTH:OpenSIPS将验证注册和邀请请求
    • USE_DBACC:OpenSIPS将在DB中为所有呼叫保存ACC条目
    • USE_DBUSRLOC:OpenSIPS将持久存储数据库中的用户位置条目
    • USE_DIALOG:OpenSIPS将跟踪活动对话框
    • USE_MULTIDOMAIN:OpenSIPS将为订阅者处理多个域
    • USE_NAT:OpenSIPS将尝试通过修复SIP消息和使用RTPProxy来应对NAT
    • USE_PRESENCE:OpenSIPS将充当Presence服务器
    • USE_DIALPLAN:OpenSIPS将使用dialplan转换本地号码
    • VM_DIVERSION:OpenSIPS将重定向到未到达订阅者的VM调用
    • HAVE_INBOUND_PSTN:OpenSIPS将接受来自PSTN网关的呼叫(使用静态IP身份验证)
    • HAVE_OUTBOUND_PSTN:OpenSIPS将数字拨号发送到PSTN网关(具有静态IP定义)
    • USE_DR_PSTN:OpenSIPS将使用动态路由支持(LCR)进行PSTN互连
  • 中继脚本
    • ENABLE_TCP:OpenSIPS将在TCP上侦听SIP请求
    • ENABLE_TLS:OpenSIPS将在TCP上侦听SIP请求
    • USE_DBACC:OpenSIPS将在DB中为所有呼叫保存ACC条目
    • USE_DIALPLAN:OpenSIPS将使用dialplan转换本地号码
    • USE_DIALOG:OpenSIPS将跟踪活动对话框
    • DO_CALL_LIMITATION:OpenSIPS将限制每个中继的并行呼叫数
  • 负载均衡器脚本
    • ENABLE_TCP:OpenSIPS将在TCP上侦听SIP请求
    • ENABLE_TLS:OpenSIPS将在TCP上侦听SIP请求
    • USE_DBACC:OpenSIPS将在DB中为所有呼叫保存ACC条目
    • USE_DISPATCHER:OpenSIPS将使用DISPATCHER而不是Load-Balancer来分配流量
    • DISABLE_PINGING:OpenSIPS不会在所有目标上ping(否则在检测到失败时会ping通)

生成的脚本带有注释,可以根据注释自行编辑修改脚本,

配置 rtpproxy 和 mediaproxy


mediaproxy和rtpproxy原理

rtpproxy

apt-get install rtpproxy 下载,然后编辑 /etc/default/rtpproxy,修改成

# Defaults for rtpproxy

# The control socket.
#CONTROL_SOCK="unix:/var/run/rtpproxy/rtpproxy.sock"
# To listen on an UDP socket, uncomment this line:
CONTROL_SOCK=udp:127.0.0.1:22222

# Additional options that are passed to the daemon.
EXTRA_OPTS=""
LISTEN_ADDR=xxx.xxx.xxx.xxx #你自己的IP地址
EXTRA_OPTS="-l ${LISTEN_ADDR}"

然后启动 rtpproxy

killall rtpproxy
/etc/init.d/rtpproxy start

如果 rtpproxy 启动失败,可以检查一下 /etc/init.d/rtpproxy脚本 DAEMON 路径是否正确,默认DAEMON=/usr/sbin/$NAME,可能要改为 DAEMON=/usr/bin/$NAME

mediaproxy

此处存在问题,由于不确定项目是否需要,所以没去研究

设置目录


opensips 的日志保存在 /var/log/opensips.log,修改日志文件配置

touch /var/log/opensips.log
chmod 777 /var/log/opensips.log
vi /etc/rsyslog.d/opensips.conf

然后将位于 /etc/rsyslog.d/opensips.conf 增加 local0.* /var/log/opensips.log

然后重启syslog服务,启动opensips

service rsyslog restart
/usr/local/sbin/opensipsctl start

以后启动失败就可以查看 /var/log/opensips.log 文件查找错误.

重新启动和关闭指令

opensipsctl restart
opensipsctl stop

修改 IP 地址


如果修改了 IP 地址,需要改三个地方

  • /usr/local/etc/opensipsopensips.cfg 修改,连续的两行
  • 需要在数据库中重新建立帐号
  • /usr/local/etc/opensipsopensipsctlrc

一些资料