前言
先說一下場景需求:
1、遠端ssh通路裝置,但是裝置端不具備公網通路能力。
2、物聯網采集網關,通過4G連接配接外網,網關部署在項目現場,我們不知道網關的IP,就算知道,網絡鍊路也不通。對于網關的遠端調試和運維都無法進行。
目前的解決方案:
1、通過SD-WAN技術,裝置與裝置之間打通隧道。
2、通過VPN,本地部署VPN伺服器,實作VPN專網。
3、采用阿裡雲/華為雲邊緣計算解決方案,裝置連接配接到阿裡雲/華為雲邊緣平台,實作遠端運維、調試。
現有方案優缺點
1、SD-WAN技術,需要配備SD-WAN軟體或硬體,對于企業使用者是合适的。但是裝置廠商并不合适。
2、采用VPN,如果是營運商VPN,成本昂貴,如果是私有部署VPN,部署相對專業,我沒有部署過,不過有一定的專業門檻。
3、使用公有雲提供的邊緣計算方案,相當于要捆綁公有雲,有不小的學習成本。
綜上,上述方案的優點簡單的說就是方案成熟,穩定,缺點就是要花錢買錢和不少人力。
工程師方案
上面的方案是基于外部力量實作的,對于稍微有些能力的開發者而言,也是有少花錢的解決方案的,簡單的說,就是在一台公網伺服器上,部署一個自己開發的 隧道轉發 應用程式,裝置通過 自己開發的應用程式來建立隧道,進而實作轉發,流轉。這種方案,理論上可行,稍微有點網絡基礎的人就知道,背後的工作量巨大,光是穩定性這塊就很難保證,就更不用提多并發管理了。
MQTT Broker轉發方案
上面所有的方案,基本上都是要實作一個中轉站,上面提到的工程師方案的難點和缺點是,一般人很難開發出穩定、高可用、并發的中轉伺服器。那麼如果有個 現成的、友善部署、穩定、可靠的中轉伺服器呢,是否就能解決問題了呢,答案是:yes,有這樣的方案。
關于MQTT的通信協定,可以看我之前關于MQTT的系列文章:
《MQTT協定詳解及開發教程(一)MQTT協定概述》, 這裡就不贅述了。解決方案如下:

我們以MQTT Broker EMQx為例,網關和遠端調試工具作為mqtt client, 通過2個topic:up和down
- 配置工具想要發送指令,則publis消息到 down topic, 網關訂閱down topic,收到指令,對指令進行解析并執行,然後傳回消息,publis消息到up topic,而配置工具訂閱up topic,收到傳回資料。
這種方案,實作了一種通過Broker搭建隧道,實作資料中轉。
優點
可能有些不熟悉MQTT協定的人會覺得,該方案好像也不過如此啊,原理貌似懂,但是幹的事兒好像也不少啊,其實不然,這種方案有很多優點:
1、MQTT是物聯網領域的通用标準,不管是阿裡雲物聯網、還是華為IOT,還是其他公司的IOT,基本上都是通過MQTT協定,可以說MQTT已經是物聯網領域事實上的标準了,标準的優點就是友善,支援多,資料多。
2、MQTT Broker部署非常友善,以EMQx為例,隻需要一台伺服器,不管是windows還是linux,部署非常友善,幾乎不要什麼專業知識。
3、MQTT Broker可選擇對象多,EMQx、Apoll等等。
4、開源、免費、穩定,除非要求完善、高品質的服務,一般的知名開源Broker都是免費試用的,關鍵是非常穩定。
其他工作量
有了MQTT Broker的幫助,對于開發者,我們再也不用幹資料轉發、打通隧道這種專業性強、複雜的活兒了,我們隻需要針對我們自己的應用需求,做MQTT消息的解析即可。
小結
經過測試驗證,該方案可以實作:
- JSON、ASCII碼等字元串轉發,是以理論上可以實作 ssh模拟。
- 位元組、數值、十六進制數值的轉發,是以可以實作遠端功能調試,比如Modbus。
- MQTT支援位元組流轉發,也就是支援檔案傳輸,實作檔案的轉發,類似于xftp。
該方案穩定、部署友善,使用者隻需要關注自己的業務應用即可,目前了解到,一些物聯網關(中電網關)就是通過該方案實作的遠端調試、下載下傳、上載功能。