前言
企业为了确保网络安全,普遍部署各种防火墙,作为边缘和隔离设备,将企业的信任和非信任网络(一般外网非信任,内网为信任)分隔开来,避免直接访问。同时,防火墙兼具NAT功能,隐藏内网并代理内网对外网的访问。
由于防火墙的存在,部署SBC变得较为复杂。某些情况下还需要防火墙的配合,才能够完成SIP信令和语音流的防火墙/NAT穿透。
就防火墙和SBC的位置关系,一般分成两种模式:近端防火墙,也就是SBC在防火墙内,对接的设备在近端防火墙外或者在远端防火墙内;远端防火墙,也就是SBC在防火墙外,对接的设备在防火墙内。
这两种模式下,毅航互联SBC均可以完成信令和媒体的正确穿透。
一、方案简介
1、概述
毅航互联SBC充分考虑了近端和远端防火墙对信令和媒体的影响。在信令层面通过对From/To/Contact/rport/SDP等IP地址进行处理,反映出实际的对接地址,避免信令不通,摘机超时,挂机挂不断等问题。
同时,SBC支持OPTIONS/REGISTER等心跳模式(接收或者发送),用于保持防火墙的session(保活),保证防火墙/NAT的端口可用和不变化。
媒体通过识别远端的IP/PORT,然后向这个IP/PORT发送媒体包的方法,达到各种NAT情况的穿透。
合理的防火墙穿透方式
防火墙/NAT有各种模式和对应的各种穿透方式。但是,较为合理的穿透方式是从防火墙外网IP/PORT收到包,回应或者主动发的包再送回这个IP/PORT。
示意图如下图:
2、防火墙SIP ALG
由于现在的防火墙普遍内置SIP ALG(应用层代理),此功能会对SIP信令和媒体产生很大的影响。但是,由于ALG的实现一般不完善,很容易使得信令和数据不通和单通等各种问题,导致各种不可预测的问题,所以需要将防火墙的SIP ALG功能关闭。
毅航互联在大量的工程支持中,SIP ALG基本上都会导致问题。建议将此作为一个部署的前置检查项,避免在联调时再检查,会耗费比较多的时间。
3、 远端防火墙
当SBC对接的设备处于防火墙之内,SBC处于防火墙外时,就构成了远端防火墙模式。比如:SBC放公网,代理内网的座席注册;或者对接内网的PBX等等。
由于NAT的存在,SBC看到的SIP信令信息和媒体的信息均和原始的信令不同,必须采用一些特别的处理方式来应对这种情况。
逻辑结构
远端防火墙的示意结构如下图:
注意:
a、图中用单层防火墙做示意,实际上这种模式可以支持多层防火墙。
b、SBC可能在防火墙内。这种模式放到近端防火墙做讨论,不影响远端防火墙的逻辑结构。
c、一般将防火墙内的设备作为客户端,毅航互联SBC作为服务端,便于建立和维持互通。
信令配置
为了自动的远端防火墙穿透,一般将防火墙内部的设备(座席、PBX等)作为客户端,而防火墙外部的SBC作为服务端。
由客户端向服务器发起周期性的心跳(比如:注册REGISTER、OPTIONS等),周期时间控制在120s以内,这样就可以维持防火墙的session,达到保活的目的(也就是防火墙不关闭外网的端口,SBC可以从这个端口向内网设备主动发信令消息)。
各种内网设备均有自己不同的配置界面,一般都可以找到相应的注册和OPTIONS的配置。找到相应的配置后,按照要求进行配置后即可。
SBC侧无需对信令做特别配置。
对于像PBX等设备,可能不能够配置为客户端,此时需要在防火墙上做映射,将PBX的信令IP/PORT映射到防火墙的外网,这样SBC才能够访问。
毅航SBC支持SIP在TCP协议上传输,如果UDP穿透存在难以配置的情况,也可以通过采用TCP协议来完成信令的穿透。采用TCP协议时,建议采用永久连接,避免连接断开而导致防火墙的阻断。
信令穿透
内网设备无需做特殊的协议修改,所有的穿透由SBC完成。
由于内网设备配置的是内网IP地址,经过防火墙后,这些地址对于SBC来讲是无效的(无法访问),如果根据这些地址作为后续信令的传输地址,将无法通信。
比如:发送挂机BYE SIP信令时,远端地址来自于内网设备 INVITE SIP信令Contact头域中的IP地址和端口。此时肯定是内网的IP地址,就会导致BYE SIP信令无法触达内网设备,导致不能够挂机。
又比如:SBC会根据INVITE SIP信令中的From/To/Contact等头域中的IP地址校验有效性,或者进行中继组的匹配。穿透模块会用TCP/IP协议栈的真实IP/PORT替换相应的域,达到有效校验或者匹配的目的。
毅航SBC会用从网络协议栈收到的真实IP/PORT替换上述的关键头域中的IP/PORT等信息,满足安全和中继组识别等要求。并且将给内网设备的SIP信令送给上述真实的IP/PORT,保证了信令可以触达内网设备。
媒体穿透
和信令类似,SBC在收到内网设备发送的RTP/RTCP包后,识别出真实的IP/PORT,然后将送给内网设备的RTP/RTCP包转发到此IP/PORT,完成穿透。
毅航SBC的媒体引擎有多种模式用于帮助媒体的穿透和适应变化:
断流检测
在一定时间内没有收到对端的RTP包视为断流,将触发告警,用于主动挂机或者reinvite重协商。
NAT等待
在未收到对端包,端点学习未完成的情况下,不执行向这个端点的包转发。
非对称端点
只接受SDP中地址的包,关闭远端端点学习功能。
严格端点地址
执行一次远端端点学习,识别出远端端点后,将只转发此端点的包。
端点开放模式
转发过程中会重学习,可能导致远端端点的切换。
4、近端防火墙
当SBC处于防火墙之内时,就构成了近端防火墙模式。
由于近端防火墙/NAT的存在,防火墙和SBC均需要做一些配置才能够完成穿透功能。
逻辑结构
近端防火墙的示意结构如下图:
如下图,外部网络处于防火墙内部也是比较常见的场景,此情况也归类为近端防火墙,要求是相同的。
注意:
a、近端防火墙尽量使单层防火墙,如果是多层防火墙,可能会涉及到每层防火墙的修改,导致维护上的问题。
b、远端设备是否在防火墙内,不影响近端防火墙的逻辑结构。
c、一般将毅航互联SBC作为服务端,远端设备作为客户端,便于建立和维持互通。
防火墙配置
需要将SBC的地址映射到防火墙的外网,并且可以只开放信令端口和媒体端口段。
映射建议采用简单的开端口模式(有些叫开服务),避免复杂的IP地址替换之类的策略,避免对原始数据的修改,从而影响穿透的效果。
注意:
a、防火墙开端口不修改防火墙的安全和过滤规则,不要降低防火墙的安全要求。
b、建议打开的SIP信令端口和SBC上配置的信令端口相同,减少问题查找时的转换。
c、媒体端口需要开放一个端口段,缺省为40000~60000。可以根据并发(一通音频呼叫需要两个UDP端口)量调整端口段的范围,此值必须和SBC上的配置一致。
d、上述端口转发的规则是一一对应的。也就是防火墙40000端口收到包,需要转发到SBC的40000端口,其他依次类推。
SBC信令配置
除了在防火墙外网配置信令的IP和端口外,还需要在对接的SBC SIP栈上配置相应的信息,用于在送给远端设备的信令中反映出这种变化。
需要在SIP栈上面进行的配置如下图:
SBC媒体配置
目前采用修改配置文件的方式,后续会在web上进行修改。
二、 问题分析
日志分析
当出现问题时,建议首先进行日志分析,确认SBC收到呼叫,并且动作正常。
抓包分析
由于在防火墙上抓包可能会比较困难,首先需要在SBC上进行抓包,分析呼叫流程是否正确,媒体流是否存在?
在SBC上确认正常后,就需要防火墙配合抓包,此时就需要防火墙对内外网均抓包,查看问题是出在外网、内网还是防火墙的转发规则。
服务热线 : 020-38781309