部分物聯網設備基于安全的考慮或因部署于私有網絡內部,是無法在外網直接訪問設備上的服務的。物聯網平臺提供設備安全隧道產品功能,助您建立雙向安全的通信鏈路,您可基于該通信鏈路實現對設備的遠程訪問、遠程診斷和管理等功能。
背景信息
物聯網平臺的安全隧道功能應用于遠程登錄設備中已有服務的場景,例如設備原本的上位機軟件診斷能力,可通過安全隧道服務的遠程連接功能實現設備的遠程診斷。
安全隧道的使用場景和使用說明的更多介紹,請參見安全隧道概述。
本文以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服務的測試。