freeswitch与外部网关链接


本文来自csdn lidphttp://blog.youkuaiyun.com/perfectpdl,转载注明出处,谢谢



我建了一个 Freeswitch 内核研究 交流群, 45211986, 欢迎加入, 另外,提供基于SIP的通信服务器及客户端解决方案,



注册到freeswitch的客户端可以互相拨打,但是当客户端想通过freeswitch呼叫那些并没有注册到freeswitch上的客户端怎么办?这就需要freeswitch与外部网关链接,比如与另一个sip server或者pstn测的运营商网络链接。Freeswitch引入网关概念来处理与外部链接问题。

Freeswitch中配置的网关在系统启动时注册到另一个sip服务器,类似于sip客户端注册到freeswitch

配置网关通常需要用户名,密码,以及要注册到的sip服务器ip地址。

网关相关配置保存在目录/conf/sofia_profiles/external

/usr/local/freeswitch/conf/sip_profiles/external.xmlfreeswitch作为客户端注册到另一个网关的全局配置,

/usr/local/freeswitch/conf/sip_profiles/external/目录下可以添加网关。

比如添加注册到asterisk得网关,/usr/local/freeswitch/conf/sip_profiles/external/reg_to_asterisk.xml

reg_to_asterisk.xml内容:

<include>

<gatewayname="asterisk">

<paramname="username" value="freeswitch"/>

<paramname="password" value="freeswitch"/>

<paramname="realm" value="demo.asterisk.org"/>

<paramname="proxy" value="demo.asterisk.org"/>

</gateway>

</include>

~

保存,控制台重启 sipprofile

freeswitch@openser-dev>sofia profile external restart

2012-08-18 20:21:47.254868[INFO] mod_enum.c:871 ENUM Reloaded

2012-08-18 20:21:47.254868[INFO] switch_time.c:1163 Timezone reloaded 530 definitions

Reload XML [Success]

restarting: external

freeswitch@openser-dev>2012-08-18 20:21:47.295211 [NOTICE] sofia.c:2500 Waiting for worker thread

2012-08-18 20:21:47.956692[NOTICE] sofia_glue.c:5707 deleted gateway example.com from profile external

2012-08-18 20:21:47.956692[NOTICE] sofia.c:5202 Started Profile external [sofia_reg_external]

2012-08-18 20:21:47.984023[NOTICE] sofia_reg.c:2944 Added gateway 'asterisk' to profile 'external'

2012-08-18 20:21:47.984023[NOTICE] sofia_reg.c:2944 Added gateway 'example.com' to profile 'external'

2012-08-18 20:21:49.975233[NOTICE] sofia_reg.c:415 Registering asterisk

freeswitch@openser-dev>

freeswitch@openser-dev>

查看注册状态

freeswitch@internal> sofiastatus

Name TypeData State

=================================================================================================

internal-ipv6 profilesip:mod_sofia@[::1]:5060RUNNING (0)

internal profilesip:mod_sofia@192.168.16.111:5060 RUNNING (0)

external profilesip:mod_sofia@192.168.16.111:5080RUNNING (0)

external::example.com gatewaysip:joeuser@example.com NOREG

external::asterisk gatewaysip:freeswitch@demo.asterisk.orgTRYING (retry: NEVER)

192.168.16.111 aliasinternal ALIASED

=================================================================================================

3 profiles 1 alias

a.通过网关呼出去

需要修改dialplan,conf/dialplan/default/目录下添加 route_to_asterisk.xml

<include>

<extension name="Dial Out asteriskGateway">

<condition field="destination_number"expression="^9(11)$">

<actionapplication="bridge"data="sofia/gateway/asterisk/$1"/>

</condition>

</extension>

</include>

Fs_cli 执行 reloadxml,客户端呼叫 911,呼叫会路由到asterisk网关上。

b.接收网关送过来的呼叫

通常,对于那些未经认证的呼叫,freeswitch认为是不安全的,包括网关送过来的呼叫,freeswitch会把这类呼叫路由到publicdialplan context中。

/usr/local/freeswitch/conf/dialplan/public.xml为此类呼叫的dialplan,可以在

/usr/local/freeswitch/conf/dialplan/public/目录添加对应网关送过来的dialplan

如:

Vim /usr/local/freeswitch/conf/dialplan/public/asterisk.xml

<include>

<extensionname="asterisk-inbound">

<condition field="destination_number"

expression="^(freeswitch)$">

<actionapplication="set" data="domain_name=$${domain}"/>

<actionapplication="transfer" data="1000 XML default"/>

</condition>

</extension>

</include>

asterisk送过来的被叫号码为freeswitch注册到asterisk上的用户号时,freeswitch转移到其用户1000

3)不需要手动配置网关,但与外部链接

如果外部网关需要diguest认证,则需要在freeswitch上配置网关,如果外部网关并不需要digesut认证,则不需要再freeswitch上手动配置(2)中的过程,有一些网关通过ip验证,这种方式相对更简单,但不如(2)中的安全。

比如default.xmldialplan中的

<actionapplication="bridge"data="sofia/${use_profile}/$1@conference.freeswitch.org"/>

即通过 internalsip profile送到freeswitch.org的网关上。


欢迎补充:)



### Freeswitch 搭建教程 #### 1. 安装环境准备 在开始安装之前,需要确保操作系统已经准备好。对于 CentOS 8.5 的环境,可以参考以下命令来编译并安装 FreeSWITCH: ```bash sudo yum groupinstall "Development Tools" sudo yum install epel-release sudo yum install autoconf automake libtool gcc gcc-c++ kernel-devel make ncurses-devel openssl-devel newt-devel uuid-devel python-devel sqlite-devel gsm-devel perl-CPAN wget git zlib-devel bzip2-devel expat-devel curl-devel pcre-devel json-c-devel lua-devel jansson-devel yaml-devel xmlrpc-c-devel speexdsp-devel opus-devel sox portaudio portaudio-devel ffmpeg ffmpeg-devel ``` 以上命令会安装必要的依赖项以便后续编译成功[^2]。 #### 2. 下载源码包 进入 `/usr/src` 目录下载最新版本的 FreeSWITCH 并解压: ```bash cd /usr/src wget https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.3.-release.zip apt -y install unzip unzip freeswitch-1.10.3.-release.zip cd freeswitch-1.10.3.-release/ ``` 完成之后即可开始编译过程[^3]。 #### 3. 配置编译 执行如下命令进行配置和编译操作: ```bash ./bootstrap.sh -j ./configure --enable-core-pgsql-support make make install make sounds-install moh-install configs-install ``` 这一步骤可能会花费较长时间取决于服务器性能。 #### 4. 创建快捷方式启动脚本 为了方便管理FreeSWITCH服务,创建软链接至标准路径下: ```bash ln -s /usr/local/freeswitch/bin/freeswitch /usr/bin/freeswitch ``` 这样可以直接通过 `freeswitch` 命令控制程序运行状态。 #### 5. 修改配置文件启用WebSocket功能 编辑默认配置文件添加 WebSocket 支持部分: ```ini ws_api_port=8088 wss_enable=true tls_cert_dir=/usr/local/freeswitch/certs ``` 保存更改后重启服务使新参数生效[^4]。 #### 6. 设置呼叫中心中间件对接 针对特定应用场景比如呼叫中心集成,则需调整内部逻辑匹配外部网关行为模式。例如,在 CCAdmin 中新增虚拟分机定义其属性为 external 类型从而允许接收来自公网方向发起请求的数据流传输处理机制实现自动化交互流程优化用户体验效果显著提升工作效率减少人为干预环节提高整体服务质量水平达到预期目标要求满足业务需求[^5]。 --- ### 注意事项 安全性方面建议开启 TLS 加密保护通信链路防止敏感信息泄露风险;另外还需注意不同软件组件间可能存在版本差异问题因此务必提前核实相互之间是否存在潜在冲突情况以免影响正常使用体验造成不必要的麻烦损失成本增加维护难度延长项目周期降低收益回报率等问题发生几率最小化保障系统稳定可靠长期高效运转下去创造更大价值贡献社会进步发展贡献力量共同前进共创辉煌未来前景广阔充满希望值得期待! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值