首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

使用kamailio进行分机注册及互拨

编程知识
2024年09月02日 21:33

操作系统版本:Debian 12.5_x64

kamailio版本:5.8.2

kamailio作为专业的SIP服务器,可承担注册服务器的角色。今天记录下kamailio作为注册服务器,承接分机注册,并实现相互拨打的过程。

我将从以下几个方面展开:

  • 模块配置
  • 分机账号添加
  • 无rtp代理的分机互拨
  • 带rtp代理的分机互拨
  • 配套资源下载

一、模块加载

模块文档地址:

https://kamailio.org/docs/modules/5.8.x/modules/registrar.html

模块加载及配置(使用kamailio的默认配置即可):

loadmodule "registrar.so" 

# ----- registrar params -----
modparam("registrar", "method_filtering", 1)
/* uncomment the next line to disable parallel forking via location */
# modparam("registrar", "append_branches", 0)
/* uncomment the next line not to allow more than 10 contacts per AOR */
# modparam("registrar", "max_contacts", 10)
/* max value for expires of registrations */
modparam("registrar", "max_expires", 3600)
/* set it to 1 to enable GRUU */
modparam("registrar", "gruu_enabled", 0)

kamailio的安装可参考这篇文章:

kamailio5.8安装及配置

二、添加分机

命令格式如下:

kamctl add  <username> <password>

示例:

kamctl add 2001 123456

如果提示如下错误:

ERROR: domain unknown: use usernames with domain or set default domain in SIP_DOMAIN

 则需要编辑kamctlrc文件,配置SIP_DOMAIN变量。

 账号信息存储在subscriber表中,效果如下:

 可使用软电话注册验证,效果如下:

 可添加多个用户:

kamctl add 2001 123456
kamctl add 2002 123456

数据表效果如下:

 三、分机互拨

这里以内网的场景进行模拟。

分机2001和分机2002注册地址:192.168.137.1

kamailio地址:192.168.137.71

呼叫模型如下:

 1、存储注册信息

配置相关模块,示例如下:

loadmodule "db_mysql.so"
loadmodule "usrloc.so"

modparam("usrloc", "db_url", "mysql://root:test_123@192.168.137.1/kamailio71")
modparam("usrloc", "db_mode", 1)
modparam("usrloc", "use_domain", MULTIDOMAIN)

这里db_mode用1,直接写数据库,也可以用2,定时刷新到数据库。

 2、添加分机路由

可以使用默认的LOCATION路由,也可以自定义路由,这里以自定义路由为例进行演示。

配置相关模块,示例如下:

loadmodule "sqlops.so"

modparam("sqlops","sqlcon","db=>mysql://root:test_123@192.168.137.1/kamailio71")

sqlops是用于查询数据库的"db=>"是定义的标识,后续查询时用db标签。

添加路由,使用 sql_xquery 函数查询数据库;

route(EXTEN);

路由内容如下:

route[EXTEN] {
    if(!is_method("INVITE"))
        return;
    xlog("L_INFO","rU is $rU \n");

    if (!registered("location")) {
        xlog("L_INFO","$rU not registered\n");
        exit;
    }
    sql_xquery("db","SELECT contact FROM location WHERE username='$rU';","rb");
    if ( $xavp(rb=>contact) == $null) {
        xlog("L_INFO","contact is  null  \n");
    } else {
        xlog("L_INFO","contact is   $xavp(rb=>contact)  \n");
        $du =  $xavp(rb=>contact);
    }
    xlog("L_INFO","rU is $rU , du is $du\n");

    route(RELAY);
    exit;
}

配置截图如下:

3、呼叫测试

这里使用分机2002拨打分机2001,路由成功,效果如下:

 配套配置文件可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240902 获取。

这里没有进行rtp代理,sdp里面写的是话机的ip地址:

 配套的抓包文件可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240902 获取。

四、添加rtp代理

上述步骤中,实现了sip信令代理,如果要代理rtp数据,可以使用rtpproxy或rtpengine实现,这里以rtpengine为例进行示例。

呼叫模型如下:

 1、安装rtpengine

可通过apt安装:

apt install rtpengine

也可通过源码安装,具体参考:

debian10环境安装rtpengine

默认配置文件:

/etc/rtpengine/rtpengine.conf

启动rtpengine:

systemctl start rtpengine

效果如下:

 2、配置kamailio

文件:kamailio.cfg

加载模块,并配置参数:

loadmodule "rtpengine.so"

modparam("rtpengine", "rtpengine_sock", "udp:127.0.0.1:2223")

如果使用默认配置文件的规则(kamailio.cfg),需要先定义变量:

