freeswitch配置SBC实例

概述
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实例的更多相关文章
- Winform下CefSharp的引用、配置、实例与报错排除(源码)
Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...
- CefSharp的引用、配置、实例
CefSharp的引用.配置.实例与报错排除(源码) Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfro ...
- windows下Tomcat配置多实例
详情参见tomcat安装目录下RUNNING.txt中Advanced Configuration - Multiple Tomcat Instances部分. 问题源于下面这段tomcat官方文档的 ...
- JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置
众所周知,在进行接口测试的过程中,需要创建不同的场景(不同条件的输入,来验证不同的入参的返回结果).因而,在日常的自动化接口监控或商品监控等线上监控过程中,需要配置大量的入参来监控接口的返回是否正确. ...
- JMeter学习-014-JMeter 配置元件实例之 - 用户定义的变量 参数化配置
前文讲述了通过 CSV Data Set Config 实现参数化配置(详情敬请参阅:JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置), ...
- 【前端】vue.js环境配置以及实例运行简明教程
vue.js环境配置以及实例运行简明教程 声明:本文档编写参考如下两篇博客,是对它们的修改与补充,欢迎点击链接查看原文: 原文1:vue.js在windows本地下搭建环境和创建项目 原文2:Vue. ...
- DotNetCore学习-1.读取Json配置并绑定到配置类实例
DotNetCore的程序的配置不再完全局限于XML文件,增加更加通用的Json配置. 读取Json配置文件的类主要在Microsoft.Extensions.Configuration命名空间下,创 ...
- 公网用户接入NAT后面的freeswitch配置
大致网络示意和终端号码: 客户端侧: 终端号码(1019)终端IP(192.168.1.15)+ 网关(192.168.1.1) + 路由器公网IP(动态地址) 服务器侧: 防火墙(181.92.2. ...
- 安装Nginx+Lua+OpenResty开发环境配置全过程实例
安装Nginx+Lua+OpenResty开发环境配置全过程实例 OpenResty由Nginx核心加很多第三方模块组成,默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用. ...
- api的使用机制:继承、实例化、实现(继承)配置、实例(参数化)配置、机制管理模块
api的使用机制:继承.实例化.实现(继承)配置.实例(参数化)配置.机制管理模块 facade模式.管理模块
随机推荐
- Socket是什么/怎么理解Socket
Socket 先来看一下百度百科对于Socket的介绍:套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O ...
- 分享一个 asp.net core 多文件分块同时上传的组件
分享一个可多个文件同时上传.断点续传,并实时反馈上传进度的 Asp.Net core 组件. 服务器端 引用 nuget 包:JMS.FileUploader.AspNetCore 然后启用上传组件: ...
- C++ Qt开发:SpinBox数值微调框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QSpinBo ...
- CentOS 8.1成功安装最新Node.js 20教程(含用到的全部命令和截图演示)
yum换镜像和源 CentOS 已经停止维护的问题.2020 年 12 月 8 号,CentOS 官方宣布了停止维护 CentOS Linux 的计划,并推出了 CentOS Stream 项目,Ce ...
- 华企盾DSC远程桌面、实时监控连接不上常见处理方法
1.检测策略是否勾选了远程桌面需要客户端确认或者勾选了客户端显示"允许远程维护"选项 2.检查客户端5097目录是否有MgrDll.dll.uvnserver.exe文件(是否被杀 ...
- NetSuite 开发日记 —— 科目类型码
科目类型码可用于搜索判断科目类型 代码实现 var sch = search.create({ type: 'account', filters: ['type', 'anyof', 'Bank'], ...
- 使用C#如何监控选定文件夹中文件的变动情况?
目录 1.前言 2.效果 3.具体实现 页面设计 全部代码 FileSystemWatcher的介绍 FileSystemWatcher的构造函数 FileSystemWatche ...
- Java 中时间对象的序列化
在 Java 应用程序中,时间对象是使用地比较频繁的对象,比如,记录某一条数据的修改时间,用户的登录时间等应用场景.在传统的 Java 编程中,大部分的程序员都会选择使用 java.uti.Date ...
- 2、Text组件详解
TextStyle 的参数 //代码块 importM import 'package:flutter/material.dart'; void main() { runApp(MaterialApp ...
- 记录:idea git push失败问题
问题描述: 重复弹出密码登录框,但是push失败 解决,用ssh的方式登录 1.生成ssh 配置用户名 git config --global user.name "tmqq2333&quo ...