OpenSIPS 配置 VOIP

发布于 2019-04-21  80 次阅读


OpenSIPS是一个“上了年纪的”VOIP 软件,在配置它的时候费了一番周折。下面我就来说一说我踩过的坑。

OpenSIPS

我的 OpenSIPS 服务运行在一台位于香港的 VPS 上,服务器系统是 Ubuntu Bionic。我本来想将 OpenSIPS 部署在 Docker 上以隔离本地的其它服务,但是失败了。一些组件在穿透 NAT 的使用需要运行 modprobe 来加载内核模块,而 Docker 不支持这一操作(貌似有骚操作可以强上)。不得已,我跑在了 Host 机。

首先安装 MySQL,然后给 OpenSIPS 配置一个账户(opensips-opensipsrw)。这里我们选择配置默认账号密码来避免后期修改麻烦,反正也只是临时用用。然后 apt 安装 OpenSIPS 和它的 MySQL 模块。

PS:这一步网上的教程都是下载源码然后手动编译,但是实测并不需要。考虑到我的 VPS 是 2 die 1G,我没有选用这种方法。

安装完成后,修改 /etc/opensips/opensipsctlrc 文件,取消前面几项的注释。这一步的目的是配置 MySQL 后端,同学们根据自己的情况配置。如果是默认账号密码的话不需要修改。

配置完成后执行 opensipsdbctl create 这一步会在 MySQL 中创建 opensips 数据库并写入相关数据,VOIP 的账户信息也会在这里。

写下来执行 osipsconfig 命令。这是 OpenSIPS 的一个生成配置文件的脚本,选择 ---> Generate OpenSIPS Script —> Residential Script —> Configure Residential Script 并选中如下几项:

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

保存并生成配置文件,然后在 /etc/opensips 目录下覆盖原本的 opensips.cfg 文件。随后编辑 opensips.cfg 文件,将 0.0.0.0 改成你自己的公网IP。值得注意的是,如果你修改了默认的账号密码,请在 opensips.cfg 文件中搜索默认账户,并改称你的自定义账户。

对于运行在局域网内的用户,加下来的 RTPProxy 就可以不用配置了。这里我们执行 opensipsctl add user pwd 添加 VOIP 账号(有两个才能通话喔)。执行 opensipsctl start 启动 OpenSIPS 服务。这里要注意,我本机使用 systemd 启动OpenSIPS 服务失败,如果不想修改 service 配置文件的话还是用 opensipsctl 吧。

打开 LinPhone 客户端(同样是 apt 安装)并输入 sip 账户,就可以通话了。

RTPProxy 配置

对于处在 NAT 后的用户,使用 RTPProxy 就很有必要了。值得一提的是,跨越 NAT 通信必须要求服务器具有公网地址,没有的童鞋请考虑局域网部署。安装 RTPProxy 可以直接 apt install rtpproxy

安装完成后,编辑 /etc/default/rtpproxy,在这里打开 #CONTROL_SOCK="unix:/var/run/rtpproxy/rtpproxy.sock" 的注释,然后修改 /etc/opensips/opensips.cfg 文件,找到 rtpproxy 相关配置,并修改原本地址为上述 unix sock。

然后 service rtpproxy restart。重启 OpenSIPS 服务就可以了。

关于网络环境

这一配置在我本地是可以运行的,但是考虑到国内的网络环境极其复杂,被 UDP 承载的 sip 协议可能会被运行商限速(这里批评某校校园网),所以大家可以考虑 TCP。在上面的 OpenSIPS 配置中我们已经打开了 TCP 服务,端口 5060,大家可以自行尝试。

关于 sip 通信

实测基于 MediaProxy 的通信是更稳定可靠的,RTPProxy 会有莫名其妙的卡顿。但是 MediaProxy 的配置在我本地出现了一些问题,不能保证每次都成功运行。同时MediaProxy 官方的编译版本也存在依赖问题。望有志之士自行探索相关环节。


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。