FreeSWITCH入门到精通系列(二):FreeSWITCH的安装与配置
前言
在上一篇博客中,我们了解了FreeSWITCH的基本概念和特点。本篇文章将详细介绍FreeSWITCH的安装与配置过程,确保您能够顺利搭建一个基础的FreeSWITCH环境,并了解其基本配置。除了使用包管理器安装FreeSWITCH外,我们还会详细讲解如何从源码编译安装FreeSWITCH,以及如何进行并发和连接优化。
FreeSWITCH的安装
FreeSWITCH支持多种操作系统,包括Linux、Windows和macOS。本文将以Ubuntu 20.04为例,详细介绍FreeSWITCH的安装步骤。
1. 使用包管理器安装FreeSWITCH
更新系统
在安装FreeSWITCH之前,首先要确保系统软件包是最新的。打开终端并运行以下命令:
sudo apt update
sudo apt upgrade -y
安装必要的软件包
安装FreeSWITCH需要一些依赖软件包:
sudo apt install -y gnupg2 wget lsb-release
添加FreeSWITCH软件源
将FreeSWITCH的公钥添加到系统,并添加FreeSWITCH的APT源:
wget -O - https://files.freeswitch.org/repo/deb/debian/freeswitch_archive_g0.pub | sudo apt-key add -
echo "deb http://files.freeswitch.org/repo/deb/debian/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/freeswitch.list
安装FreeSWITCH
更新APT源并安装FreeSWITCH:
sudo apt update
sudo apt install -y freeswitch-meta-all
启动FreeSWITCH
安装完成后,启动FreeSWITCH并设置为开机自启动:
sudo systemctl start freeswitch
sudo systemctl enable freeswitch
2. 从源码编译安装FreeSWITCH
安装依赖
在安装FreeSWITCH之前,需要安装编译所需的依赖包:
sudo apt update
sudo apt install -y git autoconf automake libtool g++ pkg-config \
libssl-dev libpcre3-dev libspeex-dev libspeexdsp-dev \
libsqlite3-dev libcurl4-openssl-dev libedit-dev \
libldns-dev libopus-dev libsndfile1-dev libtiff5-dev \
libjpeg-dev libavformat-dev libswscale-dev libavresample-dev \
libx264-dev libmp3lame-dev libshout3-dev libshout-dev \
libspandsp-dev libmyodbc libunbound-dev libb64-dev \
libvpx-dev libcodec2-dev libunbound-dev \
libmariadb-dev-compat libmariadb-dev libtool-bin \
yasm nasm libopencore-amrnb-dev libopencore-amrwb-dev \
libopenjpeg-dev
下载FreeSWITCH源码
使用git克隆FreeSWITCH的源码到本地:
git clone https://github.com/signalwire/freeswitch.git
cd freeswitch
编译FreeSWITCH
运行以下命令进行编译和安装:
./bootstrap.sh
./configure
make
sudo make install
sudo make sounds-install moh-install
sudo make cd-sounds-install cd-moh-install
安装FreeSWITCH服务脚本
sudo cp debian/freeswitch-init /etc/init.d/freeswitch
sudo chmod +x /etc/init.d/freeswitch
sudo update-rc.d freeswitch defaults
启动FreeSWITCH
启动FreeSWITCH服务:
sudo service freeswitch start
配置FreeSWITCH
FreeSWITCH的配置文件位于/usr/local/freeswitch/conf/
目录下。初始配置包括全局配置、SIP配置和拨号计划等。
1. 配置全局变量
编辑/usr/local/freeswitch/conf/vars.xml
文件,配置系统的全局变量:
<variables>
<X-PRE-PROCESS cmd="set" data="domain=$${local_ip_v4}"/>
<X-PRE-PROCESS cmd="set" data="realm=$${domain}"/>
<X-PRE-PROCESS cmd="set" data="internal_sip_port=5060"/>
<X-PRE-PROCESS cmd="set" data="external_sip_port=5080"/>
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=$${local_ip_v4}"/>
<X-PRE-PROCESS cmd="set" data="internal_rtp_ip=$${local_ip_v4}"/>
</variables>
这些变量定义了系统的基本网络配置,如SIP端口和RTP IP地址。
2. 配置SIP账号
SIP账号配置文件位于/usr/local/freeswitch/conf/directory/default/
目录下。创建或编辑一个SIP账号文件,如1000.xml
:
<include>
<user id="1000">
<params>
<param name="password" value="1234"/>
</params>
<variables>
<variable name="toll_allow" value="domestic,international,local"/>
<variable name="accountcode" value="1000"/>
<variable name="user_context" value="default"/>
<variable name="effective_caller_id_name" value="Extension 1000"/>
<variable name="effective_caller_id_number" value="1000"/>
<variable name="outbound_caller_id_name" value="FreeSWITCH"/>
<variable name="outbound_caller_id_number" value="0000000000"/>
<variable name="callgroup" value="techsupport"/>
</variables>
</user>
</include>
此文件定义了一个ID为1000的SIP用户,其密码为1234,并设置了一些呼叫变量。
3. 配置拨号计划
拨号计划定义了如何处理呼入和呼出的电话。编辑/usr/local/freeswitch/conf/dialplan/default.xml
文件,添加一个简单的拨号计划:
<extension name="HelloWorld">
<condition field="destination_number" expression="^1000$">
<action application="answer"/>
<action application="sleep" data="1000"/>
<action application="playback" data="ivr/ivr-welcome_to_freeswitch.wav"/>
<action application="hangup"/>
</condition>
</extension>
这个拨号计划定义了当拨打1000时,接听电话、等待1秒、播放欢迎语音文件,然后挂断电话。
4. 重载配置
每次修改配置文件后,需要重载FreeSWITCH的配置使其生效:
/usr/local/freeswitch/bin/fs_cli -x "reloadxml"
配置示例:基本呼叫功能
现在,我们将配置一个基本的呼叫功能示例,包括注册SIP设备和进行基本呼叫。
1. 注册SIP设备
确保您已经配置了SIP账号(如上文的1000.xml)。现在,使用软电话(如Zoiper或X-Lite)注册SIP设备。
- 打开软电话应用。
- 创建一个新的SIP账户,输入以下信息:
- 账户名称:随意填写
- SIP服务器:FreeSWITCH服务器的IP地址
- 用户名:1000
- 密码:1234
- 保存并应用设置。
2. 进行基本呼叫
- 在软电话中拨打1000。
- FreeSWITCH会接听电话、等待1秒、播放欢迎语音文件,然后挂断电话。
配置FreeSWITCH模块
FreeSWITCH通过模块扩展功能,以下是几个常用模块的配置示例:
1. mod_sofia
mod_sofia是FreeSWITCH的核心SIP模块。其配置文件位于/usr/local/freeswitch/conf/autoload_configs/sofia.conf.xml
。
默认配置已足够满足基本需求,但可以根据需要进行调整:
<configuration name="sofia.conf" description="sofia Endpoint">
<global_settings>
<param name="log-level" value="0"/>
<param name="debug-presence" value="0"/>
</global_settings>
<profiles>
<profile name="internal">
<gateways/>
<domains/>
<settings>
<param name="debug" value="0"/>
<param name="sip-trace" value="no"/>
</settings>
</profile>
</profiles>
</configuration>
2. mod_conference
mod_conference模块用于创建和管理多方会议。配置文件位于/usr/local/freeswitch/conf/autoload_configs/conference.conf.xml
:
<configuration name="conference.conf" description="Conference Module">
<settings>
<param name="caller-controls" value="conf-control"/>
<param name="energy-level" value="100"/>
<param name="comfort-noise" value="true"/>
</
settings>
</configuration>
FreeSWITCH的安全性配置
确保FreeSWITCH的安全性是至关重要的。以下是一些基本的安全配置:
1. 网络安全
使用防火墙限制访问,确保只有信任的IP地址可以访问FreeSWITCH服务:
sudo ufw allow proto tcp from <trusted_ip> to any port 5060
sudo ufw allow proto udp from <trusted_ip> to any port 5060
sudo ufw enable
2. 认证和加密
启用SRTP加密,确保媒体流的安全:
编辑/usr/local/freeswitch/conf/sip_profiles/internal.xml
,添加SRTP配置:
<param name="rtp_secure_media" value="optional"/>
<param name="srtp-suite" value="AES_CM_128_HMAC_SHA1_80"/>
3. 禁用不必要的模块
减少攻击面,禁用不必要的模块:
编辑/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
,注释掉不需要的模块:
<!--<load module="mod_some_unused_module"/>-->
并发与连接优化
优化FreeSWITCH的并发和连接处理能力可以显著提高系统的稳定性和性能。以下是一些常见的优化措施:
1. 调整Linux系统参数
编辑/etc/sysctl.conf
文件,增加或修改以下参数:
# 增加文件描述符限制
fs.file-max = 100000
# 调整TCP/IP参数
net.core.somaxconn = 1024
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 10000 65000
# 增加网络缓冲区大小
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
使这些修改生效:
sudo sysctl -p
2. 增加文件描述符限制
编辑/etc/security/limits.conf
文件,增加以下内容:
* soft nofile 100000
* hard nofile 100000
编辑/etc/pam.d/common-session
和/etc/pam.d/common-session-noninteractive
文件,增加以下内容:
session required pam_limits.so
3. 调整FreeSWITCH的并发参数
编辑FreeSWITCH的主配置文件/usr/local/freeswitch/conf/autoload_configs/switch.conf.xml
,增加或修改以下参数:
<settings>
<param name="max-sessions" value="2000"/>
<param name="sessions-per-second" value="30"/>
<param name="max-db-handles" value="50"/>
<param name="db-handle-timeout" value="30"/>
</settings>
优化与性能调优
优化FreeSWITCH的性能,可以提高系统的处理能力和稳定性:
1. 硬件优化
- 使用高性能的CPU和足够的内存。
- 配置高效的磁盘I/O,避免性能瓶颈。
2. 网络优化
- 确保低延迟和高带宽的网络环境。
- 使用有线连接而非无线连接,确保网络的稳定性。
3. 配置优化
- 调整SIP和RTP参数,优化内存和线程使用。
- 使用专用服务器运行FreeSWITCH,避免资源竞争。
结语
在本篇博客中,我们详细介绍了FreeSWITCH的安装与配置,包括基础配置、SIP账号配置、拨号计划配置以及模块和安全配置。通过这些步骤,您应该能够成功搭建一个基础的FreeSWITCH环境,并开始进行简单的呼叫操作。在下一篇博客中,我们将探讨FreeSWITCH的基础概念和架构,进一步FreeSWITCH的整体情况。敬请期待!
如果您有任何问题或建议,请在评论区留言,我将尽快回复。感谢您的阅读!