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的形式即可访问设备中的配置页面: