当前位置: 首页 > article >正文

Kamailio 网络拓扑案例分享

网络拓扑比较特别

Kamailio 单网卡

IMS --------------   Kamailio ------------    Fs

10.2.3.4        listen 192.168.1.100    172.16.1.99

                    外网地址 10.2.3.5

                    外网地址 172.16.1.100

对于 IMS 来说,只能用 10.2.3.5 访问 Kamailio

对于 Fs 来说, 只能用 172.16.1.100 访问 Kamailio

Kamailio 配置如下:

listen=udp:192.168.1.100:5060

alias=10.2.3.5:5060  # myself 逻辑

alias=172.16.1.100:5060 # myself 逻辑

路由脚本需要特别处理:

如果 INVITE 来自 IMS , 设置分支标志 FLB_SRC_IMS_DST_FS,不能调用 record_route(Kamailio 理解不了这种网络拓扑),而是 route(RR)

如果 INVITE 来自 Fs, 设置分支标志 FLB_SRC_FS_DST_IMS,同理,需要 route(RR)

下面是 route[RR] 的具体实现:

route[RR] {
    if (isbflagset(FLT_SRC_FS_DST_IMS)) {
        record_route_preset("10.2.3.5:5060", "172.16.1.100:5060");
        add_rr_param(";r2=on");    
    else if (isbflagset(FLT_SRC_IMS_DST_FS)){        
        record_route_preset("172.16.1.100:5060", "10.2.3.5:5060");
        add_rr_param(";r2=on");    
    } else {
        record_route();
    }
    return;
}


rtpengine.conf 这样配置:

interface=ims/192.168.1.100!10.2.3.5;fs/192.168.1.100!172.16.1.100

...

NATMANAGE 的路由代码为:

route[NATMANAGE] {

...

    if (is_request() && !has_totag()) {
        if (isbflagset(FLT_SRC_FS_DST_IMS)) {
            $xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " direction=ims direction=fs";    
        } else if (isbflagset(FLT_SRC_IMS_DST_FS)) {
            $xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " direction=fs direction=ims";    
        }
    }
...

}

if (is_request() && !has_totag()) 的意思是,direction 调用一次就行,rtpengine 非常聪明


Kamailio 的中文好文章在哪里?^_^


http://www.kler.cn/news/362434.html

相关文章:

  • 关于Docker
  • Java, 将 csv 中空值用上一行的值填充
  • centOS部署Jenkins实现项目可持续自动化部署
  • 【JVM】—深入理解G1回收器—回收过程详解
  • Docker基础部署
  • Java可变参数
  • 深信服超融合HCI6.8.0R2滚动热升级至HCI6.9.1
  • 力扣143.重排链表
  • 软考机考系统架构师论文如何高效画图?
  • 《YOLO目标检测》—— YOLOv1 详细介绍
  • sealed class-kotlin中的封闭类
  • Flume面试整理-常见的Source类型
  • 陆金所控股第三季度财报分析:增长困局与逆势突围
  • Ascend C算子编程和C++基础 Mission Sinh算子开发-基于ModelArts平台
  • “摄像机”跟随及攻击抖动实现
  • 比XML更简洁的配置文件——yml(2min了解)
  • 重构复杂简单变量之用子类替换类型码
  • 【AIGC】AI时代降临,AI文案写作、AI绘画、AI数据处理
  • PHP编程基础
  • 使用OpenCV实现基于FisherFaces的人脸识别
  • 代码笔记:Linux系统上解压文件
  • VScode分文件编写C++报错 | 如何进行VScode分文件编写C++ | 不懂也能轻松解决版
  • vscode使用pnpm报错
  • C++大坑之——多继承(菱形继承)
  • Java的方法传参机制
  • Nvidia在Jetson NX上模型量化