FreeSWITCH关于穿越NAT的那点事儿

转载自:http://blog.csdn.net/liang12360640/article/details/38110095

FreeSWITCH关于穿越NAT的那点事儿

NAT的种类:Full Cone NAT(全锥型NAT)、Restricted Cone NAT(限制锥型NAT)、Port Restricted Cone NAT(端口限制锥型)、Symmetric NAT(对称型NAT)。

四种类型的区别请自行百度,网上讲的很详细,本地NAT的类别,可借助于工具或自行检测。


FreeSWITCH帮助终端穿越NAT的解决方案:

1、SIP穿越

FreeSWITCH默认使用ACL来判断对方是否处于NAT环境中,配置:

nat.auto是一个ACL,包含了RFC1918规定的私网地址,并去掉了本地网络的地址。当SIP终端注册时,通过比较contact地址是否包含在此ACL中来判定该终端是否处于

NAT背后,如果是那么它就把contact地址自动替换为SIP包的来源地址,后边的呼叫就可以正常抵达。


2、RTP穿越

NAT环境的SIP终端SDP信息中的IP地址是私网地址,FreeSWITCH无法直接发送RTP包,而NAT设备基本都只允许内网主机曾经接触过的外网主机发送的UDP数据包

进入。FreeSWITCH使用了一个名为RTP自动调整的特性,在SIP协商时给对方一个可用的公网RTP地址,然后等待客户端发送RTP包,一旦FreeSWITCH收到RTP包后,

就可以根据对方发包的地址给它发RTP包了。此类情况发生时,Log中可看到类似信息:

[INFO] switch_rtp.c:4753 Auto Changeing port from 192.168.1.100:50496 to 1.2.3.4:50496

注意:此办法存在安全性问题,如某黑客向随机的RTP端口发数据包,FreeSWITCH收到后将远端地址调整到黑客的IP和端口,进而RTP数据全部跑歪了。所以为了防止

这个问题,FreeSWITCH规定这种端口调整只能在电话开始的时候进行,且仅支持一次调整。

自动调整的功能默认是开启的,可在Profile中禁用:

或者仅针对个别的呼叫来禁用自动调整,在呼叫时设置通道变量"rtp_auto_adjust=false"来禁止。


SIP终端自己的解决方案

1、STUN服务

STUN的原理是:在公网上部署一个STUN服务器,位于NAT后面的客户端设备向它发送一系列的UDP包先在NAT设备上“打洞”,STUN服务器取到UDP包的来源地址后,

回送相关的消息告诉该客户端它被映射的外网地址。

大多数的SIP话机及软电话均可以选择是否启用STUN服务。使用STUN后,SIP消息的contact头域中就可以直接填入外网地址。

注意:STUN服务对于锥形NAT是有效的,但对于对称型NAT就无能为力了。简单讲就是SIP终端从STUN服务学习到的IP及端口会失效,如果两个SIP终端分别处于两个

对称型NAT之后,则它们是无法进行通信的。


2、ICE

综合利用STUN和TURN(使用转发方式进行穿越的NAT,主要用来解决对称型NAT的问题,FreeSWITCH不支持该技术,但支持与TURN的SIP客户端配合工作)等技术,

使之在最合适的情况下工作。比如,如果两个SIP终端处于相同的NAT后面,则他们可以直接用内网地址进行通信;如果位于不同的NAT后面,并且是锥型NAT,则选择从

STUN服务器获得外网地址进行通信;如果是对称型NAT,则只能通过TURN来通信。


FreeSWITCH处于NAT后面的解决方案

1、uPnp

FreeSWITCH支持通过uPnP或NAT-PMP协议在路由器上“打洞”,打洞完成后就知道自己将要映射的外网地址了,前提是路由器支持uPnp功能并开通。FreeSWITCH

检测到NAT以后,设置Profile的外网SIP和RTP的IP,通过命令 freeswitch@sword>sofia status profile external 可查询Ext-SIP-IP和Ext-RTP-IP的值。

自动检测NAT的配置在external.xml中:


2、STUN服务

如果路由器不支持uPnp及NAT-PMP协议,那么可将上述配置改为:

使用命令 freeswitch>stun stunserver.org 可检测该服务是否有效。


3、手动设置

手动找出路由器的外网IP地址后,以下两种方法都可设置:

或者


4、DNS服务器

部署DNS服务器,如host:sip.sword.com,通过域名解析获得外网的IP地址。

此方法的好处是,外网和内网的SIP终端用户都可以通过域名注册,如果有移动办公的用户,就不用经常更换内网地址或外网地址注册了。


你可能感兴趣的:(freeswitch)