TR111之Connection Request via NAT Gateway

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a_studycx/article/details/82803380

通过NAT网关的连接请求(Connection Request via NAT Gateway)

一、介绍

TR-069中定义的cwmp用于远程管理通过网关通过LAN连接的CPE设备。当ACS管理通过NAT网关连接的设备(其中设备已经被分配了私有IP地址)时,TR-069仍然可以用于设备的管理,但限制是TR-069中定义的允许ACS发起会话的连接请求机制不能够使用。
TR-111允许ACS启动与在NAT网关后面操作的设备的会话。这提供了与TR-069连接请求的等效功能,但是要使用不同的机制来解决这种情况,该机制仅在设备和相关ACS中需要支持。

二、过程

为了适应ACS通过可能不具有TR-069能力的NAT网关向CPE发出相当于TR-069连接请求的能力,以下流程是必须的:

  • CPE必须能够发现其到ACS的连接是通过已经向CPE分配了私有IP地址的NAT网关。
  • CPE必须能够保持开放的NAT绑定,ACS可以通过该NAT绑定来发送未请求的数据包。
  • CPE必须能够确定与打开的NAT绑定相关联的公共IP地址和端口,并将此信息传递给ACS。

为了完成上述项目,TR-111定义了STUN机制的特定用途。使用STUN需要定义一个新的基于UDP的连接请求机制来扩充TR-069中定义的现有的基于TCP的连接请求机制。

STUN允许使用UDP连接请求到CPE的过程概括如下:

  • ACS允许在CPE中使用STUN(如果工厂默认情况未启用),并指定CPE使用的STUN服务器。
  • CPE使用STUN确定是否是在一个NAT网关分配一个私有地址。
  • 如果cpe位于可以私有分配地址的NAT网关后,cpe使用定义在STUN的程序来发现绑定超时。
  • CPE以足够的频率发送周期性的STUN绑定请求,以保持其侦听UDP连接请求的NAT绑定的活动性。
  • 当CPE确定其正在侦听UDP连接请求的NAT绑定的公共IP地址和端口时,并且当其随后改变时,CPE将该信息传送给ACS。ACS提供了两种手段,在其酌情处理下,可以从STUN绑定请求消息本身提供的信息,或通过对UDPConnectionRequestAddress参数的更改的通知,CPE必须更新包含公共连接请求地址和端口的信息。
  • 每当ACS希望建立与CPE的连接时,它可以向CPE发送UDP连接请求。为了适应最广泛的NAT网关类型,必须从同一源地址和端口作为STUN服务器发送。

这样建立的实时短连接能够使设备管理者随时发起对终端设备的操作指令。相对于长连接来说,连接对于服务端来说会耗费一定的资源,而像这么频繁的成千上万的设备管理连接用短连接会更省一些资源。终端设备在配置时已经指定了ACS的地址,而ACS不可能存储多如牛毛的终端设备的IP地址,STUN的绑定让CPE与STUN服务器存在一条网络链路,ACS然后发送UDP connection Request到STUN服务器,通过STUN服务器进行转发到与STUN服务器关联的 CPE设备,进而CPE发起tr069规范中定义的6 connection request事件(TCP连接成功)

三、抓包分析

NAT外部的主机无法主动跟位于NAT内部的主机通信,NAT内部主机想要通信,必须主动和公网的一个IP通信,路由器负责建立一个映射关系,从而实现数据的转发。
首先要介绍一下消息流。
1、Binding discovery / maintenance from the primary source port
地址/端口对使用符号(A,P),其中A是IP地址,P是端口。在下图中,CPE使用(A1,P1)作为其主要端口(CPE正在监听的端口)。UDP连接请求消息(A1,P2)是其第二端口(用于绑定超时发现)。当通过NAT网关时,这些地址被翻译为(A1′,P1′)和(A1’,P2’)。在所有的示例中,假定STUN服务器没有次要地址/端口,因此绑定响应中CHANGED-ADDRESS属性包含它的主地址/端口(A3,P3)。
title

1)Binding Request

title
UDP为了建立在CPE(图中SourceIP)与STUN server(图中DestinationIP)之间的链路。STUN携带的CONNECTION-REQUEST-BINDING表示CPE正在侦听UDP连接请求的绑定,USERNAME用于消息的完整性(RFC2489)。

2)Binding Response

title
CPE映射在公网的IP和端口分别为45.116.9.232和1025。
2、Binding Request from secondary source port for binding timeout discovery
下图显示了CPE从其辅助源端口发送的绑定请求,用于发现主绑定在NAT网关中是否超时。在这种情况下,绑定请求不包括CONNECTION-REQUEST-BINDING属性,因为它不是从主源端口发送的。
title

1)Binding Request

title

2)Binding Response

title
CPE映射在公网的IP和端口分别为45.116.9.232和42412。CHANGED-ADDRESS, SOURCE-ADDRESS和REFLECTED-FROM主要用于发现正在使用的NAT类型,但是TR-111不要求这样做,CPE与STUN服务器之间的链路支持任意的NAT类型。
3、Binding change notification authenticated by the ACS
下图显示了绑定更改通知,其中STUN服务器选择使用基于通知的方法,因此不需要对绑定请求进行身份验证,因为ACS使用TR-069通知来更新绑定信息。
title

1)Binding Request

title
Bingding Response同第一种情况。

这样就使得CPE与STUN服务器之间建立链路连接,能够让STUN服务器响应ACS后找到CPE。

四、ACS的UDP Connection Requests

1、当ACS对CPE进行指令操作时,需要找到CPE,此时向STUN服务器发送UDP连接请求,抓包如下图所示:
title
可以看出UDP连接的请求是在ACS的3478端口与CPE映射公网的54320端口之间。
2、UDP消息如下图所示:
title
请求线中给出的方法必须是“GET”,以及连接请求的ACS地址,时间戳,消息ID,用户名,ACS随机选择的字符串,以及最后的签名。
3、接下来CPE接收到来自ACS的连接请求,对应的RPC为Inform“6 CONNECTION REQUEST”,CPE与ACS之间建立TCP连接, 追踪其TCP流:
title

猜你喜欢

转载自blog.csdn.net/a_studycx/article/details/82803380
NAT