在同一台主机上启动多个freeswitch实例

可以运行在同一台主机上,也可以运行在不同的主机上。

可以很多台主机进行安装测试,也可以在一台服务器上安装多个虚拟机。

部署结构

freeswitch 与 freeswitch 对接_xml

freeswitch 默认的配置文件:/usr/local/freeswitch/conf

复制一个新的环境(freeswitch2目录)

freeswitch 与 freeswitch 对接_xml_02

修改新配置中的一些配置参数以防止端口冲突。

Event Socket 的端口号,conf/autoload_configs/event_socket.conf.xml 中把8021修改为9021;conf/vars.xml 中把5060、5080修改为7060、7080。

RTP端口号修改:

freeswitch 与 freeswitch 对接_命令行_03

如果加载了其他模块,注意要把可能引起冲突的资源修改一下。例如:mod_erlang_event模块,需要修改autoload_configs/erlang_event.conf.xml中的listen-port和nodename。

启动:

freeswitch 与 freeswitch 对接_80端口_04

使用客户端连接:

freeswitch 与 freeswitch 对接_80端口_05

软电话注册到7060端口。

使用脚本启动第二个freeswitch:

freeswitch 与 freeswitch 对接_xml_06

进阶

运行两个不同版本的freeswitch,在编译时指定一个不同的安装目录。

freeswitch 与 freeswitch 对接_命令行_07

启动:

freeswitch 与 freeswitch 对接_80端口_08

双机对接

假设有两台freeswitch主机,A:192.168.1.A 和 B:192.168.1.B。默认配置,位于同一机器上的用户称为本地用户,如果需要与其他机器上的用户通信,则其他机器上的用户就称为外地用户。

如果A上的1000用户想拨打B上的1000用户,拨打外地用户需要加一个特殊的号码,例如:0,0称为出局字冠。

A:把以下Dialplan片断加到 conf/dialplan/default.xml 中:

freeswitch 与 freeswitch 对接_命令行_09

B 在5080端口上收到INVITE请求后,默认走public dialplan,查找public.xml

freeswitch 与 freeswitch 对接_80端口_10

如果B上的用户也要拨打A上的用户,和A做类似的配置即可。

汇接

freeswitch 与 freeswitch 对接_xml_11

如果A上的用户呼叫B上的1000,则拨打B1000,并统一送到D进行汇接。

A上的dialplan:

freeswitch 与 freeswitch 对接_命令行_12

在D上,收到5080端口的呼叫请求后,查找public dialplan 对来话进行路由。

freeswitch 与 freeswitch 对接_xml_13

freeswitch 与 freeswitch 对接_xml_14

如果被叫号码的首位是D,说明是一个本地用户,会去掉首位的D,然后把路由转到default dialplan进行处理。

如果被叫号码不在本地的用户,则使用下列的dialplan:

freeswitch 与 freeswitch 对接_80端口_15

让RTP媒体流在端局之间传送:

freeswitch 与 freeswitch 对接_80端口_16

freeswitch 与 freeswitch 对接_xml_17

双归属

freeswitch 与 freeswitch 对接_80端口_18

freeswitch 与 freeswitch 对接_80端口_19

以下dialplan实现负荷分担:

freeswitch 与 freeswitch 对接_命令行_20

freeswitch 与 freeswitch 对接_80端口_21

长途局

freeswitch 与 freeswitch 对接_80端口_22

freeswitch 与 freeswitch 对接_80端口_23

ACL

发送到5080端口的INVITE不需要鉴权。在汇接局上关闭5080端口,所有来话送到5060端口,是需要鉴权才能路由的。一般使用IP地址鉴权,会用到ACL。

freeswitch 与 freeswitch 对接_xml_24

internal profile 默认使用“domains”,internal.xml:

freeswitch 与 freeswitch 对接_xml_25

freeswitch 与 freeswitch 对接_80端口_26

freeswitch 与 freeswitch 对接_命令行_27

freeswitch作为PBX

freeswitch 与 freeswitch 对接_命令行_28

F是作为A上的一个用户(1000)存在的,所有F只能作为一个普通用户向A去注册。对于A而言,F是一个普通的SIP电话客户端。

freeswitch 与 freeswitch 对接_80端口_29

本地的用户600~619可以通过下面的dialplan拨打外部的电话了:

freeswitch 与 freeswitch 对接_命令行_30

freeswitch 与 freeswitch 对接_命令行_31

freeswitch 与 freeswitch 对接_xml_32

将600的主叫号码变换为 1000600:

freeswitch 与 freeswitch 对接_80端口_33

DID

让A上其他用户打1000开头的号码都送到F上,在A上增加一个dialplan:

freeswitch 与 freeswitch 对接_80端口_34

A动态获取F的ip地址:

freeswitch 与 freeswitch 对接_80端口_35

当F向A注册时:

freeswitch 与 freeswitch 对接_命令行_36

freeswitch 与 freeswitch 对接_命令行_37

A向F发的INVITE请求:

freeswitch 与 freeswitch 对接_xml_38

在A的命令行上查找contact:

freeswitch 与 freeswitch 对接_80端口_39

echo命令将字符串原样输出:

freeswitch 与 freeswitch 对接_80端口_40

命令行上进行变量替换:

freeswitch 与 freeswitch 对接_命令行_41

freeswitch 与 freeswitch 对接_xml_42

直接执行originate呼叫1000:

freeswitch 与 freeswitch 对接_命令行_43

进行正则表达式替换:

freeswitch 与 freeswitch 对接_xml_44

freeswitch 与 freeswitch 对接_命令行_45

F-DID dialplan:

freeswitch 与 freeswitch 对接_80端口_46

使用PBX上的网关呼出

freeswitch 与 freeswitch 对接_xml_47

A上的用户1000~1019如何通过F上的网关G对外呼出。

首先,将A上的外呼请求先转发到F上:

freeswitch 与 freeswitch 对接_xml_48

F上收到这种呼叫请求后,使用下列的dialplan进行呼出:

freeswitch 与 freeswitch 对接_命令行_49