在同一台主机上启动多个freeswitch实例
可以运行在同一台主机上,也可以运行在不同的主机上。
可以很多台主机进行安装测试,也可以在一台服务器上安装多个虚拟机。
部署结构
freeswitch 默认的配置文件:/usr/local/freeswitch/conf
复制一个新的环境(freeswitch2目录)
修改新配置中的一些配置参数以防止端口冲突。
Event Socket 的端口号,conf/autoload_configs/event_socket.conf.xml 中把8021修改为9021;conf/vars.xml 中把5060、5080修改为7060、7080。
RTP端口号修改:
如果加载了其他模块,注意要把可能引起冲突的资源修改一下。例如:mod_erlang_event模块,需要修改autoload_configs/erlang_event.conf.xml中的listen-port和nodename。
启动:
使用客户端连接:
软电话注册到7060端口。
使用脚本启动第二个freeswitch:
进阶
运行两个不同版本的freeswitch,在编译时指定一个不同的安装目录。
启动:
双机对接
假设有两台freeswitch主机,A:192.168.1.A 和 B:192.168.1.B。默认配置,位于同一机器上的用户称为本地用户,如果需要与其他机器上的用户通信,则其他机器上的用户就称为外地用户。
如果A上的1000用户想拨打B上的1000用户,拨打外地用户需要加一个特殊的号码,例如:0,0称为出局字冠。
A:把以下Dialplan片断加到 conf/dialplan/default.xml 中:
B 在5080端口上收到INVITE请求后,默认走public dialplan,查找public.xml
如果B上的用户也要拨打A上的用户,和A做类似的配置即可。
汇接
如果A上的用户呼叫B上的1000,则拨打B1000,并统一送到D进行汇接。
A上的dialplan:
在D上,收到5080端口的呼叫请求后,查找public dialplan 对来话进行路由。
如果被叫号码的首位是D,说明是一个本地用户,会去掉首位的D,然后把路由转到default dialplan进行处理。
如果被叫号码不在本地的用户,则使用下列的dialplan:
让RTP媒体流在端局之间传送:
双归属
以下dialplan实现负荷分担:
长途局
ACL
发送到5080端口的INVITE不需要鉴权。在汇接局上关闭5080端口,所有来话送到5060端口,是需要鉴权才能路由的。一般使用IP地址鉴权,会用到ACL。
internal profile 默认使用“domains”,internal.xml:
freeswitch作为PBX
F是作为A上的一个用户(1000)存在的,所有F只能作为一个普通用户向A去注册。对于A而言,F是一个普通的SIP电话客户端。
本地的用户600~619可以通过下面的dialplan拨打外部的电话了:
将600的主叫号码变换为 1000600:
DID
让A上其他用户打1000开头的号码都送到F上,在A上增加一个dialplan:
A动态获取F的ip地址:
当F向A注册时:
A向F发的INVITE请求:
在A的命令行上查找contact:
echo命令将字符串原样输出:
命令行上进行变量替换:
直接执行originate呼叫1000:
进行正则表达式替换:
F-DID dialplan:
使用PBX上的网关呼出
A上的用户1000~1019如何通过F上的网关G对外呼出。
首先,将A上的外呼请求先转发到F上:
F上收到这种呼叫请求后,使用下列的dialplan进行呼出: