概述

freeswitch 是一款好用的开源软交换平台。

随着voip客户的发展和运营商网络的升级换代,SBC在对接测试中的应用场景越来越多。

freeswitch通过简单的安装配置即可满足大部分SBC的功能需求。

我们需要有一个稳定版本的fs-sbc的安装过程和配置指南。

在这里记录一下新安装的fs作为sbc的基本配置。

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.10.7

GCC:4.8.5

fs1.10.7安装

freeswitch-1.10.7基础平台的编译安装见文档“freeswitch1.10.7 on CENTOS7编译安装“。

配置方案

FS-SBC的初始配置方案。

删除多余配置

conf/chatplan/default.xml

conf/dialplan/*

conf/directory/*

conf/ivr_menus/*

conf/jingle_profiles/*

conf/mrcp_profiles/*

conf/sip_profile, external-ipv6 external-ipv6.xml internal-ipv6.xml internal.xml

conf/skinny_profiles/*

conf配置

vars.xml

<X-PRE-PROCESS cmd="set" data="default_password=dq.1.2.3.4.warn"/>

<X-PRE-PROCESS cmd="set" data="global_codec_prefs=PCMA,PCMU"/>

<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMA,PCMU"/>

<X-PRE-PROCESS cmd="set" data="console_loglevel=debug"/>

autoload_configs/acl.conf.xml

<list name="list_out" default="deny">

<node type="allow" cidr="1.2.3.4/32"/>

</list>

<list name="list_in" default="deny">

<node type="allow" cidr="1.2.3.4/32"/>

</list>

autoload_configs/log.conf.xml

<param name="rollover" value="104857600"/>

<!-- <param name="maximum-rotate" value="32"/> -->

autoload_configs/modules.conf.xml

<!-- <load module="mod_verto"/> -->

<!-- <load module="mod_conference"/> -->

<load module="mod_translate"/>

autoload_configs/sofia.conf.xml

autoload_configs/switch.conf.xml

<param name="min-idle-cpu" value="20"/>

<param name="max-sessions" value="60000"/>

<param name="sessions-per-second" value="1000"/>

<param name="loglevel" value="debug"/>

<param name="rtp-start-port" value="20000"/>

<param name="rtp-end-port" value="60000"/>

autoload_configs/translate.conf.xml

<profile name="GB-CALLER-IN">

<rule regex="^(12345678)$" replace="$1"/>

</profile>

<profile name="GB-CALLER-OUT">

<rule regex="^\+86([2-9]\d+)$" replace="0$1"/>

<rule regex="^\+86(10\d+)$" replace="0$1"/>

<rule regex="^\+86(1\d+)$" replace="$1"/>

</profile>

<profile name="GB-DEST-IN">

<rule regex="^(1\d+)$" replace="+86$1"/>

<rule regex="^0(\d+)$" replace="+86$1"/>

</profile>

<profile name="GB-DEST-OUT">

<rule regex="^\+86010(12345678)$" replace="$1"/>

</profile>

dialplan/sbc-dp.xml

<include>

<X-PRE-PROCESS cmd="set" data="callout_answer_timeout=60"/>

<X-PRE-PROCESS cmd="set" data="sip_contact_user=SBC001"/>

<context name="out2in">

<extension name="sbc-out2in" continue="true">

<condition field="${acl(${network_addr} list_out)}" expression="true"/>

<condition field="destination_number" expression="^(\d+)$">

<action application="set" data="effective_caller_id_name=_undef_" />

<action application="set" data="effective_caller_id_number=${translate(${caller_id_number} GB-CALLER-IN)}" />

<action application="set" data="destination_number=${translate(${destination_number} GB-DEST-IN)}" />

<action application="set" data="inherit_codec=true"/>

<action application="set" data="sip_copy_custom_headers=false"/>

<action application="set" data="ringback=${cn-ring}"/>

<action application="export" data="nolocal:sip_h_Allow=INVITE,ACK,BYE,CANCEL,REGISTER,INFO,PRACK,SUBSCRIBE,NOTIFY,UPDATE,MESSAGE,REFER"/>

<action application="unset" data="X-FS-Support"/>

<action application="bridge" data="{${as_record_param},sip_h_CSeq=1 INVITE,

sip_contact_user=${effective_caller_id_number},sip_invite_contact_params=user=phone,sip_cid_type=none,

sip_invite_to_params=user=phone,sip_invite_from_params=transport=udp;user=phone,sip_invite_from_uri=${effective_caller_id_number}@1.2.3.4:5066,

sip_invite_params=user=phone,sip_invite_call_id=${sip_call_id}

}sofia/external5066/sip:${destination_number}@1.2.3.4:5060"/>

</condition>

</extension>

</context>

<context name="in2out">

<extension name="sbc-in2out" continue="true">

<condition field="${acl(${network_addr} list_in)}" expression="true"/>

<condition field="destination_number" expression="^\+(\d+)$">

<action application="set" data="effective_caller_id_name=${translate(${caller_id_name} GB-CALLER-OUT)}" />

<action application="set" data="effective_caller_id_number=${translate(${caller_id_number} GB-CALLER-OUT)}" />

<action application="set" data="destination_number=${translate(${destination_number} GB-DEST-OUT)}" />

<action application="set" data="inherit_codec=true"/>

<action application="set" data="sip_copy_custom_headers=false"/>

<action application="bridge" data="{${as_record_param},

sip_invite_params=user=phone,sip_invite_call_id=${sip_call_id}

}sofia/external3060/sip:${destination_number}@1.2.3.4:5080"/>

</condition>

</extension>

</context>

</include>

sip_profiles/external3060.xml

<profile name="external3060">

<param name="user-agent-string" value="sbc001"/>

<param name="username" value="sbc001"/>

<param name="pass-callee-id" value="false"/>

<param name="session-timeout" value="10800"/>

<param name="sip-port" value="3060"/>

<param name="context" value="out2in"/>

<param name="enable-100rel" value="true"/>

<param name="rtp-ip" value="$${local_ip_v4}"/>

<param name="sip-ip" value="$${local_ip_v4}"/>

<param name="ext-rtp-ip" value="$${external_rtp_ip}"/>

<param name="ext-sip-ip" value="$${external_sip_ip}"/>

sip_profiles/external5066.xml

<profile name="external5066">

<param name="user-agent-string" value="sbc001"/>

<param name="username" value="sbc001"/>

<param name="pass-callee-id" value="false"/>

<param name="session-timeout" value="10800"/>

<param name="sip-port" value="5066"/>

<param name="context" value="in2out"/>

<param name="enable-100rel" value="true"/>

<param name="rtp-ip" value="$${local_ip_v4}"/>

<param name="sip-ip" value="$${local_ip_v4}"/>

<param name="ext-rtp-ip" value="$${external_rtp_ip}"/>

<param name="ext-sip-ip" value="$${external_sip_ip}"/>

bin脚本

bin目录下需要一些简单的维护脚本。

clear_log.sh

clear_wav.sh

monitorfs.sh

防火墙

防火墙配置结果如下。

ports: 22/tcp 20000-60000/udp

rule family="ipv4" source address="1.2.3.4/32" port port="3060" protocol="udp" accept

rule family="ipv4" source address="1.2.3.4/32" port port="5066" protocol="udp" accept

系统配置

系统资源限制

vi /etc/security/limits.conf

* soft core unlimited

* hard core unlimited

* soft data unlimited

* hard data unlimited

* soft fsize unlimited

* hard fsize unlimited

* soft sigpending unlimited

* hard sigpending unlimited

* soft nofile 65536

* hard nofile 65536

* soft msgqueue unlimited

* hard msgqueue unlimited

* soft nproc 65536

* hard nproc 65536

* soft locks unlimited

* hard locks unlimited

* soft memlock unlimited

* hard memlock unlimited

修改账户启动执行脚本。

vi ./bash_profile

ulimit -c unlimited

ulimit -d unlimited

ulimit -f unlimited

ulimit -i unlimited

ulimit -n 65536

ulimit -q unlimited

ulimit -u 65536

ulimit -x unlimited

ulimit -l unlimited

系统端口范围

查看linux系统端口范围

sysctl -a | grep ipv4.ip_local_port_range

修改sysctl.conf

vi /etc/sysctl.conf

net.ipv4.ip_local_port_range = 20000    60999

使sysctl配置立即生效:

sysctl -p

非本机IP绑定

vi /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind=1

定时任务

sudo crontab -e

00 4 * * * sh /usr/local/freeswitch/bin/clear_log.sh 15

30 4 * * * /usr/sbin/ntpdate cn.pool.ntp.org; /sbin/hwclock -w

0 5 * * * /usr/local/freeswitch/bin/fs_cli -x "fsctl sync_clock_when_idle"

总结

freeswitch的基础功能基本可以满足SBC的功能需求,通过简单配置即可使用。

sbc作为公私网的信令和媒体通道,安全性一定是最重要的考虑项。

空空如常

求真得真

freeswitch配置SBC实例的更多相关文章

  1. Winform下CefSharp的引用、配置、实例与报错排除(源码)

    Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...

  2. CefSharp的引用、配置、实例

    CefSharp的引用.配置.实例与报错排除(源码) Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfro ...

  3. windows下Tomcat配置多实例

    详情参见tomcat安装目录下RUNNING.txt中Advanced Configuration - Multiple Tomcat Instances部分. 问题源于下面这段tomcat官方文档的 ...

  4. JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置

    众所周知,在进行接口测试的过程中,需要创建不同的场景(不同条件的输入,来验证不同的入参的返回结果).因而,在日常的自动化接口监控或商品监控等线上监控过程中,需要配置大量的入参来监控接口的返回是否正确. ...

  5. JMeter学习-014-JMeter 配置元件实例之 - 用户定义的变量 参数化配置

    前文讲述了通过 CSV Data Set Config 实现参数化配置(详情敬请参阅:JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置), ...

  6. 【前端】vue.js环境配置以及实例运行简明教程

    vue.js环境配置以及实例运行简明教程 声明:本文档编写参考如下两篇博客,是对它们的修改与补充,欢迎点击链接查看原文: 原文1:vue.js在windows本地下搭建环境和创建项目 原文2:Vue. ...

  7. DotNetCore学习-1.读取Json配置并绑定到配置类实例

    DotNetCore的程序的配置不再完全局限于XML文件,增加更加通用的Json配置. 读取Json配置文件的类主要在Microsoft.Extensions.Configuration命名空间下,创 ...

  8. 公网用户接入NAT后面的freeswitch配置

    大致网络示意和终端号码: 客户端侧: 终端号码(1019)终端IP(192.168.1.15)+ 网关(192.168.1.1) + 路由器公网IP(动态地址) 服务器侧: 防火墙(181.92.2. ...

  9. 安装Nginx+Lua+OpenResty开发环境配置全过程实例

    安装Nginx+Lua+OpenResty开发环境配置全过程实例 OpenResty由Nginx核心加很多第三方模块组成,默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用. ...

  10. api的使用机制:继承、实例化、实现(继承)配置、实例(参数化)配置、机制管理模块

    api的使用机制:继承.实例化.实现(继承)配置.实例(参数化)配置.机制管理模块 facade模式.管理模块

随机推荐

  1. drf实战和源码剖析----学习笔记1

    学自:bilibili武沛齐老师. 武老师讲课:清晰,连贯,实用,透彻,真乃名师! # 1. 什么是前后端分离 - 不分离,主要用于后台系统(CRUD)和用户量上的情况,开发起来代价小- 分离,面向用 ...

  2. excute方法和submit方法

    区别:   1.参数     execute  Runnable     submit     Callable   2.返回值     execute :void     submit :Futur ...

  3. 27、Type关键字

    1.是什么? type是go语法里额重要而且常用的关键字,type绝不只是对应于C/C++中的typeof.搞清楚type的使用,就容易理解Go语言中的核心概念struct.interface.函数等 ...

  4. ceph集群搭建详细教程(ceph-deploy)

    ceph-deploy比较适合生产环境,不是用cephadm搭建.相对麻烦一些,但是并不难,细节把握好就行,只是命令多一些而已. 实验环境 服务器主机 public网段IP(对外服务) cluster ...

  5. SpringCloud Gateway 网关

    SpringCloud Gateway 网关 spring: cloud: gateway: routes: - id: after_route uri: https://example.org pr ...

  6. 酷表ChatExcel -北大出品免费自动处理表格工具

    酷表ChatExcel是通过文字聊天实现Excel的交互控制的AI辅助工具,期望通过对表输入需求即可得到处理后的数据(想起来很棒),减少额外的操作,辅助相关工作人员(会计,教师等)更简单的工作.Cha ...

  7. 技本功|Hive优化之建表配置参数调优(一)

    简介: Hive是大数据领域常用的组件之一,主要用于大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能.影响Hive效率的主 ...

  8. Ribbon:Spring Cloud负载均衡与服务调用组件

    Ribbon:Spring Cloud负载均衡与服务调用组件 问题总结 负载均衡? Ribbon实现服务调用? Ribbon实现负载均衡? 切换负载均衡策略? 定制负载均衡策略? 问题答案 负载均衡 ...

  9. Java 全栈知识体系(2021 PDF 版本)

    40000 +字长文总结,民工哥已将此文整理成PDF文档了,需要的见文后下载获取方式. 全栈知识体系总览 Java入门与进阶 面向对象与Java基础 Java 基础 - 面向对象 Java 基础 - ...

  10. 深入理解JavaScript堆栈、事件循环、执行上下文和作用域以及闭包

    1. 堆栈 在JavaScript中,内存堆是内存分配的地方,调用栈是代码执行的地方. 原始类型的保存方式:在变量中保存的是值本身,所以原始类型也被称之为值类型. 对象类型的保存方式:在变量中保存的是 ...