TR111之Connection Request via NAT Gateway
通過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)。
1)Binding Request
UDP為了建立在CPE(圖中SourceIP)與STUN server(圖中DestinationIP)之間的鏈路。STUN攜帶的CONNECTION-REQUEST-BINDING表示CPE正在偵聽UDP連線請求的繫結,USERNAME用於訊息的完整性(RFC2489)。
2)Binding Response
CPE對映在公網的IP和埠分別為45.116.9.232和1025。2、Binding Request from secondary source port for binding timeout discovery 下圖顯示了CPE從其輔助源埠傳送的繫結請求,用於發現主繫結在NAT閘道器中是否超時。在這種情況下,繫結請求不包括CONNECTION-REQUEST-BINDING屬性,因為它不是從主源埠傳送的。
1)Binding Request
2)Binding Response
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通知來更新繫結資訊。
1)Binding Request
Bingding Response同第一種情況。
這樣就使得CPE與STUN伺服器之間建立鏈路連線,能夠讓STUN伺服器響應ACS後找到CPE。
四、ACS的UDP Connection Requests
1、當ACS對CPE進行指令操作時,需要找到CPE,此時向STUN伺服器傳送UDP連線請求,抓包如下圖所示: 可以看出UDP連線的請求是在ACS的3478埠與CPE對映公網的54320埠之間。 2、UDP訊息如下圖所示: 請求線中給出的方法必須是“GET”,以及連線請求的ACS地址,時間戳,訊息ID,使用者名稱,ACS隨機選擇的字串,以及最後的簽名。 3、接下來CPE接收到來自ACS的連線請求,對應的RPC為Inform“6 CONNECTION REQUEST”,CPE與ACS之間建立TCP連線, 追蹤其TCP流: