SIP 协议与 Kamailio 服务搭建

Published: 2020-03-12

Tags: SIP

本文总阅读量

SIP 协议

“会话初始协议(Session initiation protocol; SIP)

由互联网工程任务组指定的,用于多方多媒体通信的框架协议。

注:它是一个基于文本的应用层控制协议,独立于底层的传输协议,用于建立、修改和终止 IP 网络上的双方或多方多媒体会话,互联网工程任务组,即 IETF。

在 SIP 协议框架下,有四种类型的服务,SIP 用户代理(UAC)、SIP 服务代理(UAS)、SIP 注册服务和 SIP重定向服务。” —— 摘自国标《GBT 28181-2016》

关于 SIP 协议详解网上资料很多,我并没有学的很深,就不狗尾续貂了,此处记录一下我在了解 SIP 协议时候,想要更直观的了解 SIP ,部署 Kamailio 开源 SIP 服务器的步骤。

Kamailio 服务搭建

本部署方式仅适合于在局域网搭建进行测试及学习使用,在互联网部署安全性以及性能都未考量

官网 RPM 包安装文档:https://www.kamailio.org/wiki/packages/rpms

添加 repo 源

cd /etc/yum.repos.d/

wget http://download.opensuse.org/repositories/home:/kamailio:/v5.3.x-rpms/CentOS_7/home:kamailio:v5.3.x-rpms.repo

yum makecache

安装与启动

yum install kamailio

# 启动
systemctl start kamailio

开启端口

firewall-cmd --add-port=5060/tcp --permanent
firewall-cmd --reload

编辑配置文件 /etc/kamailio/kamctlrc

SIP_DOMAIN 设置为服务器 IP,将 DBENGINE 设置为 SQLITE,取消 DB_PATH 的注释,因为这个服务器用于观察 SIP 交互流程,所以一切从简。

## your SIP domain
SIP_DOMAIN=192.168.103.236

DBENGINE=SQLITE

DB_PATH="/usr/local/etc/kamailio/dbtext"

安装 SQLITE 模块

yum install kamailio-sqlite

初始化数据库

# 创建目录
mkdir /usr/local/etc/kamailio

kamdbctl create

创建用户的命令(用户,密码)

kamctl add dong dong

我没有开启认证,所以即使不初始化用户,直接登录也是可以的。

重启服务以使配置生效

systemctl restart kamailio

使用 netstat -tunlp | grep 5060 可以看到已经监听了 5060 端口。

如果服务没有启动成功,可以使用命令 kamailio -M 8 -E -e -dd 查看输出。

Kamailio 客户端

在两个都可以连接到服务器的电脑上分别安装 Kamailio 客户端。

添加新的用户的时候,设置的服务器的 IP 地址和端口号,协议需要选择为 TCP。

之后在客户端首页呼叫服务器上登录的另一个用户。

linphone

接通后可以进行音视频通话。

linphone

之后可以使用 wireshark 进行抓包,就可以对 SIP 协议流程及结构有更加直观的了解了。

一些补充

同时在两个服务器上部署 Kamailio 服务后,两台客户端电脑分别连接不同的服务器,然后位于 192.168.103.236 域的 “dong” 用户向位于 192.168.3.245 域的 gimp 请求时,可以进行通信互联。

linphone

此时 Kamailio 服务器充当一个代理的角色,把用户发送的请求经由自身发送到指定的服务地址进行了请求。

SIP 服务器级联后,通过用户名+服务器地址就可以唯一的确定一个客户端。

linphone

结束

先这样,SIP 协议在视频监控领域也有重要的作用,后续再进行记录。

参考

  1. Kamailio - Getting Started Guide https://www.kamailio.org/wiki/tutorials/getting-started/main

  2. Kamailio SIP权威安装基础教程 https://www.iplaypy.com/linux/l7011.html