FS NAT穿越、单通及呼入30秒自动挂断解决


网络拓扑

  SIP客户端->外网->防火墙->FS
可以明显的看出,sip客户端是在一个网络环境,FS在另外一个网络环境,主要靠“外网”联系起来(FS所在网络有固定IP)!
网络拓扑.png

配置之路

internal.xml

  • 设置sip和rtp的外网地址
    填上你的stun服务器,如:stun.ideasip.com、stun:stun.freeswitch.org,也可以设置成你的外网IP,具体操作你可以试试,我这里填的是FS所在的外网固定IP。
  <param name="ext-rtp-ip" value="你FS外网固定IP"/>
  <param name="ext-sip-ip" value="你FS外网固定IP"/>

external.xml

  <param name="ext-rtp-ip" value="你FS外网固定IP"/>
  <param name="ext-sip-ip" value="你FS外网固定IP"/>

switch.conf.xml

设置RTP端口开放从10000到20000,你也可以使用默认(从16384到32768)的,但是有的防火墙最多只支持一次设置间隔200,多了要设置到你哭,比如华为的usg6550防火墙……这里我们设置10000个够了,如下:

	<param name="rtp-start-port" value="10000"/>
	<param name="rtp-end-port" value="20000"/>

在防火墙上映射fs的sip端口和rtp端口

注意 * 端口号10000-20000对应的是switch.conf.xml预先修改的 rtp-start-portrtp-end-port

端口号 协议
1719 UDP
1720 TCP
3478 UDP
3479 UDP
5002 TCP
5003 UDP
5060 UDP&TCP
5070 UDP&TCP
5080 UDP&TCP
8021 TCP
10000-20000 UDP
5066 TCP
7443 TCP

--
如果你没有改动switch.conf.xml文件的默认端口,那么上面的10000-20000 UDP应该是16384-32768

映射好后在外网使用一个软电话注册登陆FS并拨9664,正常情况下可以听到一段回铃音乐,如果你没有听到,请参考下面我碰到的问题及解决思路。

碰到的问题

这里记录的是本人实际碰到的问题和解决方法,对你不一定有用,请只做参考!

拨9664或者软电话之间对打单通

按上面的配置拨9664,听不到声音;使用两个软电话互打只听到一边有声音。抓包分析没发现什么异常。

修改映射的外网5060,改成其它没有被占用的端口,比如7898。也可以一同把var.xml文件里面的5060一同改掉。把默认的5060改掉后拨打9664和使用两个软电话互打神奇的解决了单通问题(可能是5060被运营商和谐掉了,这里本人并不清楚具体原因)。

使用外网的软电话通过FS拨打手机号,单通

使用外网的软电话通过FS拨打手机号,单通,经检查发现使用的网关有NAT功能。

本人使用的网关在SIP设置菜单中有“自动Nat”、“开启STUN”“开启Rport 自动探测NAT IP”“开启RTP自适应”经过多次测试,发现“开启RTP自适应”选项钩选后可解决“使用外网的软电话通过FS拨打手机号,单通”的问题。

呼入30秒后自动挂断

通过以止配置步骤,使用外网注册上来的的软电话之间互打、使用外网注册上来的软电话直接通过网关拨打电话号码,均正常。但是,如果使用手机通过“网关”->“FS”进行呼入声音一切正常,发现每次都准确的在30秒自动挂断!
本人尝试添加:

<variable name='sip-force-contact' value='NDLB-connectile-dysfunction-2.0'/>   
<action application="set" data="sip_sticky_contact=true" />

然后并不起效!

抓包分析

呼出单通包.png

  • 先看INVITE SDP包
    主要看Message Header消息的Contact
    呼出单通INVITE包.jpg

发现INVITE SDP包的Contact使用的正是网关所在内网IP及端口,这里并没有问题!

  • 再看fs回的200 OK消息
    FS回200OK消息.jpg

发现200 OK包的Contact使用的是FS所在外网IP及端口
200OK回外网IP及端口.jpg

这样就导致了FS收不到发回来的ACK消息,超时30S后就自动挂断了,这里应该是FS所在的内网地址(不改成内网也可以,要保证外网的映射端口是通的就不存在这个问题)!

修改配置文件

打开internal.xml,external.xml分别找到
<param name="ext-sip-ip" value="你FS外网固定IP"/>
把它注释掉或者改成:
<param name="ext-sip-ip" value="$${local_ip_v4}"/>
本人是直接改成<param name="ext-sip-ip" value="$${local_ip_v4}"/>没有注释。
呼入、呼出测试,一切正常!至此,呼入30秒后自动挂断的问题顺利解决,非常感谢@noname大佬的顶力相助!本人特地记录此文,方便后来人进行参考!谢谢!!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM