图解VoIP#1: 你什么时候需要OpenSIPS或kamailio - 软交换架构演进之路

最简单的架构 - 1架构 1架构: 1台FS节点 在一个最简单的VoIP架构里,你只需要部署一台具有公网IP的FreeSWITCH, 就可以开始呼叫业务。 分机直接注册到FS上,然后FS直接对接线路。 但是要不了多久,你就会发现下面的问题: 安全问题: FS直接公网暴露,必然面临被攻击的事实。因为对接线路虽然可以设置网络策略,但是分机的IP往往是动态变化的。小型的攻击例如恶意的注册扫描,大型的攻击就是DDOS, 直接打满带宽,导致业务必然中断。 一些简单的安全防范,比如默认端口改成非5060的端口,但是使用现代化的端口扫描工具,6W个端口基本上几秒就能扫描完。 高可用问题: 单台FS挂掉,业务就中断了 停机维护, 业务也会中断 扩展问题: 当业务上量,一台FS就无法满足,必然要增加新的FS节点。 这时候问题就来了 分机信息保存在FS节点中,多FS节点分机注册信息如何同步? 在呼入的时候,是否要通知SIP-线路去增加新的FS节点信息? 网络策略是不是又要开一遍? 支持FS动态扩展架构 2+N架构 2+N架构: 2台SIP Proxy,N台FS节点 这种架构特点 SIP Proxy层具有公网IP,无论分机注册,还是对接线路,SIP信令都需要经过SIP Proxy层 分机注册信息也保存在SIP Proxy层,FS不再关心分机的注册地址 SIP Proxy层可以用keep-alive保活,一主一备部署 FS可以无感扩容,由Proxy层来做负载均衡。 在这个架构图里,我没有引入rtpproxy或者rtpengine的,这时候媒体流的走向就比较尴尬。 每台FS还必须要要有公网地址, 只有这样分机才能直接对接FS。 而原因也很简单,因为opensips或者kamailio没有媒体处理能力。 这种架构还是无法节约EIP, FS还是可能遭受到公网攻击。 2+N+N架构 2+N+N架构: 2台SIP Proxy,N台MediaPrxyo节点, N台FS节点 为了彻底让FS不再供网暴露,我们引入媒体代理层。 这次基于架构2, 引入媒体代理集群,例如使用多台rtpengine机群,用来转发UAC <> FS <> 线路 之间的媒体流 三明治架构 可以参考 SIPSwse C5架构 https://wdd.js.org/posts/2025/sipwise-c5-arch/ 这种架构在媒体层和SIP Proxy层之间又增加一层,我称之为SIP Router层。 ...

2026-03-09 18:26:07 · 1 分钟 · Eddie Wang

图解Kamailio进程间通信详解

1. 概述 2. UDP Socket进程处理分析 2.1. UDP端口信息收集 2.2. 端口绑定 2.3. 进程fork阶段 2.4. UDP read 阶段 2.5. UDP 消息进程间负载均衡阶段 3. TCP消息处理分析 3.1. 消息处理模型 3.2. 负载均衡策略 3.3. 调用链分析 4. 举例说明: UDP读TCP发 1. 概述 kamailio SIP消息处理进程主要分为三类。 类别 功能 数量 UDP worker进程 处理以UDP传输的SIP消息 port * children TCP main进程 负责tcp链接管理,生命周期维护,tcp work的消息分发 1 TCP worker进程 处理以TCP传输的SIP消息 children 以下面的配置为例: 则SIP消息处理进程数量为:4 * 2 + 1 + 4 = 13个 children=4 listen=udp:127.0.0.1:5060 listen=udp:127.0.0.1:5080 listen=tcp:127.0.0.1:5061 在生成环境,建议children设置为CPU核数, 这样能最大化利用多核能力,并且避免太多的进程切换。 2. UDP Socket进程处理分析 UDP Socket处理主要分为三个步骤 ...

2026-03-06 15:42:42 · 2 分钟 · Eddie Wang

第一节 如何熟悉Kamailio文档的文档结构

我始终认为,快速学习一门知识,最为重要的就是熟悉它的文档结构。 对于熟悉OpenSIPS的文档结构来说的人,看了Kamailio的文档,往往觉得无从下手。 当我们打开Km的官网(kamailio.org)后, 会重定向到https://www.kamailio.org/w/, 在页面的右侧, 接着,我们会导航到 https://www.kamailio.org/w/documentation/ 这个页面的结构需要烂熟于心 1. 模块文档 如果你知道km的版本号和对应的模块,可以点击这里进入对应版本,然后再选择对应模块 2. wiki部分 2.1 必学部分 wiki部分主要是一些教程,非常值得看。 其中有三个重点部分 core cookbook: 主要讲解km的脚本的结构、全局参数、模块参数、路由类型、预处理、脚本操作等等,是编写km脚本的必学之处,各种参数都可以看看 Pseudo-Variables CookBook:主要讲解各种伪变量,用来读写SIP消息 Transformations CookBook: 主要讲解各种操作变换,例如把字符串型转为int型数据 全部函数索引 在km的wiki官网,即https://www.kamailio.org/wikidocs/, 其中Alphabetic Indexes就是所有的参数或者函数的索引。 在你学些km的脚本时,有时候想知道某个函数在哪个模块中,就可以用这个全部函数索引中查找。 源码安装 这部分讲解如何通过GIT进行源码安装。 FAQ https://www.kamailio.org/wikidocs/tutorials/faq/main/ 外部资源 这里涉及了如何用km和常见的媒体服务器如何集成 其他 官方的Web版本的wiki, 对于刚入门的人来说,还是有点绕的。 另外一个问题就是mkdocs的页面渲染效果的确不太行,目录滚动一点都不灵敏。 如果你想看的不是某个模块的说明文档,我更建议你直接把https://github.com/kamailio/kamailio-wiki 这个git仓库下载到本地查看。 总结 总体来说,km的文档算是非常完整了,但是和OpenSIPS相比,还有待加强。

2024-12-02 22:43:24 · 1 分钟 · Eddie Wang