freeswitch如何解决sip信令的NAT问题

概述

freeswitch是一款简单好用的VOIP开源软交换平台。

公网环境复杂多变,客户环境更是各种稀奇古怪的问题。

fs在针对sip信令的NAT问题有针对性的参数设置。

本文讨论的范围限于fs的公网地址正常没有在NAT后面的两种常见场景。其他更多更复杂的NAT场景暂不讨论。

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.10.7

GCC:4.8.5

客户端NAT

客户端NAT场景,客户端部署在NAT后面,这种场景在普通办公网最常见。

eyebean(私网) -> NAT(公网) -> fs(公网)

该场景最常见的问题,200OK消息无法正常返回A路,导致32秒后自动挂断。

解决办法,修改conf/sip_profile/external.xml。

<param name="aggressive-nat-detection" value="true"/>

aggressive-nat-detection参数的作用,如果接收到请求的网络IP/端口与Via头中的IP/端口组合不同,启用NAT模式。

后续的消息将使用实际请求的网络IP/端口来响应。

呼出中继NAT

呼出中继NAT场景,呼出的对端中继设备在NAT后面,该场景多见于客户自建中继设备。

fs(公网) -> NAT(公网) -> siptrunk(私网)

该场景最常见的问题,ACK消息无法正常发到siptrunk,导致32秒后自动挂断。

解决办法,修改conf/dialplan/public.xml,在呼出流程中增加配置。

<extension name="test-sticky">

    <condition field="destination_number" expression="^(\d+)$">

       <action application="set" data="sip_sticky_contact=true"/>

       <action application="bridge" data="${as_bridge_str}"/>

    </condition>

</extension>

sip_sticky_contact参数的作用,针对响应的200OK消息中的实际地址与contact地址做比较,ACK消息使用真实地址响应。

总结

本文仅仅讨论了两种比较简单常见的NAT问题,公网环境中的NAT问题更加的复杂多变。

对于NAT问题的通用思路是想办法找到对方或自己的公网地址,在消息传递过程中使用各种手段透传过NAT网关。

空空如常

求真得真

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值