FreeSWITCH开源介绍

简介: FreeSWITCH架构设计,灵活、开放、可扩展的开发方式,支持集群特点,对多种协议的可支持,对高级SIP特性的可支持等特性,非常适合用来商业级的通信业务开发。

FreeSWITCH架构设计,灵活、开放、可扩展的开发方式,支持集群特点,对多种协议的可支持,对高级SIP特性的可支持等特性,非常适合用来商业级的通信业务开发。

信令加密

为了使用SSL/TLS加密,必须在FreeSWITCH环境下,编译OpenSSL库。另外,需要制作CA和服务器证书。

// 安装Openssl

sudo apt-get openssl libssl-dev

// 重新编译Freeswitch

./configure --with-opensslmake && make install

// Freeswitch提供了一个简单的脚本可以帮助用户证书,生成的证书和密钥会自动保存到conf/ssl/文件夹。

// 制作CA证书(cafile.pem),统一使用主机名或IP作为CommonName的参数gentls_cert setup -cn pbx.freeswitch.org -alt DNS:pbx.freeswitch.org -org freeswitch.org

// 制作服务器证书(agent.pem)

gentls_cert create_server -cn 10.170.103.239 -alt DNS:10.170.103.239 -org 10.170.103.239

// 启用SSL/TLS,有两种配置形式:

// 一、修改全局配置vars.conf.xml,则profile从这里获取具体配置

 // 其他相关参数    

// 二、修改单独的profile,也可以配合使用vars.conf.xml,比如sip_profiles/internal.conf.xml

// 其他可选相关参数\

// 只启用TLS端口\   // 附加参数\   // 可选支持私钥加密\   // 检查证书有效期\   // 检查策略\  // 检查对端证书的严格程度\    // 指定检查特殊inbound用户组

导入根证书到客户端

SSL/TLS加密通信要求客户端必须验证服务端的证书,反之则可以不作要求。客户端对服务端进行证书验证的严格程度也是可以控制的。这里必须把服务端证书的根证书添加到客户端的信任列表中。

Windows操作系统下:复制CA证书并修改后缀名为.crt,双击弹出证书安装对话框,按照提示进行安装即可。

Ubuntu下:cat cafile.pem >> /etc/ssl/certs/ca-certificates.crt

4.1.3 使用SSLSSL加密工作类似于一种协商机制,它通过网站或基于SSL服务端协商来实现加密。使用一个第三方来验证安全证书,然后在发送方和接收方之间使用这个安全证书来交换信息。理论上,基于公共哈希和私有哈希的安全证书应该加载到电话本身和服务器端。通常情况下,SSLv23 + SRTP是对防火墙支持最友好的,也是相对比较容易在Freeswitch上配置的,支持了大部分客户端的加密和大部分的SIP终端。

若要启用SSL加密,只需修改TLS Version为sslv2,sslv3,sslv23,比如vars.conf.xml中 或profile中

4.1.4 使用TLSTLS是另外一种加密机制,支持建立安全信令。它看起来是相对比较成熟的策略,对所有TCP连接的数据加密,并在会话中一直维持这个连接。若要启用TLS加密,只需修改TLS Version为tlsv1,tlsv1.1,tlsv1.2,比如vars.conf.xml中或profile中使用客户端验证。

媒体加密

4.2.1 使用SRTPSRTP定义了发送和接收RTP的方法,在这个方法中,使用认证信息和集成方法来保护RTP数据。它支持单播和多播程序,由于它是一个比较老的方式并且由一些主流IP通信厂家开发,逐渐成为大部分标准设备必须支持的加密方式。SRTP通过SIP在呼叫创建过程中进行加密协商,SIP双方都必须同意支持RTP加密,通过交换密钥对SIP包加密。SRTP的密钥交换通过控制信道完成,通过这些信息对语音流加密。注意,除非用户开启了SIP数据的加密和明确SRTP的密钥已经启用,为了实现终端和Freeswitch完全的安全连接,用户应该使用SIP加密和SRTP加密。

如果仅开启了SRTP,则仅对RTP包的净荷数据类型加密。可以从拨号计划中设置基于每个呼叫开启的SRTP加密,通过以下方式设置:


通道变量rtp_secure_media的值有三种:true—强制,false—禁止,optional—可选。

也可以在用户directory中的dial-string中设置。 <paramname="dial-string" value="{sip_secure_media={regex({sofia_contact(dialeduser@{dialed_user}@dialeduser@{dialed_domain})}|transport=tls)},presence_id=dialeduser@{dialed_user}@dialeduser@{dialed_domain}}{sofia_contact({dialed_user}@${dialed_domain})}"/>

使用客户端验证,经过SIP消息追踪及分析,SDP加密媒体协商成功,获取的相关SIP消息及日志结果如下:

m=audio 4002 RTP/SAVP 117 107 9 8 0 110 96 97 3 18 101

a=crypto:1 AES_CM_128_HMAC_SHA1_80

a=crypto:2 AES_CM_128_HMAC_SHA1_32

使用ZRTPZRTP是一个相对新的方法,使用密钥自动协商,极大简化了对RTP呼叫的加密设置和操作过程。它也添加了更多的优点,不再依赖于服务器端的加密。在服务器之间也可以进行加密,并且双方服务器都不会感觉到正在对RTP流媒体的内容加密。因为极大地降低了它们之间的依赖,这样的方式提升了服务器的运行速度。

FreeSWITCH的开发方式

FreeSWITCH的开发方式较为多样,主要有以下几种:

 通过修改dialplan实现业务定制,不需要修改代码,编写脚本语言即可。

 通过ESL方式实现业务定制,不需要修改代码,只需要编写脚本语言即可。

 通过增加/修改mod实现业务定制和增加,当然也可以只实现application。

 需要修改一定的核心代码。从上到下难易程度逐渐增加,使用概率递减,其中第一条不需要专业的研发人员开发,技服,代理商,甚至客户都可以编写自己的dialplan,进行业务开发组合。

开发方式有点:

较灵活,有多种方式可以进行业务开发,不一定需要编程;

较开放,支持多种开放接口,包括XML,LUA,Javascript,ESL等,适合定制开发;业务耦合较小,开发人员可以各自独立开发模块,并行开发效率较高

SIPP工具

安装依赖库apt-get install openssl libssl-dev libssl1.0.0 libssl0.9.8 pcaputils libssl-dev libncursesw5-dev libncurses5-dev libcap-dev make gcc bison flex build-essential libncurses-dev libpcap-dev sip-tester

下载源代码wget sourceforge.net/projects/si…编译安装

无TLS和密码验证支持:make

有安全传输和认证的方式支持:这种情况需要你的系统已经安装了OpenSSL

make ossl

有PCAP播放、无认证支持:

make pcapplay

有PCAP播放和认证支持:

make pcapplay_ossl

验证用内置的测试场景模拟一个SIP客户端和服务端.\

./sipp -sn uas\

./sipp -sn uac 127.0.0.1\

sipp有几个内置场景,可以查看sipp的帮助文件

脚本

导出内置脚本,根据需要的场景修改。

./sipp -sd uac > uac.xml

./sipp -sd uas > uas.xml

Valgrind工具

apt-getinstall libc6-dbg gdb valgrind

Valgrind是一个性能工具,用于提高软件稳定性。Valgrind由5个工具组成cachegrind,callgrind,massif,helgrind 和memorycheck。

Cachegrind查看进程cache信息;

Callgrind 查看函数调用关系;

Massif 详细查看进程分配的内存值;

Helgrind 调试线程工具 检查各种同步错误(POSIX 和 PThreadAPI);

Memory check 内存检测工具。

多线程程序GDB调试方法

第一步,首先获得进程的所有线程id: ps -eLf | grep 进程名

第二步,通过gdb逐个连接线程 gdb attach <线程id> (需要确保单板上有可执行的gdb程序,如果没有传一个上去) 如 gdb attach 1401

第三步,连接上之后,使用bt full查看调用栈 bt full 然后输入q退出,进程继续执行。使用同样方法连接其他线程。

my.oschina.net/andywang198…

通过GDB代码学习:

【启动调试】gdb freeswitch  【设置断点】b mod_rtmp.c:418

【运行】r

【回到gdb】ctrl+c

【继续运行】c

NMON性能数据采集工具

apt-get install nmon

./nmon -f -t -r test -s 10 -c 3600

分析定位

apt-get install graphviz

apt-get install kcachegrind

gprof2dot github.com/jrfonseca/g…valgrind --tool=callgrind --instr-atstart=no --collect-systime=yes --collect-bus=yes ./freeswitch -vg –nosql参数说明--tool=callgrind 使用callgrind工具 --instr-atstart=no 启动时不进trace --collect-systime收集系统时间

以下是过程控制

callgrind_control -i on 开启跟踪

callgrind_control -d dump跟踪数据

callgrind_control -i off 关闭跟踪

kcachegrind 是一个解析跟踪数据 生成图像的工具

kcachegrind callgrind.out.12208gprof2dot.py -f callgrind callgrind.out.* |dot -Tpng -o report.png

统计网络流量 iptraf -u -d p49p1

FreeSWITCH性能规格

单台服务器规格

vCPU:2P8C 核工作频率:2200 MHz内存:8G网口:4GE

呼叫性能

最大会话并发数:10000CAPS:100

说明

FreeSWITCH单台服务器最大支持2w用户,100caps呼叫,1w最大会话数;

CPU利用率为44%,内存利用率为65%,内存是较为紧缺的资源。

媒体性能 G.711a/μ 600路G.729ab 300路iLBC 300路

可靠性分布式

支持双机冗余,基于HA软件实现,且支持呼叫持久化(性能会有一定影响),双机切换后,呼叫能接续; 支持集群部署,通过OpenSIPS进行分发,实现多个Freeswitch之间负荷分担,支持集群可扩展。

协议能力&接口

SIP、Skype、H323、IAX及Google Talk、SCCP(Skinny Call Control Protocol与思科话机互通);通过T1/E1扩展卡支持模拟话机

安全性

支持TLS信令加密和SRTP媒体加密SIP协议支持协议与接口防攻击

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
Linux 开发工具 git
FreeSWITCH小白入门之freeswitch安装篇
技术小白,今天带领大家一起freeswitch源码编译安装。我的上一篇文章已经搭建好了运行环境(centos7-Minimal),有人会说fs官方不是说在debian8下运行最稳定吗?我只能说,我个人爱好而已!
2768 0
|
Web App开发 存储 编解码
Freeswitch关于支持jsip的配置
1、freeswitch安装过程(安装过程省略,运行环境为centos7,freeswitch1.6.5)
|
JSON Ubuntu Linux
FreeSWITCH安装
FreeSWITCH
1971 0
FreeSWITCH安装
|
编解码 网络协议 安全
freeswitch是什么
FreeSwitch是一个开源的电话软交换平台,是一个跨平台的/伸缩性极好的/免费的/多协议的电话软交换平台。同时FreeSWITCH是一个电话的软交换解决方案,包括一个软电话和软交换机用以提供语音和聊天的产品驱动。FreeSWITCH 可以用作交换机引擎、PBX、多媒体网关以及多媒体服务器等。
freeswitch是什么
|
安全 关系型数据库 MySQL
FreeSwitch的安装
本次安装环境是centos 7, 源码目录是
1437 1
|
Linux Perl
FreeSwitch 一些模块的安装
这里列出来 安装libyuv libvpx opus mod_av 等模块的代码方便大家使用
|
Ubuntu Linux Windows
FreeSWITCH安装需要什么环境
第一个问题需要我们考虑的是 : 我们需要什么样的操作系统 ?
|
网络协议 网络安全 C语言
FreeSWITCH第三方库(其他)的简单介绍(三)
FreeSWITCH使用了大量的第三方库,本文档主要介绍关联相关库的信息: 音频相关库的信息介绍参考:http://www.cnblogs.com/yoyotl/p/5486753.html 视频相关库的信息介绍参考:http://www.cnblogs.com/yoyotl/p/5488890.html   ① ldns dns相关的库。
1937 0
|
JavaScript 前端开发