NAT导致视频监控平台无法拉取视频流故障一例

工作需要访问一个外网视频监控平台,之前一直使用没有问题,突然有一天发现平台能正常访问,但无法看到监控视频。联系了平台方也没有找到问题原因,最后对方说不能做NAT。网络一直在做NAT,怎么会突然有问题?

同事把公网IP配置在本地计算机上,跳过NAT后故障消失,说明确实NAT导致问题。这个网络的NAT配置在了紫光防火墙上,可以通过抓包可以分析下问题。

一、抓包分析原因

先在本机计算机上用wireshark进行抓包,看看和服务器是如何通信的。

通过抓包,可以找到很多通信报文,其中比较特别的是SIP协议报文,我以为监控平台直接用的HTTP协议通信。把SIP协议报文发给AI帮忙分析一下,AI确实很有帮助,解释的很清楚但没有真的解决问题,这是个伏笔。

通过AI帮助分析,得知提供监控视频的服务器,采用了SIP协议注册,RTP协议拉监控视频流的方式工作。通过上图中的SIP注册报文可以看到,携带的注册信息Via部分为局域网本地ip x.x.x.217(箭头处)。如果SIP服务器收到的注册报文该字段也是局域网ip x.x.x.217,sip可能会把此IP地址作为回包地址。RTP的视频流会给到此局域网IP,而非实际通信的公网IP,则会出现通信故障。是否是这么回事,需要在防火墙的外网口上抓包进一步查看。

在防火墙外网口抓包,同样抓到SIP注册报文。通过上图注册报文可以看到,报文源IP已经经过防火墙的NAT转换替换成了公网IP x.x.x.252,但是报文中的Via注册信息仍显示局域网IP x.x.x.217。如果SIP服务器没有特殊设置,或者本地计算机上程序没有特殊设置,SIP会使用这个注册IP地址进行通信导致故障。

二、故障解决

之前了解sip协议还是在视频会议系统中有SIP、H.323两个协议,视频会议终端有会有nat穿越设置,应该就是视频会议终端发起SIP注册时使用公网IP注册,规避NAT问题。

联系了平台方,对方还是说不能NAT,只能从防火墙上想办法。实际上,一般防火墙有一个ALG功能就是解决NAT后FTP、H.323、SIP等协议通信问题的。像sip alg会在报文NAT转换时,同时把注册信息中的ip替换成公网ip。但是紫光防火墙的ALG功能好像没生效,紫光防火墙web界面也没有alg相关配置。

联系了紫光400售后客服,提醒39824不是sip标准端口,可以自定义SIP端口。按售后建议修改后,故障解决。SIP ALG生效后在出接口抓包如下图。

上面这个NAT后的报文可以看到,注册IP已经是公网IP x.x.x.252,这样SIP回包也就正常了。很奇怪,查了一下39824确实不是标准sip端口,但wireshark却能正确识别协议,让我一开始没往非标准端口上考虑。

总结一下,因非标准SIP端口,防火墙SIP ALG未生效,导致监控视频流异常。