OpenSIPS 简介
什么是 OpenSIPS?
OpenSIPS(Open SIP Server)是一个高性能、开源的 SIP 服务器平台,用于构建各种 VoIP 和实时通信应用。起源于 2008 年从 OpenSER 项目分叉,使用 C 语言编写,以超高并发、灵活路由著称。
💡 如果说 FreeSWITCH 是"媒体处理引擎",那 OpenSIPS 更像是"SIP 流量调度中枢"——专注信令,不处理媒体。
核心定位
┌─────────────────────────────────────────────────────┐
│ 上层应用 │
│ 呼叫中心 运营商平台 SBC 负载均衡 WebRTC网关 │
├─────────────────────────────────────────────────────┤
│ OpenSIPS 核心 │
│ SIP 路由 注册 鉴权 负载均衡 故障转移 │
├─────────────────────────────────────────────────────┤
│ 不处理媒体流(RTP) │
│ 媒体交给 → RTPProxy / RTPEngine / FreeSWITCH │
└─────────────────────────────────────────────────────┘
OpenSIPS vs FreeSWITCH vs Kamailio
💡 OpenSIPS vs Kamailio:两者极为相似(同根同源),OpenSIPS 更注重企业级特性和易用性,Kamailio 更偏极客/运营商级。
核心架构
1. 🧠 核心引擎
┌─────────────────────────────────────┐
│ OpenSIPS Core │
│ │
│ ┌─────────┐ ┌────────────────┐ │
│ │ SIP │ │ Script Engine │ │
│ │ Stack │ │ (路由脚本) │ │
│ └─────────┘ └────────────────┘ │
│ │
│ ┌──────────────────────────────┐ │
│ │ Module Interface │ │
│ └──────────────────────────────┘ │
└─────────────────────────────────────┘
↓ ↓ ↓
注册模块 鉴权模块 数据库模块
多进程架构:主进程 + 工作进程,充分利用多核 CPU
共享内存:进程间共享数据,高效通信
异步 I/O:非阻塞处理,支持超高并发
2. 📜 路由脚本(核心特色)
OpenSIPS 使用类 C 的脚本语言定义 SIP 消息处理逻辑,灵活强大:
# opensips.cfg 路由脚本示例
route {
# 处理注册请求
if (is_method("REGISTER")) {
if (!www_authorize("", "subscriber")) {
www_challenge("", "0");
exit;
}
save("location");
exit;
}
# 处理通话请求
if (is_method("INVITE")) {
if (!lookup("location")) {
sl_send_reply("404", "Not Found");
exit;
}
route(RELAY);
}
}
route[RELAY] {
if (!t_relay()) {
sl_reply_error();
}
exit;
}
3. 📦 模块系统
OpenSIPS 功能全部通过模块实现,目前拥有 120+ 模块:
核心功能模块
路由与负载均衡
媒体与 NAT
数据库与存储
高级特性
典型应用场景
☎️ 1. SIP 代理服务器
企业内部 SIP 注册、路由
分机互拨、外线接入
⚖️ 2. SIP 负载均衡 / 故障转移
SIP 客户端
↓
OpenSIPS(dispatcher 模块)
↙ ↓ ↘
FS节点1 FS节点2 FS节点3
(自动检测节点健康,故障自动剔除)
🌐 3. SBC(Session Border Controller)
企业与运营商之间的边界控制
拓扑隐藏、协议适配、安全防护
📞 4. 运营商级平台
大规模 SIP Trunk 接入
LCR(最低成本路由)
计费、话单(CDR)
🌍 5. WebRTC 网关
浏览器(WebRTC/WSS)
↓
OpenSIPS(proto_wss)
↓
传统 SIP 设备 / FreeSWITCH
🔒 6. 防欺诈 / 安全防护
防暴力注册攻击(pike 模块)
实时欺诈检测
IP 黑白名单
与 RTPEngine 配合处理媒体
OpenSIPS 不处理 RTP,需外挂媒体引擎
呼叫流程:
主叫 SIP UA ←──信令──→ OpenSIPS ←──信令──→ 被叫 SIP UA
↕
RTPEngine(控制)
↕
主叫 SIP UA ←──────RTP 媒体流──────────────→ 被叫 SIP UA
# opensips.cfg 中调用 RTPEngine
route[MEDIA] {
rtpengine_offer("trust-address replace-origin replace-session-connection");
t_relay();
}
高可用架构
┌─────────────────┐
│ 负载均衡器 │
│ (Keepalived) │
└────────┬────────┘
┌───────────┴───────────┐
↓ ↓
┌──────────────┐ ┌──────────────┐
│ OpenSIPS-1 │ │ OpenSIPS-2 │
│ (Active) │ │ (Standby) │
└──────────────┘ └──────────────┘
↓ ↓
┌───────────────────────────────────┐
│ 共享数据库 │
│ MySQL + Redis(状态同步) │
└───────────────────────────────────┘
opensips-cp:官方 Web 控制台,实时监控
cluster 模块:多节点状态同步
dialog 复制:对话状态跨节点同步
安装与启动
# Ubuntu 安装
apt install opensips opensips-mysql-module opensips-rtpengine-module
# 启动
systemctl start opensips
# 使用 opensipsctl 管理
opensipsctl start
opensipsctl fifo ps # 查看进程
opensipsctl fifo get_statistics all # 查看统计
监控与统计
# 实时统计查询
opensipsctl fifo get_statistics dialog: # 当前通话数
opensipsctl fifo get_statistics registrar: # 注册数
opensipsctl fifo get_statistics tm: # 事务统计
# 输出示例
dialog:active_dialogs = 1243
registrar:registered_users = 8921
tm:UAS_transactions = 52341
典型部署架构(生产级)
运营商 SIP Trunk
↓
┌─────────────┐
│ OpenSIPS │ ← SBC + 路由 + 鉴权 + 负载均衡
│ 集群 │
└──────┬──────┘
↓
┌──────┴───────────────┐
↓ ↓
FreeSWITCH集群 Asterisk集群
(复杂媒体处理) (PBX功能)
↓
AI 语音机器人
(ASR + LLM + TTS)
总结
一句话总结:OpenSIPS 是 SIP 世界的"高速交换机",专注做信令路由和流量调度,以极高性能和灵活性著称,是构建电信级 VoIP 平台的核心组件。通常与 FreeSWITCH(媒体处理)+ RTPEngine(RTP代理)组合使用,形成完整的生产级通信平台。