什么是 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

FreeSWITCH

Kamailio

定位

SIP 代理/路由

媒体软交换

SIP 代理/路由

媒体处理

❌(需外挂)

✅ 原生支持

❌(需外挂)

并发能力

极高(万级)

高(千级)

极高(万级)

路由灵活性

⭐⭐⭐⭐⭐

⭐⭐⭐

⭐⭐⭐⭐⭐

配置方式

脚本语言(类C)

XML

脚本语言(类C)

Web 管理

✅ OpenSIPS-CP

❌ 无官方

❌ 无官方

学习曲线

较陡

中等

最陡

社区活跃度

⭐⭐⭐⭐

⭐⭐⭐⭐

⭐⭐⭐⭐

💡 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+ 模块

核心功能模块

模块

功能

registrar

SIP 注册服务

usrloc

用户位置存储

auth / auth_db

SIP 鉴权

tm

SIP 事务管理

sl

无状态响应

rr

Record-Route 处理

dialog

对话(Dialog)管理

路由与负载均衡

模块

功能

dispatcher

负载均衡 / 故障转移

load_balancer

基于容量的负载均衡

lcr

最低费率路由

drouting

动态路由

媒体与 NAT

模块

功能

rtpproxy

对接 RTPProxy

rtpengine

对接 RTPEngine(推荐)

nathelper

NAT 穿透辅助

mediaproxy

媒体代理

数据库与存储

模块

功能

db_mysql

MySQL 支持

db_postgres

PostgreSQL 支持

cachedb_redis

Redis 缓存

db_mongodb

MongoDB 支持

高级特性

模块

功能

call_center

呼叫中心队列

b2b_entities

B2BUA 模式

presence

SIP Presence / BLF

pike

防 DDoS / 限流

fraud_detection

欺诈检测

proto_wss

WebSocket/WebRTC


典型应用场景

☎️ 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)

总结

特点

说明

🚀 超高并发

单机轻松处理 万级 SIP 事务/秒

🔧 极度灵活

脚本控制每一条 SIP 消息的处理逻辑

📦 功能丰富

120+ 模块覆盖各种场景

🌐 WebRTC 支持

原生 WSS 支持,浏览器直接接入

🏢 生产验证

全球大型运营商、呼叫中心广泛使用

⚠️ 无媒体处理

需配合 RTPEngine/FreeSWITCH 处理媒体

一句话总结:OpenSIPS 是 SIP 世界的"高速交换机",专注做信令路由和流量调度,以极高性能和灵活性著称,是构建电信级 VoIP 平台的核心组件。通常与 FreeSWITCH(媒体处理)+ RTPEngine(RTP代理)组合使用,形成完整的生产级通信平台。