freeswitch新手探索-30秒挂断问题

准备工作

将fs的配置文件从docker内部copy到外部,方便修改

在这里插入图片描述
现在我们只需要在容器外部即可通过ide或者更直观的方式修改fs的配置文件了…我不是vm大神

30秒自动挂断问题

上一节我们看到在刚注册的默认的分机中1000打到1001的时候,接通之后30秒就自动挂断了,原因是什么呢,其实是由于sip消息地址不对引起的。

  1. 我们通过命令查看一下sofia的地址

在这里插入图片描述
可以看到是113.248.5.182,
我们再看一下全局变量里的东西,然后搜一下2个全局变量external_rtp_ip和external_sip_ip
在这里插入图片描述
接着我们改一下日志级别,执行命令

console loglevel 7

然后我们打开sip追踪日志,执行命令

 sofia profile internal siptrace on

接着我们在用1000给10001打一个电话试一下,会看到比刚才更多的信息打印出来了。

在这里插入图片描述

我们可以看到在协议中,出现了这个ip地址,这特喵明显是个外网地址啊。

ok,为啥contact和via里的1000的会被替换成这个ip呢,直接上终极大杀器sngrep

apt-get install sngrep

sngrep是一个实时可视化sip抓包工具,具体用法自己搜索。
重新打个电话,用sngrep检测一下。结果:
在这里插入图片描述
可以看到在fs给1000发183后contact被替换成了113.248.5.182,导致fs收不到1000返回的ack,于是出现了一个的现象:1000给113.248.5.182发ack,fs收不到就一直发送200 OK,然后就gg了。

解决方案

在这里插入图片描述

这个地方,可以看到,ext-rtp-ip和ext-sip-ip使用的是全局的external_rtp_ip和external_sip_ip,怎么改呢,注释掉这两行代码即可。
然后重启即可。

重启之后问题依旧存在,不过那个外网ip已经不存在了。所以怀疑端口问题,修改conf/autoload_configs/switch.conf.xml文件,找到在这里插入图片描述
将这两行注释干掉,同时改成在这里插入图片描述
,在docker-compose文件中将端口映射出去试试,
在这里插入图片描述
,重新启动容器再试一下。

最后发现还是不行,用sngrep抓包查看。
发现fs在1000回183的时候带的contact是fs的容器内的地址,1000想回ack也找不到这个地址啊,不过由于我们把internal.xml里面的ext-sip-ip改成我们的容器外的局域网地址。就像这样:
在这里插入图片描述

再打个电话看看,ok,30秒不挂断了。然后用sngrep抓个包看看。
在这里插入图片描述

contact已经变成了我们的宿主机的局域网地址了。

发现没声音,一样的,只需要把ext-rtp-ip也改成我们的局域网ip就行了。
完结,撒花🎉

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值