IoT 中心设备流 Device Streams
本文介绍:
Azure IoT Hub 设备流(device streams) 基本概念;
案例1使用设备流“穿透”防火墙进行远程桌面连接(RDP3389或SSH22);
案例2使用设备流“穿透”防火墙配置设备侧web
视频介绍:
您可以在B站观看视频介绍:https://www.bilibili.com/video/BV1QC4y1H7uG/
或在本站观看:
图文介绍:
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的形式即可访问设备中的配置页面: