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

kamailio-osp模块

该文档详细讲解了如何在Kamailio中配置和使用OSP模块(Open Settlement Protocol Module),以实现基于ETSI标准的安全多边对等互联(Secure Multi-Lateral Peering)。以下是核心内容的总结:


1. 模块功能

OSP模块允许Kamailio实现以下关键功能:

  • 发送对等授权请求:向对等服务器(Peering Server)请求路由授权。
  • 验证授权令牌:校验SIP消息(如INVITE)中的数字签名令牌(OSP-Auth-Token),确保合法性。
  • 报告计费信息:在通话结束时(BYE消息),向对等服务器发送使用时长等计费数据。

2. 依赖项

  • 必需模块sl(无状态应答)、tm(事务管理)、rr(路由记录)、textops(文本操作)等。
  • OSP Toolkit:需预先安装此工具包(下载地址),用于处理加密、令牌生成等底层操作。

3. 核心配置参数

3.1 对等服务器配置
  • sp1_uri, sp2_urisp16_uri
    定义对等服务器的URL,支持HTTP/HTTPS。例如:
    modparam("osp", "sp1_uri", "https://[1.2.3.4]:1443/osp")
    
  • sp1_weight, sp2_weight
    负载均衡权重,数值越高流量分配越多。例如:
    modparam("osp", "sp1_weight", 2000)  # 主服务器
    modparam("osp", "sp2_weight", 1000)  # 备用服务器
    
3.2 设备标识
  • device_ip:Kamailio的IP地址(需用方括号包裹,如[192.168.1.1])。
  • device_port:SIP监听端口(默认5060)。
3.3 安全配置
  • private_key, local_certificate, ca_certificates
    指定SSL/TLS证书文件路径,用于加密通信和令牌签名验证。
  • token_format:令牌验证模式(0=仅签名令牌,1=仅无签名令牌,2=两者皆可)。
3.4 连接与重试
  • retry_limit:连接失败后的最大重试次数(默认2次)。
  • retry_delay:重试间隔(秒,默认1秒)。
  • timeout:等待对等服务器响应的超时时间(毫秒,默认10秒)。
3.5 路由与号码处理
  • max_destinations:从对等服务器获取的最大路由目标数(默认5个)。
  • use_rpid_for_calling_number:是否优先使用Remote-Party-ID中的主叫号码(默认1=是)。

4. 关键函数

4.1 请求处理
  • checkospheader()
    检查SIP消息中是否存在OSP-Auth-Token头部。
  • validateospheader()
    验证令牌的有效性(如签名、有效期),返回成功(1)或失败(-1)。
4.2 路由决策
  • requestosprouting()
    向对等服务器请求路由信息,并重写SIP URI为目标地址。
    示例
    if (requestosprouting()) {xlog("路由成功,准备转发");
    } else {sl_send_reply("403 Forbidden");
    }
    
4.3 路由准备与号码转换
  • prepareosproute()
    在分支路由(BRANCH_ROUTE)中准备具体路由信息。
  • checkcallingtranslation()
    检查主叫号码是否被转换,并更新Remote-Party-ID
4.4 计费报告
  • reportospusage(reason)
    在BYE消息中报告通话时长,参数reason标识释放方(0=主叫端,1=被叫端)。

5. 典型配置流程

  1. 配置对等服务器:指定至少一个对等服务器地址(sp1_uri)。
  2. 设置证书和密钥:确保SSL/TLS文件路径正确。
  3. 定义路由逻辑:在Kamailio脚本中调用requestosprouting()获取路由。
  4. 验证令牌:在接收INVITE时使用validateospheader()校验合法性。
  5. 处理计费:在BYE消息中触发reportospusage()上报数据。

6. 常见问题

  • Q1:如何实现多对等服务器的负载均衡?
    通过sp1_weightsp2_weight设置权重,流量按比例分配。

  • Q2:令牌验证失败的可能原因?
    证书配置错误、令牌过期、或对等服务器未授权。

  • Q3:如何调试OSP模块?
    启用Kamailio日志(xlog),观察与对等服务器的交互及错误码。


总结

该文档为Kamailio管理员提供了完整的OSP模块配置指南,涵盖服务器连接、安全认证、路由决策及计费上报的全流程。正确配置后,Kamailio可通过标准化的OSP协议实现安全、高效的多边对等互联。

在Ubuntu上安装和配置OSP Toolkit是使用Kamailio OSP模块的前提条件。以下是详细的安装流程:


1. 环境准备

确保系统已安装以下依赖项:

  • GCC编译器:用于编译源代码。
  • OpenSSL开发库:提供加密支持。
  • Git:用于从代码仓库获取OSP Toolkit。

安装命令:

sudo apt update
sudo apt install build-essential libssl-dev git

2. 下载OSP Toolkit

从SourceForge获取OSP Toolkit的源代码:

git clone https://git.code.sf.net/p/osp-toolkit/code osp-toolkit
cd osp-toolkit

3. 编译OSP Toolkit

进入源代码目录并执行以下步骤:

3.1 配置编译选项

运行configure脚本,生成Makefile:

./configure

如果需要指定安装路径(如/usr/local/osp),可以使用--prefix参数:

./configure --prefix=/usr/local/osp
3.2 编译代码

使用make命令编译源代码:

make
3.3 安装

将编译生成的文件安装到系统目录:

sudo make install

4. 配置环境变量

为了在系统中使用OSP Toolkit,需要将其路径添加到环境变量中。

4.1 编辑环境变量文件

打开~/.bashrc文件:

nano ~/.bashrc
4.2 添加OSP路径

在文件末尾添加以下内容(假设安装路径为/usr/local/osp):

export PATH=$PATH:/usr/local/osp/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/osp/lib
4.3 使配置生效

保存文件并执行以下命令:

source ~/.bashrc

5. 验证安装

运行以下命令,检查OSP Toolkit是否安装成功:

osp-toolkit-version

如果显示版本信息,说明安装成功。


6. 生成证书文件

OSP模块需要以下证书文件:

  • 私钥文件pkey.pem
  • 本地证书localcert.pem
  • CA证书cacert.pem
6.1 使用OpenSSL生成证书

运行以下命令生成证书:

openssl genpkey -algorithm RSA -out pkey.pem
openssl req -new -key pkey.pem -out localcert.csr
openssl x509 -req -days 365 -in localcert.csr -signkey pkey.pem -out localcert.pem
openssl req -new -x509 -days 365 -key pkey.pem -out cacert.pem
6.2 将证书文件复制到Kamailio配置目录

假设Kamailio配置目录为/usr/local/etc/kamailio

sudo cp pkey.pem localcert.pem cacert.pem /usr/local/etc/kamailio/

7. 配置Kamailio使用OSP Toolkit

在Kamailio配置文件中(如kamailio.cfg),添加以下参数:

modparam("osp", "private_key", "/usr/local/etc/kamailio/pkey.pem")
modparam("osp", "local_certificate", "/usr/local/etc/kamailio/localcert.pem")
modparam("osp", "ca_certificates", "/usr/local/etc/kamailio/cacert.pem")

8. 测试

启动Kamailio并测试OSP模块功能:

sudo kamailio -DD -E -e

检查日志文件,确保OSP模块加载正常且无错误。


总结

通过以上步骤,您可以在Ubuntu上成功安装和配置OSP Toolkit,并使其与Kamailio协同工作。如果在安装过程中遇到问题,请检查依赖项是否齐全,并确保证书文件路径正确。

根据错误信息,git clone 命令无法找到指定的 OSP Toolkit 仓库。这可能是因为仓库地址发生了变化,或者 SourceForge 的 Git 服务不再支持该仓库。以下是解决该问题的步骤:


1. 检查仓库地址

访问 OSP Toolkit 的 SourceForge 页面 确认仓库地址是否更新。如果页面提供了新的 Git 地址,请使用新地址。


2. 使用替代下载方式

如果 Git 仓库不可用,可以尝试以下方法获取 OSP Toolkit:

2.1 下载压缩包

在 SourceForge 页面上,查找并下载 OSP Toolkit 的压缩包(如 .tar.gz.zip 文件)。
下载链接示例:
https://sourceforge.net/projects/osp-toolkit/files/

2.2 解压压缩包

下载完成后,解压文件:

tar -xvzf osp-toolkit-<version>.tar.gz
cd osp-toolkit-<version>

3. 手动编译和安装

如果下载的是源代码压缩包,可以按照以下步骤编译和安装:

3.1 安装依赖项

确保系统已安装编译工具和 OpenSSL 开发库:

sudo apt update
sudo apt install build-essential libssl-dev
3.2 配置和编译

进入解压后的目录,运行以下命令:

./configure --prefix=/usr/local/osp
make
sudo make install
3.3 配置环境变量

将 OSP Toolkit 的路径添加到环境变量中:

echo 'export PATH=$PATH:/usr/local/osp/bin' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/osp/lib' >> ~/.bashrc
source ~/.bashrc

4. 验证安装

运行以下命令,检查 OSP Toolkit 是否安装成功:

osp-toolkit-version

如果显示版本信息,说明安装成功。


5. 使用替代仓库(如果存在)

如果 OSP Toolkit 的代码已迁移到其他平台(如 GitHub),可以尝试从新仓库克隆代码。例如:

git clone https://github.com/<new-repo>/osp-toolkit.git

总结

如果 Git 仓库不可用,可以通过下载压缩包或查找替代仓库的方式获取 OSP Toolkit 的源代码。安装完成后,确保正确配置环境变量并验证安装结果。如果问题仍然存在,请检查 SourceForge 页面或联系项目维护者获取最新信息。

在这里插入图片描述
根据你提供的文件结构,这似乎是 OSP Toolkit 的源代码解压后的目录。以下是目录内容的分析及安装步骤:


1. 文件结构解析

目录/文件说明
bin可能存放编译生成的可执行文件(如enroll工具)。
crypto加密相关代码或库(如与OpenSSL集成的部分)。
enroll证书生成工具源代码,用于生成OSP所需的私钥和证书。
include头文件(.h),供其他模块引用。
lib编译生成的库文件(如.so.a)。
srcOSP Toolkit 核心源代码。
test测试代码或单元测试。
LICENSE.txt项目许可证信息。
README.txt项目基本说明和快速使用指南。
RELNOTES.txt版本更新日志和兼容性说明。

2. 安装步骤

2.1 安装依赖项

确保系统已安装编译工具和 OpenSSL 开发库:

sudo apt update
sudo apt install build-essential libssl-dev
2.2 编译源代码

进入解压后的目录,执行以下命令:

# 生成配置脚本(如果目录中没有configure文件)
autoreconf -i# 配置编译选项(指定安装路径)
./configure --prefix=/usr/local/osp# 编译代码
make# 安装到系统目录
sudo make install
2.3 生成证书文件

使用 enroll 工具生成 OSP 所需的私钥和证书:

cd enroll
make          # 编译enroll工具
./enroll      # 生成证书文件(pkey.pem, localcert.pem, cacert.pem)

将生成的证书文件复制到 Kamailio 的配置目录:

sudo cp pkey.pem localcert.pem cacert.pem /usr/local/etc/kamailio/
2.4 配置环境变量

将 OSP Toolkit 的路径添加到系统环境变量:

echo 'export PATH=$PATH:/usr/local/osp/bin' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/osp/lib' >> ~/.bashrc
source ~/.bashrc
2.5 验证安装

运行以下命令检查是否成功:

osp-toolkit-version   # 显示版本信息

3. Kamailio 集成

在 Kamailio 配置文件(kamailio.cfg)中添加以下参数:

modparam("osp", "private_key", "/usr/local/etc/kamailio/pkey.pem")
modparam("osp", "local_certificate", "/usr/local/etc/kamailio/localcert.pem")
modparam("osp", "ca_certificates", "/usr/local/etc/kamailio/cacert.pem")

4. 常见问题解决

Q1: 编译时报错缺少头文件或库
  • 原因:未安装 OpenSSL 开发库。
  • 解决:重新安装依赖项:
    sudo apt install libssl-dev
    
Q2: enroll 工具无法生成证书
  • 原因:权限不足或依赖库未正确链接。
  • 解决:以 root 权限运行或检查 LD_LIBRARY_PATH
    sudo ./enroll
    
Q3: Kamailio 无法加载 OSP 模块
  • 原因:证书路径错误或权限问题。
  • 解决:检查证书文件路径并确保 Kamailio 有读取权限:
    sudo chmod 644 /usr/local/etc/kamailio/*.pem
    

总结

通过以上步骤,你可以手动编译并安装 OSP Toolkit,然后将其集成到 Kamailio 中。如果在编译或运行过程中遇到问题,请参考 README.txtRELNOTES.txt 中的说明,或检查日志文件以定位具体错误。

相关文章:

kamailio-osp模块

该文档详细讲解了如何在Kamailio中配置和使用OSP模块&#xff08;Open Settlement Protocol Module&#xff09;&#xff0c;以实现基于ETSI标准的安全多边对等互联&#xff08;Secure Multi-Lateral Peering&#xff09;。以下是核心内容的总结&#xff1a; 1. 模块功能 OSP模…...

【TensorFlow】T1:实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 1、设置GPU import tensorflow as tf gpus tf.config.list_physical_devices("GPU")if gpus:gpu0 gpus[0]tf.config.experimental.set_memory_g…...

Rapidjson 实战

Rapidjson 是一款 C 的 json 库. 支持处理 json 格式的文档. 其设计风格是头文件库, 包含头文件即可使用, 小巧轻便并且性能强悍. 本文结合样例来介绍 Rapidjson 一些常见的用法. 环境要求 有如何的几种方法可以将 Rapidjson 集成到您的项目中. Vcpkg安装: 使用 vcpkg instal…...

【React】受控组件和非受控组件

目录 受控组件非受控组件基于ref获取DOM元素1、在标签中使用2、在组件中使用 受控组件 表单元素的状态&#xff08;值&#xff09;由 React 组件的 state 完全控制。组件的 state 保存了表单元素的值&#xff0c;并且每次用户输入时&#xff0c;React 通过事件处理程序来更新 …...

Ollama+deepseek+Docker+Open WebUI实现与AI聊天

1、下载并安装Ollama 官方网址&#xff1a;Ollama 安装好后&#xff0c;在命令行输入&#xff0c; ollama --version 返回以下信息&#xff0c;则表明安装成功&#xff0c; 2、 下载AI大模型 这里以deepseek-r1:1.5b模型为例&#xff0c; 在命令行中&#xff0c;执行&…...

DEEPSEKK GPT等AI体的出现如何重构工厂数字化架构:从设备控制到ERP MES系统的全面优化

随着深度学习&#xff08;DeepSeek&#xff09;、GPT等先进AI技术的出现&#xff0c;工厂的数字化架构正在经历前所未有的变革。AI的强大处理能力、预测能力和自动化决策支持&#xff0c;将大幅度提升生产效率、设备管理、资源调度以及产品质量管理。本文将探讨AI体&#xff08…...

阿莱(arri)mxf文件变0字节的恢复方法

阿莱(arri)是专业级的影视产品软硬件供应商&#xff0c;很多影视作品都是使用阿莱(arri)的设备拍摄出来的。总体上来讲阿莱(arri)的文件格式有mov和mxf两种&#xff0c;这次恢复的是阿莱(arri)的mxf&#xff0c;机型是arri mini,素材保存在一个8t的硬盘上&#xff0c;使用的是e…...

初识 Node.js

在当今快速发展的互联网技术领域&#xff0c;Node.js 已经成为了一个非常流行且强大的平台。无论是构建高性能的网络应用、实时协作工具还是微服务架构&#xff0c;Node.js 都展示了其独特的优势。本文将带您走进 Node.js 的世界&#xff0c;了解它的基本概念、核心特性以及如何…...

debug-vscode调试方法

debug - vscode gdb调试指南 文章目录 debug - vscode gdb调试指南前言一、调试代码二、命令查看main反汇编查看寄存器打印某个变量打印寄存器&#xff0c;如pc打印当前函数栈信息&#xff08;当前执行位置&#xff09;打印程序栈局部变量x命令的语法如下所示&#xff1a;打印某…...

Cypher进阶(函数、索引)

文章目录 Cypher进阶Aggregationcount()函数统计函数collect()函数 unwindforeachmergeunionload csvcall 函数断言函数all()any()~~exists()~~is not nullnone()single() 标量函数coalesce()startNode()/endNode()id()length()size() 列表函数nodes()keys()range()reduce() 数…...

XML Schema 数值数据类型

XML Schema 数值数据类型 引言 XML Schema 是一种用于描述 XML 文档结构的语言。它定义了 XML 文档中数据的有效性和结构。在 XML Schema 中,数值数据类型是非常重要的一部分,它定义了 XML 文档中可以包含的数值类型。本文将详细介绍 XML Schema 中常用的数值数据类型,以及…...

Window获取界面空闲时间

‌GetLastInputInfo‌是一种Windows API函数&#xff0c;用于获取上次输入操作的时间。 该函数通过LASTINPUTINFO结构返回最后一次输入事件的时间。 原型如下 BOOL WINAPI GetLastInputInfo(PLASTINPUTINFO plii);那么可以利用GetLastInputInfo来得到界面没有操作的时长 uint…...

Java进阶(vue基础)

目录 1.vue简单入门 ?1.1.创建一个vue程序 1.2.使用Component模板(组件&#xff09; 1.3.引入AXOIS ?1.4.vue的Methods&#xff08;方法&#xff09; 和?compoted&#xff08;计算&#xff09; 1.5.插槽slot 1.6.创建自定义事件? 2.Vue脚手架安装? 3.Element-UI的…...

Mac电脑上好用的压缩软件

在Mac电脑上&#xff0c;有许多优秀的压缩软件可供选择&#xff0c;这些软件不仅支持多种压缩格式&#xff0c;还提供了便捷的操作体验和强大的功能。以下是几款被广泛推荐的压缩软件&#xff1a; BetterZip 功能特点&#xff1a;BetterZip 是一款功能强大的压缩和解压缩工具&a…...

Ubuntn24.04安装

1.镜像下载 https://cn.ubuntu.com/download Ubuntu 24.04.1 (Noble Numbat) 进入下载即可 2.安装系统 打开虚拟机 选择语言 输入用户名和密码 安装ssh 安装完成重启即可。 3.可能出现的问题 关于Ubuntu系统虚拟机出现频繁闪屏&#xff0c;移动和屏幕适应大小问题_vmware安…...

基于ansible部署elk集群

ansible部署 ELK部署 ELK常见架构 &#xff08;1&#xff09;ElasticsearchLogstashKibana&#xff1a;这种架构是最常见的一种&#xff0c;也是最简单的一种架构&#xff0c;这种架构通过Logstash收集日志&#xff0c;运用Elasticsearch分析日志&#xff0c;最后通过Kibana中…...

解锁.NET Fiddle:在线编程的神奇之旅

在.NET 开发的广袤领域中&#xff0c;快速验证想法、测试代码片段以及便捷地分享代码是开发者们日常工作中不可或缺的环节。而.NET Fiddle 作为一款卓越的在线神器&#xff0c;正逐渐成为众多.NET 开发者的得力助手。它打破了传统开发模式中对本地开发环境的依赖&#xff0c;让…...

记录pve中使用libvirt创建虚拟机

pve中创建虚拟机 首先在pve网页中创建一个linux虚拟机&#xff0c;我用的是debian系统&#xff0c;过程省略 注意虚拟机cpu类型要设置为host 检查是否支持虚拟化 ssh分别进入pve和debian虚拟机 检查cpu是否支持虚拟化 egrep --color vmx|svm /proc/cpuinfo # 结果高亮显示…...

【HTML性能优化】提升网站加载速度:GZIP、懒加载与资源合并

系列文章目录 01-从零开始学 HTML&#xff1a;构建网页的基本框架与技巧 02-HTML常见文本标签解析&#xff1a;从基础到进阶的全面指南 03-HTML从入门到精通&#xff1a;链接与图像标签全解析 04-HTML 列表标签全解析&#xff1a;无序与有序列表的深度应用 05-HTML表格标签全面…...

三维空间全局光照 | 及各种扫盲

Lecture 6 SH for diffuse transport Lecture 7关于 SH for glossy transport 三维空间全局光照 diffuse case和glossy case的区别 在Lambertian模型中&#xff0c;BRDF是一个常数 diffuse case 跟outgoing point无关 glossy case 跟outgoing point有关 &#xff08;Gloss…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...

FOPLP vs CoWoS

以下是 FOPLP&#xff08;Fan-out panel-level packaging 扇出型面板级封装&#xff09;与 CoWoS&#xff08;Chip on Wafer on Substrate&#xff09;两种先进封装技术的详细对比分析&#xff0c;涵盖技术原理、性能、成本、应用场景及市场趋势等维度&#xff1a; 一、技术原…...

理想汽车5月交付40856辆,同比增长16.7%

6月1日&#xff0c;理想汽车官方宣布&#xff0c;5月交付新车40856辆&#xff0c;同比增长16.7%。截至2025年5月31日&#xff0c;理想汽车历史累计交付量为1301531辆。 官方表示&#xff0c;理想L系列智能焕新版在5月正式发布&#xff0c;全系产品力有显著的提升&#xff0c;每…...

多模态大语言模型arxiv论文略读(112)

Assessing Modality Bias in Video Question Answering Benchmarks with Multimodal Large Language Models ➡️ 论文标题&#xff1a;Assessing Modality Bias in Video Question Answering Benchmarks with Multimodal Large Language Models ➡️ 论文作者&#xff1a;Jea…...

vue3 手动封装城市三级联动

要做的功能 示意图是这样的&#xff0c;因为后端给的数据结构 不足以使用ant-design组件 的联动查询组件 所以只能自己分装 组件 当然 这个数据后端给的不一样的情况下 可能组件内对应的 逻辑方式就不一样 毕竟是 三个 数组 省份 城市 区域 我直接粘贴组件代码了 <temp…...