使用FreeSWITCH SIP落地的配置总结
简介
首先先说明一下落地的含义。用我简单粗糙的理解,就是通过SIP接入运营商呼到手机或者固话。在FreeSWITCH中使用SIP和运营商对接达到落地的效果。
对接方式
简单介绍一下,FreeSWITCH里Gateway(网关)的概念。网关又成协议转换器,通常都是进行协议转换。这里说的网关指的是语音网关,如常用的SIP网关,负责SIP协议和七号信令或ISDN PRI(模拟信号)之间的转换。但FreeSWITCH中的网关有时候不一定是真的网关,也可以是另外一个SIP Server(如另一个FreeSWITCH, Asterisk等)。但最终会有一个设备或系统,将SIP转换成模拟信号。简化一下过程,我们认为FreeSWITCH送到的就是真的网关。
其简化后的过程大致如下:
SIP话机 —-> FreeSWICTCH —-> 网关 —-> 运营商 —-> 手机或固话
对接的最终目的都是为了将通话转到网关上,熟悉SIP协议的都知道,其实就是发INVITE消息。按照对接方式,分成认证和非认证。非认证又称IP对接,或者SIP中继对接。简单理解认证方式就是,FreeSWITCH无法随意的将呼叫送到网关上,需要经过网关的认证。非认证方式,只要知道网关地址,大家都可以发起INVITE。这里可能涉及到安全问题,但这不在我们的讨论范围内。
认证模式
FreeSWITCH需要建立一个网关并注册到网关设备上。见下面配置:
配置目录在FreeSWITCH 安装目录的下的conf/sip_profiles/external/ 增加一个test.xml
<gateway name="test"/>
<param name="realm" value="www.example.com"/>
<param name="register-proxy" value="192.168.1.8"/>
<param name="username" value="4444"/>
<param name="password" value="!@#qwe123"/>
<param name="from-user" value="4444"/>
<param name="from-domain" value="www.example.com"/>
<param name="register" value="true"/>
<param name="outbound-proxy" value="192.168.1.8"/>
<param name="expire-seconds" value="120"/>
</gateway>
简单的介绍一些这几个参数:
realm:域名
username:认证的用户名
password:认证的密码
from-user:指定在SIP消息中的源用户信息,没有配置则默认和username相同
from-domain:是指定域,它们会影响SIP中的“From”头域。
regitster-proxy:表示注册的地址
outbound-proxy:表示呼出时指向的地址,这里其实和注册地址是一致的
register:是否注册
expire-seconds:注册的间隔时间
好了,这样表示FreeSWITCH作为一个分机注册到网关192.168.1.8上。
在FreeSWITCH中配置如下路由,当外呼时就可以将呼叫送至网关上了。然后由网关出局
<extension name="callout">
<condition field="destination_number" expression="^10086$">
<action application="bridge" data="sofia/gateway/test/10086"/>
</condition>
</extension
非认证模式
非认证模式下,我们只需要知道网关的地址就可以了。当也分三种情况:
直接指向IP地址
<extension name="callout">
<condition field="destination_number" expression="^10086$">
<action application="bridge" data="sofia/internal/192.168.1.8:5080/10086"/>
</condition>
</extension
增加非注册模式的网关
<gateway name="test"/>
<param name="realm" value="www.example.com"/>
<param name="register-proxy" value="192.168.1.8"/>
<param name="username" value="4444"/>
<param name="password" value="!@#qwe123"/>
<param name="from-user" value="4444"/>
<param name="from-domain" value="www.example.com"/>
<param name="register" value="false"/>
<param name="outbound-proxy" value="192.168.1.8"/>
<param name="expire-seconds" value="120"/>
</gateway>
其中路由和认证模式的相同
<extension name="callout">
<condition field="destination_number" expression="^10086$">
<action application="bridge" data="sofia/gateway/test/10086"/>
</condition>
</extension
其它情况
有时候会有这样的场景,网关在内网中,而FreeSWITCH在公网中,FreeSWITCH无法直接指向内网地址,也没法注册到网关设备上。这个时候就需要用到NAT了,让内网网关注册到公网的FreeSWITCH上。内网注册过去之后,会在路由器上“打洞”,即做了一个内外网端口映射。FreeSWITCH无法直接到达网关,但是通过外网端口就能到达内网的网关了(这里由于NAT有多种类型,并不一定能成功,但通常情况下是可以的)。这时候假设内网网关以分机4444注册到FreeSWITCH上。(其实也可以用别的方式来做,比如在路由器上做端口映射,内网和外网做端口映射,不过这种方式不够灵活)
在FreeSWITCH的console里调用
sofia_contact 4444
得到结果
sofia/internal/sip:4444@171.221.76.7:17480
从这里我们可以知道网关对应的外网地址和端口,那只要把呼叫信息发到171.221.76.7:17480即可。但我们实际想呼叫的号码可能是手机号,或者固话,这里简单起见,还是用10086。就需要把这个4444号码替换成10086。那么需要配置路由如下:
<extension name="callout">
<condition field="destination_number" expression="^10086$">
<action application="bridge" data="${regex(${sofia_contact(internal/4444@${domain_name})}|^(.+)sip(.+)@(.+)|%1sip:10086@%3)}"/>
</condition>
</extension>
总结
FreeSWITCH和网关如果在同一网段或者网关在FreeSWITCH的外网的话(实际上就是说FreeSWITCH可以直接访问到网关),就采用FreeSWITCH注册到网关或者指向网关的方式,这也是常用的方式。 如果网关在内网,而FreeSWITCH在外网的话,就只能采用内网网关注册到FreeSWITCH的方式。
---------------------
作者:披荆又斩棘
来源:CSDN
原文:https://blog.csdn.net/liyang051/article/details/46739639
版权声明:本文为博主原创文章,转载请附上博文链接!
使用FreeSWITCH SIP落地的配置总结相关推荐
- Freeswitch+Sip.js 早期媒体(回铃音)
Freeswitch+Sip.js 早期媒体(Early Media) 在笔者早期的文章里,没有对早期媒体进行处理,选择了本地的媒体进行播放,在当时看来还可以接受,但是目前来看,体验很差,所以笔者花费 ...
- 流媒体服务器FreeSWITCH的安装、配置与启动
在 CentOS7 下安装启动 FreeSWITCH 1.6 1. 下载源码 cd /usr/local/src git clone -b v1.6 https://freeswitch.org/st ...
- freeswitch SIP内呼与外呼配置
今天我利用freeswitch 和 网关设备做了内呼和外呼 1, 设置如下: 2,找运维的人给映射了一个外网端口 a.b.c.d 3, SIP代理填的我的freeswitch的端口,另外一个是设备的f ...
- FreeSwitch Sip【转】
在继续学习 FreeSWITCH 之前我们有必要来学习一下 SIP 协议,因为它是 FreeSWITCH 的核心.但即使如此,讲清楚 SIP 必然需要很大篇幅,本书是关于 FreeSWITCH 的,而 ...
- freeswitch的安装和配置 重点是端口设置
呼入错误设置 添加链接描述 端口设置原文 ngrep linux 简单实用的抓包工具添加链接描述 freeswitch线上(阿里云)部署端口开放问题,解决freeswitch线上无法注册问题 5. f ...
- freeswitch阿里云安装配置文档
2.1 安装 yum install git gcc-c++ autoconf automake libtool wget python ncurses-devel zlib-devel libjpe ...
- Freeswitch一些高级功能-配置中文语音提示等
1.批量创建用户 用户配置文件在conf/directory/default/目录下, 每个用户对应一个XML配置文件 Freeswitch默认提供了1000~1019这20个用户, 如果手动创建另一 ...
- vos3000如何检查落地网关配置正常,路由分析
可以在"对接网关"或者"话机"上右键选择"路由分析" 填入呼入的主被叫号码(该号码一定要是原始的号码,没有经过对接或话机规整的) 1.点击查 ...
- 智能外呼系统相关资料总结
以下是从零开始搭建智能外呼系统的过程中收集的一些资料,希望对你会有帮助. 1.如何从零开始搭建智能外呼系统 参考:https://blog.csdn.net/pA2elX78qaJTADH/artic ...
- freeswitch软电话配置、结合讯时网关,外线电话呼入、呼出配置
文章目录 软电话配置 配置外部电话呼入sip软电话 配置sip软电话呼出 交换机后台配置 参考资料 软电话配置 不同的软电话配置大同小异.FreeSWITCH 默认配置了 1000 ~ 1019 共 ...
最新文章
- 如何设计一个通用的权限管理系统
- R语言实战应用精讲50篇(十六)--如何实现文字云可视化
- 内网通 去广告 代码_一文秒懂Facebook广告投放常见专业术语
- spring-boot注解详解(六)
- clickhouse官方文档_clickhouse分析:结合grafana和metabase完成监控和数据分析
- 【移动端html5】 android video播放进度精确控制
- PLSQL Developer连接数据库报错ora-12514解决
- RabbitMq(十二) 借用死信交换机实现延迟队列
- 原生JS那些事:原生JS添加和删除class类名
- postgres数据库授权失败
- hadoop使用场景
- 如何使用奥特歌词制作双语LRC字幕
- 突发!阿里巴巴大调整
- 深度学习WideDeep模型——记忆能力和泛化能力的综合
- openEuler-risc-v学习笔记
- python 处理锯齿波信号
- 十分钟掌握 “UML ” 的基本使用
- Day 41 Mysql高级操作
- Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码
- 时钟偏差、延迟、不确定度、抖动 (skew,latency,uncertainty,jitter)