IoT 中心設備流 Device Streams
本文介紹:
Azure IoT Hub 設備流(device streams) 基本概念;
案例1使用設備流“穿透”防火牆進行遠程桌面連接(RDP3389或SSH22);
案例2使用設備流“穿透”防火牆配置設備側web
視頻介紹:
您可以在B站觀看視頻介紹:https://www.bilibili.com/video/BV1QC4y1H7uG/
或在本站觀看:
device stream-如何優雅的遠程維護物聯網設備
圖文介紹:
Azure IoT 中心設備流(device streams) 爲IoT device 和 Service 之間建立一個安全的雙向TCP通道,原理是設備和服務均利用IOT 中心的 流式處理終結點作爲代理,在無需配置防火牆的情況下(即官網所謂的防火牆友好方式),實現雙向通訊。
此功能在設備處於企業內網或者局域網的時候,非常有用,基本上基於TCP的通訊都可以使用,本文演示Windows 系統的RDP遠程桌面登錄,對於linux 的ssh 也是可以進行測試的。
設備側需打開443端口,以實現設備到IOT Hub的流式處理終結點的TCP 連接。 建立設備流後,服務端和設備端應用程序將通過 WebSocket進行通信。
優點:
IoT 中心設備流具有以下優點:
-
防火牆友好的安全連接:設備側只需要打開443出站端口即可(僅需要端口 443 上到 IoT 中心的出站連接)。
-
身份驗證: 設備和服務端均通過 IoT 中心進行身份驗證。
-
加密: 默認情況下,IoT 中心設備流使用啓用了 TLS 的連接。
-
與 TCP/IP 兼容性: IoT 中心設備流可以接納 TCP/IP 應用程序流量。
-
專用網絡設置下的易用性: 服務可以通過引用設備 ID(而不是設備的 IP 地址)與設備通信。
示例:
本例子參考文檔:https://docs.microsoft.com/zh-cn/azure/iot-hub/iot-hub-device-streams-overview
本例中設備側和服務側均採用C#語言(注意,設備側C語言SDK也是支持的),參考示例代碼如下:https://github.com/Azure-Samples/azure-iot-samples-csharp/archive/master.zip
本例子的windows device 和 Servcie 側需要安裝.NET SDK, 下載連接:https://dotnet.microsoft.com/download/dotnet-core/2.1
本文示例與下圖類似,但我們把Device 換成了windows device,這樣對應的22端口和SSH要變更爲 3389 和RDP遠程桌面連接。
本示例種支持的區域有:(截止到2020.05.18,只在global如下區域支持:)
目前僅以下區域中創建的 IoT 中心支持設備流預覽:
- 美國中部
- 美國中部 EUAP
- 東南亞
- 北歐
重點步驟:
創建在上述區域中創建IoT Hub和一臺windows 10的 虛擬機作爲Device 使用,本例中選擇離我們較近的東南亞區域:
注意IoT Hub中的流式處理終結點,此處無需做配置,只需知道這個參數即可:
在IoT Hub中創建一個設備:
登錄虛擬機中,安裝.NET CORE SDK:
案例1,使用設備流“穿透防火牆”打開遠程桌面:
在設備側下載並運行示例代碼,代碼路徑如下:
設備側依次運行 :
dotnet build
dotnet run {DeviceConnectionString} localhost 3389
設備側如下圖所示:
服務側下載同樣的代碼並在服務側使用如下代碼:
在服務側依次運行如下代碼:
dotnet build
dotnet run {ServiceConnectionString} {your-Device-id} 2222
服務側示例如下:
在本地打開RDP 進行遠程登錄:
如下圖,使用localhost:2222連接成功:
案例2,使用設備流“穿透防火牆”打開設備配置頁面:
通過Device Streams 打開設備/系統配置頁面:
在虛擬機中部署了一個靜態網站並使用8090端口訪問,如下圖所示:
在服務側(本地)運行服務側代理程序後,通過localhost:2222的形式即可訪問設備中的配置頁面: