部分物联网设备基于安全的考虑或因部署于私有网络内部,是无法在外网直接访问设备上的服务的。物联网平台提供设备安全隧道产品功能,助您建立双向安全的通信链路,您可基于该通信链路实现对设备的远程访问、远程诊断和管理等功能。
背景信息
物联网平台的安全隧道功能应用于远程登录设备中已有服务的场景,例如设备原本的上位机软件诊断能力,可通过安全隧道服务的远程连接功能实现设备的远程诊断。
安全隧道的使用场景和使用说明的更多介绍,请参见安全隧道概述。
本文以Linux系统设备为例,为您介绍通过安全隧道实现远程访问设备的方案。
本示例中的安全隧道通过控制台页面手动创建,您可以参考本文示例中安全隧道实现方式,基于实际业务需求,设计开发自己设备中本地服务的远程访问功能。
设备端开发
准备工作
本示例以一机一密认证方式为例,获取信息如下:
{ "ProductKey": "a1WvA***", "DeviceName": "device2", "DeviceSecret": "ff01e59d***ba2ca2b17" }
定制SDK时,在SDK定制页面的高级能力区域,选中远程登录,集成包含安全隧道功能的设备端SDK。
本文示例使用Linux系统开发环境,且安装能在端口号7启动的Echo服务进程Xinetd。
重要本示例中设备与访问端数据通信需依赖Xinetd服务,因此必须完成Xinted服务配置并启动。
启动设备端例程
解压获取的SDK压缩包,在C Link SDK中的Demo文件
LinkSDK./demos/remote_access_basic_demo.c
中完成以下配置并保存。设备端C Link SDK开发更多内容,请参见C Link SDK概述。将设备证书信息替换为已获取的测试设备的证书信息。
将设备接入的mqtt_host值替换为当前设备所属企业版实例的MQTT接入地址。
在服务列表中增加ECHO服务的配置,原_SSH服务不可删除。
配置信息如下图所示。
登录Linux虚拟机,将上一步骤中已修改完成的LinkSDK文件,上传至Linux虚拟机的开发环境。
在SDK根目录/LinkSDK下,执行
make
命令,完成样例程序的编译,然后运行样例文件。./output/remote-access-basic-demo
查看运行日志,显示如下信息,表示设备正常在线且安全隧道SDK正常启动。
登录物联网平台控制台,进入企业版实例页面,在左侧导航栏选择设备管理 > 设备,找到目标设备,确认设备状态为在线。
创建安全隧道
按照以下操作,在物联网平台控制台添加目标设备的安全隧道。您也可调用物联网平台云端API CreateDeviceTunnel创建安全隧道,使用说明,请参见云端SDK。
登录物联网平台控制台。
在实例概览页面,单击目标企业版实例,进入实例详情页面。
在左侧导航栏选择监控运维>安全隧道。
在安全隧道页面,单击创建安全隧道。
在创建隧道对话框,设置以下参数,单击确认。
在弹出的对话框中,单击一键复制,保存安全隧道ID、访问端Token和URL信息。
安全隧道创建成功后,设备端会收到建连通知,安全隧道的SDK会使用该建连通知中的信息与物联网平台建立WebSocket连接。消息如下:物联网平台控制台的监控运维>安全隧道页面,显示安全隧道已打开,设备端已连接。
访问端开发
准备工作
下载设备ECHO服务的访问端示例代码。详细内容,请参见alibabacloud-iot-java-demo。
准备开发环境。本文使用Java开发环境,具体如下:
操作系统:Windows 10 64位
JDK版本:JDK8(支持更高版本)
集成开发环境:IntelliJ IDEA社区版
启动访问端例程
解压已下载的示例代码包。
打开IntelliJ IDEA,导入解压后的示例工程。
在com.aliyun.iotx.lp.demo.secure.tunnel.echo下EchoServiceDemoTunnelSourceTest.java文件中,配置已保存的安全隧道ID、访问端Token和URL值。
运行EchoServiceDemoTunnelSourceTest.java示例代码,启动访问端的主程序后,该程序会使用配置的访问端建连信息与物联网平台建立WebSocket连接,创建ECHO类型的会话(Session)。运行日志如下图。
重要本示例代码中,添加了结束程序的代码(
Thread.sleep(20 * 1000);
),即程序启动成功,运行20秒后会结束。实际场景中,您可根据需要自行设置运行时间。Session创建成功后,即可进行设备ECHO服务的测试。