#!define WITH_NAT                                                                            
#!define WITH_RTPENGINE

配置效果如下:

 配置路由(在NATMANAGE中,默认配置):

 if(nat_uac_test("8")) {
        rtpengine_manage("SIP-source-address replace-origin replace-session-connection");
    } else {
        rtpengine_manage("replace-origin replace-session-connection");
    }

也可使用自定义路由(在NATMANAGE中):

if (has_body("application/sdp")) {
    rtpengine_manage("trust-address replace-origin replace-session-connection");
}

这里以默认配置为例进行演示,配置如下:

 重启kamailio服务生效:

systemctl restart kamailio

配套配置文件可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240902 获取。

3、使用rtpengine进行代理

使用2002呼叫2001,并在kamailio上进行抓包。

呼叫效果如下:

 使用rtpengine进行rtp代理后,sdp里面写的是kamailio的ip地址:

 可使用wireshark播放rtp音频流:

 配套抓包文件可从文末提供的渠道获取。

五、资源下载

本文涉及源码及相关文件,可从如下途径获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240902 获取。

 好,就这么多了,别忘了点赞哈!

From:https://www.cnblogs.com/MikeZhang/p/18393674/km20240902
本文地址: http://www.shuzixingkong.net/article/1676
0评论
提交 加载更多评论
其他文章 呵,老板不过如此,SQL还是得看我
2018年7月,大三暑假进行时,时间过得飞快,我到这边实习都已经一个月了。 我在没工作之前,我老是觉得生产项目的代码跟我平时自学练的会有很大的区别。 以为生产项目代码啥的都会规范很多,比如在接口上会做很多安全性的工作(自学练的时候确实学到的类似的案例),代码设计上会有很多设计模式的应用。 但实际上,
呵,老板不过如此,SQL还是得看我 呵,老板不过如此,SQL还是得看我 呵,老板不过如此,SQL还是得看我
C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿,推荐或自荐优质文章/项目/学习资源等。每周
C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31) C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31) C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)
一场 Kafka CRC 异常引发的血案
一、问题概述 客户的生产环境突然在近期间歇式的收到了Kafka CRC的相关异常,异常内容如下 Record batch for partition skywalking-traces-0 at offset 292107075 is invalid, cause: Record is corrup
一场 Kafka CRC 异常引发的血案 一场 Kafka CRC 异常引发的血案 一场 Kafka CRC 异常引发的血案
开源项目管理工具 Plane 安装和使用教程
说到项目管理工具,很多人脑海中第一个蹦出来的可能就是 Jira 了。没错,Jira 确实很强大,但是...它也有点太强大了,既复杂又昂贵,而且目前也不再提供私有化部署版本了。 再说说飞书,作为国产之光,它确实在协作方面做得不错。可是当你真的想好好管理一个复杂项目时,你会发现它就像是一把瑞士军刀 ——
开源项目管理工具 Plane 安装和使用教程 开源项目管理工具 Plane 安装和使用教程 开源项目管理工具 Plane 安装和使用教程
C#自定义控件—流动管道
C#用户控件之流动管道 如何绘制一个动态的流动管道(FlowPipe)? 分两步绘制 定义属性; 画布重绘; 主要技能: 管道的绘制(渐变色矩形) /// &lt;summary&gt; /// 画渐变色矩形的方法 /// &lt;/summary&gt; /// &lt;param name=&q
C#自定义控件—流动管道
全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法
在 Python 中,内置类型的行为是通过一组特殊的“魔法方法”来实现的,这些魔法方法以双下划线开头和结尾,比如 init 和 str,你可以通过重写这些魔法方法来定制或扩展内置类型的行为。
全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法 全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法 全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法
解密Prompt系列37. RAG之前置决策何时联网的多种策略
前置判断模型回答是否需要联网,之前介绍了自我矛盾和自我拒绝者两个方案。这一章我们再补充几种基于微调,模型回答置信度和小模型代理回答的方案。
解密Prompt系列37. RAG之前置决策何时联网的多种策略 解密Prompt系列37. RAG之前置决策何时联网的多种策略 解密Prompt系列37. RAG之前置决策何时联网的多种策略
数据库中查询含有某个emoji表情的行数据
数据库中查询含有某个emoji表情的行数据 MySQL的情况 代码如下 ​ create table tt6(id int, name varchar(800)); insert into tt6 select 1, &#39;121&#128522;33&#39;; insert into tt6
数据库中查询含有某个emoji表情的行数据 数据库中查询含有某个emoji表情的行数据 数据库中查询含有某个emoji表情的行数据