不想出差,基于安全隧道技術(shù)在家搞定 IoT 設(shè)備遠(yuǎn)程故障診斷和恢復(fù)
背景
隨著IoT的快速發(fā)展,越來越多的設(shè)備使用IoT能力,實現(xiàn)遠(yuǎn)程的數(shù)據(jù)采集、數(shù)據(jù)分析、設(shè)備管理。然而故障診斷、設(shè)備配置等運維工作卻依然在現(xiàn)場執(zhí)行。如以下場景:
場景一:掃地機器人不工作,寄回廠家返修,廠家用軟件工具檢測發(fā)現(xiàn),只是某個傳感器沾灰了,擦一下就好了。
場景二:某企業(yè)門禁打卡異常,運維人員上門,發(fā)現(xiàn)是因異常斷電導(dǎo)致配置文件錯誤,重新配置一下就恢復(fù)了。
類似場景還有很多,設(shè)備運維目前多數(shù)還是依賴現(xiàn)場運維的方式,時效性和經(jīng)濟性都不高,設(shè)備廠商付出了很大的成本卻沒有換來好的客戶體驗;
如果故障診斷工作能夠提前,診斷后能遠(yuǎn)程操作恢復(fù),將給企業(yè)和用戶都帶來極大的便利。
技術(shù)挑戰(zhàn)
IoT設(shè)備和運維PC都能連網(wǎng),為什么運維PC不能遠(yuǎn)程訪問IoT設(shè)備?
● 沒有公網(wǎng)IP:IoT設(shè)備一般沒有公網(wǎng)IP,可通過NAT網(wǎng)關(guān)連接互聯(lián)網(wǎng),但不能被互聯(lián)網(wǎng)外部設(shè)備通過公網(wǎng)IP直接訪問。
● 沒有訪問權(quán)限:NAT網(wǎng)關(guān)都有自己的安全防護策略,不支持外網(wǎng)直接訪問內(nèi)網(wǎng)設(shè)備。
● 解決內(nèi)網(wǎng)穿透問題,常見的解決方案有NAT穿透或者虛擬專用網(wǎng)絡(luò)(VPN)。
● NAT穿透:也叫P2P打洞,實現(xiàn)免服務(wù)器兩個端點對點通信,但由于NAT網(wǎng)關(guān)類型多穿透過程復(fù)雜,以致成功率低,并不可靠;
● 虛擬專用網(wǎng)絡(luò)(VPN):VPN也是一種遠(yuǎn)程訪問技術(shù),通過公網(wǎng)搭建專有網(wǎng)絡(luò)。IoT設(shè)備一般通過VPN網(wǎng)關(guān)才能使用VPN,成本高、依賴外部網(wǎng)絡(luò)部署。
IoT設(shè)備因運行網(wǎng)絡(luò)環(huán)境碎片化,設(shè)備資源有限,以上兩種內(nèi)網(wǎng)穿透方式并不能很好滿足IoT設(shè)備的遠(yuǎn)程訪問需求。
物聯(lián)網(wǎng)平臺結(jié)合自身的消息傳輸能力,推出了安全隧道功能,提供易用、低成本、安全、可靠的遠(yuǎn)程訪問IoT設(shè)備的能力。
安全隧道技術(shù)
通過物聯(lián)網(wǎng)平臺進行流轉(zhuǎn),提供給訪問端與設(shè)備端之間安全可靠的雙向數(shù)據(jù)流傳輸能力。該數(shù)據(jù)流同TCP的數(shù)據(jù)流一樣,可確保數(shù)據(jù)是順序到達的。用戶可使用隧道傳輸任意協(xié)議的數(shù)據(jù),如SSH、Telnet、FTP等TCP的應(yīng)用協(xié)議數(shù)據(jù),也支持自定義協(xié)議數(shù)據(jù)。
安全隧道會話:安全隧道的底層實現(xiàn)是TCP連接,在TCP/IP四層模型中,一個TCP連接上只有一個應(yīng)用層,如HTTP、SSH。為了讓單個隧道可被多個應(yīng)用同時使用,安全隧道在應(yīng)用層和傳輸層之間增加了會話層,數(shù)據(jù)收發(fā)以會話作為基本單元。隧道提供多會話管理能力,能讓會話能像TCP連接一樣使用,每個會話承載一個應(yīng)用,單個隧道最大支持10個會話。
注:單個隧道的傳輸能力有上限,如果會話的數(shù)據(jù)過多,建議創(chuàng)建多個隧道。
安全隧道價值
安全隧道的核心是提供內(nèi)網(wǎng)穿透的能力,打破用戶在運維時的網(wǎng)絡(luò)限制。除核心能力外,物聯(lián)網(wǎng)平臺安全隧道還具有以下特性,在使用成本、易用性、安全、可擴展等方向上都做了優(yōu)化。
安全隧道技術(shù)方案
1.創(chuàng)建安全隧道
安全隧道功能打通了物聯(lián)網(wǎng)平臺的消息服務(wù)和隧道服務(wù),通過消息服務(wù)可對設(shè)備的隧道完成創(chuàng)建、開啟/關(guān)閉、刪除,實現(xiàn)設(shè)備只需一套身份即可同時使用兩種服務(wù)。
隧道創(chuàng)建的流程:
● 設(shè)備建連:設(shè)備使用MQTT協(xié)議連接消息服務(wù),通過設(shè)備認(rèn)證信息鑒權(quán),完成消息鏈路搭建。
● 創(chuàng)建隧道:訪問端通過云端api或者控制臺完成隧道創(chuàng)建,返回隧道建連信息。
● 下發(fā)隧道建連信息:隧道創(chuàng)建后,物聯(lián)網(wǎng)平臺會給設(shè)備發(fā)送隧道建連信息,包含隧道令牌(token),用戶自定義信息。
● 設(shè)備端隧道連接:設(shè)備端收到隧道建連信息后,連接隧道服務(wù),通過隧道令牌(token)鑒權(quán)。
● 訪問端隧道連接:訪問端創(chuàng)建隧道成功后,也獲得隧道建連信息,連接隧道服務(wù)。
訪問端和設(shè)備端都連接上隧道服務(wù)后,即可使用隧道進行雙向通信,以上過程都使用TLS加密,確保傳輸安全。
2.創(chuàng)建會話
隧道建立以后,由訪問端發(fā)起會話,設(shè)備端響應(yīng)會話。會話有個關(guān)鍵屬性:會話類型,由用戶定義,設(shè)備根據(jù)會話類型決定該會話數(shù)據(jù)的傳輸目的地。
建立會話前,用戶需預(yù)設(shè)置會話類型與設(shè)備本地服務(wù)IP和端口的映射關(guān)系,如:[_SSH會話]-->[127.0.0.1: 22]。
安全隧道應(yīng)用
完成隧道創(chuàng)建及會話創(chuàng)建后,可通過兩種方式處理傳輸?shù)臄?shù)據(jù),TCP本地代理方式和自定義處理方式。
TCP本地代理方式:會話的數(shù)據(jù)收發(fā)將由本地代理處理,本地代理會對接收到的數(shù)據(jù)透傳給對應(yīng)TCP服務(wù)。常見場景:外網(wǎng)通過TCP協(xié)議訪問內(nèi)網(wǎng)設(shè)備的TCP服務(wù),設(shè)備端作為server,訪問端作為client。
以SSH會話建連為例描述工作流程:
● 設(shè)備端代理:配置會話類型與服務(wù)地址的映射關(guān)系,連接上物聯(lián)網(wǎng)平臺隧道服務(wù)
● 訪問端代理:配置監(jiān)聽端口號與會話類型的映射,連接上物聯(lián)網(wǎng)平臺隧道服務(wù)
● SSH客戶端:連接訪問端代理,端口xxx。
● 訪問端代理:接收端口xxx連接請求,根據(jù)端口識別為SSH會話,發(fā)起創(chuàng)建SSH類型會話
● 設(shè)備端代理:接收到SSH類型會話創(chuàng)建請求,根據(jù)會話類型找到服務(wù)地址[127.0.0.0:22],連接SSH服務(wù),返回會話創(chuàng)建結(jié)果。
● 訪問端代理:收到會話創(chuàng)建結(jié)果,反饋給SSH客戶端
以上過程完成會話創(chuàng)建,后面的數(shù)據(jù)傳輸本地代理會透傳數(shù)據(jù),最終效果就像是SSH客戶端直連SSH服務(wù)。
自定義處理方式:會話的數(shù)據(jù)收發(fā)將由用戶自定義處理。常見場景:UDP協(xié)議使用隧道、串口傳輸轉(zhuǎn)換為隧道傳輸。
對于非TCP協(xié)議的應(yīng)用場景,用戶可基于開源協(xié)議進行對接,也可基于SDK進行改造,修改SDK中關(guān)于會話的創(chuàng)建與數(shù)據(jù)收發(fā)的部分代碼。
安全隧道擴展 - 遠(yuǎn)程登錄
安全隧道很好的解決了IoT設(shè)備的遠(yuǎn)程訪問問題,但用戶在運維的時候,還是要先部署訪問端,為進一步提高隧道的易用性,物聯(lián)網(wǎng)平臺針對安全隧道高頻使用的場景--SSH登錄設(shè)備,擴展了遠(yuǎn)程登錄功能。實現(xiàn)免環(huán)境部署,在控制臺即可登錄設(shè)備,同時提供協(xié)作及容災(zāi)能力,支持遠(yuǎn)程登錄分享、設(shè)備主動請求登錄的特性。
不需要安裝任何軟件,在控制臺(web頁面)即可通過SSH遠(yuǎn)程登錄設(shè)備,體驗如同局域網(wǎng)登錄設(shè)備。
結(jié)語
借助 IoT 物聯(lián)網(wǎng)平臺的安全隧道功能,我們可以實現(xiàn)可實現(xiàn)遠(yuǎn)程訪問、遠(yuǎn)程診斷和管理設(shè)備,避免出差旅途奔波,降低企業(yè)運營成本。
原文來源: IoT物聯(lián)網(wǎng)技術(shù)(有刪節(jié))