Kamailio高手速成培训2022秋季班圆满结束

第一届Kamailio高手速成培训班,在上周圆满结束。由于疫情原因,本次的培训依旧采用了线上培训的方式,很遗憾不能跟大家在线下见面。不过即使在这种环境下,我们为期两天的培训也是干货满满,内容精彩程度丝毫不减,杜老师精心准备的课程让每一个参加的学员都受益匪浅!接下来就跟小编一起回顾一下本次培训吧!

培训前就一直有小伙伴在群里提问要如何安装Kamailio,也有很多小伙伴在安装Kamailio的过程中遇到了各种各样的问题,所以在培训的最开始,杜老师便演示了如何安装Kamailio。

杜老师演示时使用的是Debain系统,在安装Kamailio时可以使用Kamailio官方维护的APT仓库,需要安装下面的工具以用来安装GPG key

apt-get install gnupg2 wget

使用如下命令安装GPG Key:

wget ‐O‐ https://deb.kamailio.org/kamailiodebkey.gpg │ sudo apt‐key add ‐

然后将下面的内容放到 /etc/apt/sources.list 中:

deb http://deb.kamailio.org/kamailio55 buster main
deb‐src http://deb.kamailio.org/kamailio55 buster main

然后执行更新就可以安装Kamailio了:

apt‐get update
apt‐get install kamailio

安装完Kamailio,我们本次的培训也就拉开了序幕,在正式学习Kamailio之前,杜老师先给大家介绍了SIP协议相关概念,为大家能更好的学习Kamailio做好了铺垫。

在学习完SIP相关基础知识后,杜老师就带大家开始正式投入到了Kamailio的学习中。首先杜老师先给大家介绍了什么是Kamailio,Kamailio是一个类似于FreeSWITCH,Kamailio也是由核心和可加载模块组成的。kamailio的核心非常短小精悍,负责基本的SIP消息处理,而模块则扩展了核心的功能。配置文件默认为kamailio.cfg 组成部分如下图所示。

然后杜老师为学员们一一介绍了上面的每一个配置的选项,具体是如何使用的。KEMI的引入使Kamailio能适应更加复杂的场景。杜老师为我们介绍的是Lua如何在Kamailio中的使用。

我们可以在kamailio.cfg中使用如下方法加载lua相关的模块:

loadmodule "app_lua.so"
modparam("app_lua", "load", "/path/to/script.lua")
cfgengine "lua"

随后杜老师就为大家详细的介绍了Kamailio的相关核心参数:

第一天的培训大部分是在理论学习中度过的,从Kamailio的配置文件、基本组件、KEMI再到运行环境以及路由转发,这满满的理论知识都是为了第二天的实操准备的。第二天的实操,重点以讲解Kamailio的各个功能的Lua脚本是如何实现的为主。

培训开始杜老师带着大家回顾了昨天的内容,并讲了下Kamailio和FreeSWITCH区别(小编已经好奇很久了,尤其是使用FreeSWITCH后),简单来说,Kamailio主要只做转发不处理媒体(当然,特别情况下处理媒体的后面讲),而FreeSWITCH是个B2BUA。为了更好的使用,首先讲解了Kamailio命令行工具(磨刀不误砍柴工)。

首先从Kamailio注册开始,出师即不利,注册失败。小编瞪着大眼睛瞅啊瞅,也看不出所以然,甚是紧张。而久经沙场的杜老师不紧不慢的,一步一步带领着我们去查原因。以注册失败为例,重点讲解了Kamailio的注册流程以及如何跟踪SIP消息,找到原因并修复。

通过追踪流程,最终发现是因为没有将地址放到配置文件里导致。追踪工具推荐,ngrep、tcpdump、sngrep都可以,当然sngrep可以看到更清晰的流程。

为了更简单更快的安装Kamailio,我们推荐Docker镜像的方式,当然,在使用过程中,杜老师也重点讲解了镜像启动脚本。

在讲解Kamailio各脚本之前,杜老师带领大家熟悉了kamailio.cfg,随后开启了第一个脚本演示---example.lua(注册函数)。

在最开始讲解了Kamailio主要用途---转发,所以重点讲解了“使用Kamailio做SIP路由转发”,主要分为有状态和无状态转发。

上过FreeSWITCH培训的同学都知道,路由是什么,路由就是从哪里来到哪里去,同样也适用Kamailio。Kamailio就是控制SIP包从哪里来到哪里去。所以,首先要检查呼叫来源(比如SIP消息来源),然后到哪里去(目的地),转发策略(并行或串行等)。

有人问,那怎么做安全的转发呢,请参考下图:

是的,你没看错,最简单最安全的转发就是不转发。收到任何消息都drop(还记得上面写的那个simple-log.lua吗),我们开启simple-secure就会发现全部SIP消息被drop掉了。

言归正传,如果想测试转发,首先要准备环境,比如启动FreeSWITCH(可参考xswitch-free安装文档,之前参加过FreeSWITCH培训的小伙伴会看着特别熟悉),使用forward_uri转发,从配置文件中开启转发脚本stateless_forward.lua

根据墨菲定律,首次通话果真再次失败(这次,小编不再紧张了),查看SIP追踪发现,Kamailio没有把200转发给FS,从第一个INVITE查看,Kamailio收到转发给了FreeSWITCH,但由于Kamailio没有设置200的转发,所以导致echo不成功,后面修改测试了forward2.lua来验证。

在实际使用中,无状态转发(参考forward.lua)还是很少,大多数情况使用有状态转发(stateful-relay.lua),即,直接forward是无状态,t_realy是有状态转发(通过改变$du实现),有状态转发,你会发现多了100 trying以及record-route地址,t_realy()更多复杂功能还需要大家去实际操作发现。

在培训前,小编和其他小伙伴都曾好奇,一个通话是否可以通过Call-ID来唯一决定呢。随后杜老师讲解了Kamailio中并行转发回答了这个疑问。

通过实际操作会发现,Kamailio转发时,Call-ID是不变的,也就是说不能根据Call-ID去唯一判定一路通话,还需要根据branch、from-tag和to-tag。但是,相对而言,FreeSWITCH是一个B2BUA,并行呼叫时会产生两个不同的Call-ID。

除了并行转发还讲解了串行转发,串行转发是需要根据状态去执行,比如如果收到404然后再执行别的操作。

随后杜老师再次印证了墨菲定律,在演示Echo这种场景时发现没有声音,经查询,FreeSWITCH给Kamailio发送404后,Kamailio没有回ACK(杜老师一如既往的演示必出意外,可以证明不是录像了,哈哈哈)。

此时不要慌,加日志,看宝典(详情参考Kamailio实战第四章),改代码,不解决誓不罢休。(没有强大的内心和自信,真不敢做直播授课,不像小编,此时通常会说“回头再说”)。最后的最后发现是个乌龙,换个镜像搞定(当然,还是之前编译的镜像有点问题导致)。不过,在解决问题的过程中,杜老师也使出了自己的十八般武艺,如果不是遇到这个问题,杜老师还不一定把这些绝活拿出来。 讲到Kamailio,就不得不提其主要的功能负载均衡,相比OpenSIPS需要dispatcher和load_balacnce两个模块,Kamailio只要一个dispatcher模块即可。

修改book.cfg文件(杜老师自己写的),开启WITCH_DISAPATCHER,打开dispatcher.lua了解其实现,修改dispatcher.list,加载生效,即可看到分发到不同的地址上了。

在上述代码中,演示的是轮循。默认Kamailio有10多种算法,随后杜老师对此一一进行了详解。其实,总结下,掌握这些算法才能掌握dispacher,因为dispacher就是不同算法的组合。

想要随心所欲的控制,首要的要分清呼叫从哪里来,从PSTN还是FreeSWITCH,然后根据不同来源,去决定转发到哪边(当然也可以通过ds_is_from_list来判断来源),如下:

既然知道了从哪里来,下一步就要了解到哪里去。我们可以通过php等各种语言来写http请求,也可以用Kamailio实现http请求(参考http_client.lua)。

在演示中,Kamailio既是客户端也是服务端,因此会发起请求,收到后去执行路由(除了同步请求,Kamailio也支持异步请求)。在演示中,杜老师针对每个函数和大多数用到的模块也进行了一一讲解。

Kamailio本身不依赖数据库,但在实际使用中,用户、中继都需要存储到数据库中,因此,杜老师重点讲解了如何初始化及连接数据库。以dispatcher为例,针对PostgreSQL以及MySQL均进行了讲解(在演示MySQL时,再次一波三折,不得不说,这票真的很值啊)。

在前面我们已经了解过http查询,现在当然也可以根据数据库去查询,连接上数据库后就可以使用更多路由示例。特别注意的是,Kamailio并不不是实时查表,而是加载到内存里,每次加载数据库都要重载的。一个通话的最后通常以话单为结尾,Kamailio也不例外,加载acc模块即可以。

讲解了那么多,怎么能少了SBC相关说明呢,随后杜老师又详细讲解并操作Kamailio如何实现做SBC。

Kamalio代理注册,实际上就是需要记住外网地址;另外也可以让Kamailio记住本地IP地址以及外网地址。当有注册消息时,转发到FreeSWITCH后,path是Kamailio的地址,Kamailio会转发给received参数记住的地址(由于杜老师是Nat环境,导致呼叫循环,Kamailio不知道是FS还是外部来的,导致呼叫一直循环。当实际使用的时候,你的环境基本不是Nat或放到一个地址上就可以) 。

图片讲完了代理媒体,又讲了rtpengine的配置、实现原理以及转发过程。由于rtpengine本身两个网卡,可以对接两边,进行转发。实际就是,SIP给rtpengine发,FS也给rtpengine,这样通过rtpengine转发。当然,Kamailio中也有对接rtpengine的模块,实现一台Kamailio控制多台rtpengine。

总的来说,Kamailio收到REINVITE后,从rtpengine拿到端口替换sdp,之后转发到FS。

当然FS也可以当SBC,Kamailio通过SIP去控制FS去转发。当然如果你对Kamailio以及FS都特别熟悉,就可以用如下方法,

最后杜老师讲了WebRTC的使用、Kamailio性能测试及安全策略。通过详细的场景演示,再回首昨天讲的参数,第一天云里雾绕的参数就很容易理解了。

在整个培训中,精彩连连也意外重重,尽管培训前杜老师已做过各种演练,在实际操作时依然遇到了很多不可思议的问题,但是,不必担心,就像他说的,遇到问题不怕,看log,客户端有问题我们换客户端,服务端有问题我们换服务端,缩小出错范围,以不变应万变。实在搞不定呀,那就睡一觉再继续,不要钻牛角尖。


Kamailio高手速成培训2022秋季班(线上)

课程大纲:Kamailio简介、SIP简介、Kamailio配置文件、Kamailio基本组件、KEMI、Kamailio运行环境、Kamailio路由转发、Kamailio数据库操作、Kamailio各种路由示例、Kamailio单元测、Kamailio性能及安全。


培训内容

第一天

  • Kamailio简介
  • SIP简介
  • Kamailio配置文件
  • Kamailio基本组件
  • KEMI
  • Kamailio运行环境
  • Kamailio路由转发

第二天

  • Kamailio数据库操作
  • Kamailio各种路由示例
  • Kamailio单元测试
  • Kamailio性能及安全

以实际授课顺序为准,以上仅为内容大纲

讲师介绍

本次培训的讲师是Kamailio中文社区联合创始人杜金房先生。

杜金房先生是资深网络通信技术专家,在网络通信领域耕耘 20 多年,精通 VoIP、SIP 和 FreeSWITCH等各种网络协议和技术,经验十分丰富。有超过十多年的 FreeSWITCH 应用和开发经验,不仅为国内几家大型通信服务厂商提供技术支持和解决方案而且客户还遍及美洲、 东南亚、欧洲等海外国家和地区。

报名方式及费用

  • 培训时间: 2022年10月22日-10月23日 两天
  • 培训方式: 线上培训(腾讯会议)开始前一天通知
  • 收费详情:
    • 全价为4000元,含2天课程、讲师PPT、现场技术问答。
    • 5人以上团体报名优惠请联系电话0535-6753997/18605359919/13953542846

购票优惠说明

  • 原价4000,现在报名即可享受8折优惠
  • 购书福利:购买《Kamailio实战》,可享受5折优惠
  • 额外福利:凡报名Kamailio高手速成班的同学,免费赠送11月5日-11月6日为期两天的XSwitch培训

付款说明

我们支持支付宝、微信、公对公付款,选择公对公付款的报名者,请在24小时内支付,逾期未支付者订单自动取消。

退款政策

如果您报名后因故不能上课,开课前申请退款收20%管理费,因为是线上课程,开课后概不退费。

注意事项

  • 线上培训,禁止录播、录屏;
  • 培训资料、培训网址禁止外传;
  • 培训账号仅限本人使用,禁止与他人共享;
  • 本次培训为直播,没有回放,请大家准时参加;
  • 学员提前准备个人电脑,以便进行实战练习。

联系方式

  • 公司座机 号码:0535-6753997
    • 安经理:18605359919
    • 李经理:13953542846
  • 邮件:training@x-y-t.cn
  • 微信公众平台:FreeSWITCH-CN
  • 新浪微博:@FreeSWITCH-CN

主办单位

本次培训,由烟台小樱桃网络科技有限公司主办。

烟台小樱桃网络科技有限公司成立于 2016 年1月,是国内最早从事 FreeSWITCH 研发与推广的企业,与美国 FreeSWITCH 核心研发团队保持着紧密联系。运营着FreeSWITCH 中文社区、RTS 社区、公众号、QQ 群、知识星球等与 FreeSWITCH 软交换相关的资源。组织着国内 FreeSWITCH 的培训与沙龙。公司主要从事云端通信平台、电信级、企业级通讯系统建设、IVR 建设、呼叫中心系统、IP 电话、实时音视频会议、洲际 VoIP 通信、指挥调度、FreeSWITCH 咨询、开发、培训等服务。致力于打造优质的、一站式企业通信服务,为客户提供企业通信解决方案,最大化提升客户价值。