国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種內(nèi)網(wǎng)穿透控制智能家居設(shè)備的方案

2020-02-22 01:28錢立
現(xiàn)代信息科技 2020年18期

摘? 要:現(xiàn)代智能家居設(shè)備可通過(guò)手機(jī)APP被遠(yuǎn)程控制,這些控制信息流通常會(huì)通過(guò)云服務(wù)器VPS中轉(zhuǎn),存在安全隱患。當(dāng)中轉(zhuǎn)VPS接受大量請(qǐng)求時(shí),可能會(huì)產(chǎn)生網(wǎng)絡(luò)阻塞而延時(shí)。該文設(shè)計(jì)了一種價(jià)格低廉而又可靠的遠(yuǎn)程控制方案,以MQTT協(xié)議傳輸信息,家居控制端采用NodeMCU控制模塊(ESP8266帶Wi-Fi),網(wǎng)絡(luò)架構(gòu)以一種VPN技術(shù),在手機(jī)APP和家庭路由器(OpenWrt系統(tǒng))之間進(jìn)行P2P內(nèi)網(wǎng)穿透的直連通信,既保證了安全性,又提高了控制響應(yīng)速度。

關(guān)鍵詞:內(nèi)網(wǎng)穿透;ZeroTier;OpenWrt;MQTT;NodeMCU;ESP8266

中圖分類號(hào):TP319? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2020)18-0169-03

Abstract:Modern smart home devices can be remotely controlled through mobile APP. These control information streams are usually transferred through the cloud server VPS,which has security risks. When the transit VPS accepts a large number of requests,it may cause network congestion and delay. This paper designs a low-cost and reliable remote control scheme,which uses MQTT protocol to transmit information and the home controlled terminals use NodeMCU modules(ESP8266 with Wi-Fi). The network architecture uses a VPN technology to carry out P2P intranet penetration direct communication between mobile APP and home(OpenWrt)router,which not only ensures the security,but also improves the control response speed.

Keywords:intranet penetration;ZeroTier;OpenWrt;MQTT;NodeMCU;ESP8266

0? 引? 言

當(dāng)下智能家居設(shè)備在家庭中逐漸普及,給生活帶來(lái)了便利。有時(shí)我們不在家中,卻想要查詢或控制家中的電器設(shè)備,這時(shí)就要求我們能對(duì)其進(jìn)行遠(yuǎn)程控制。目前常見(jiàn)的遠(yuǎn)程家居設(shè)備控制方案通常采用云服務(wù)器中轉(zhuǎn)傳輸信息,存在兩個(gè)缺點(diǎn),一是信息可被截獲,存在安全隱患,二是當(dāng)中轉(zhuǎn)VPS接受大量請(qǐng)求時(shí),可能會(huì)產(chǎn)生網(wǎng)絡(luò)阻塞而延時(shí)。本文采用內(nèi)網(wǎng)穿透技術(shù),使得控制端與家庭路由器之間不經(jīng)過(guò)VPS中轉(zhuǎn)消息,以P2P直連,再結(jié)合MQTT協(xié)議和NodeMCU控制模塊,與手機(jī)端APP軟件以及開(kāi)源OpenWrt路由系統(tǒng)一起構(gòu)建了一個(gè)廉價(jià)可靠而又靈敏的物聯(lián)網(wǎng)家居遠(yuǎn)程控制系統(tǒng)。

1? 內(nèi)網(wǎng)穿透技術(shù)介紹

通常每個(gè)家庭的智能家居設(shè)備會(huì)以家庭智能路由器為中心構(gòu)建一個(gè)小型局域網(wǎng),在該局域網(wǎng)中以有線或Wi-Fi方式連接PC、手機(jī)、平板等各種智能聯(lián)網(wǎng)設(shè)備。當(dāng)我們?nèi)嗽诩抑?,手中的手機(jī)通常直連入家庭局域網(wǎng),這時(shí)手機(jī)上的APP軟件可容易地控制家中聯(lián)網(wǎng)設(shè)備。而當(dāng)人處于住所以外的地方,這時(shí)手中手機(jī)連接的網(wǎng)絡(luò)要么是4G/5G通信網(wǎng)絡(luò),要么是另一個(gè)Wi-Fi局域網(wǎng),這種情況下想要連接上自己的家庭局域網(wǎng)并控制聯(lián)網(wǎng)設(shè)備,則需要內(nèi)網(wǎng)穿透技術(shù)才能達(dá)到目的。

內(nèi)網(wǎng)穿透的目的是從外網(wǎng)(Internet)訪問(wèn)局域網(wǎng)內(nèi)部某一個(gè)聯(lián)網(wǎng)的設(shè)備,涉及NAT/NAPT和P2P等技術(shù)。

1.1? NAT和NAPT

NAT中文含義是網(wǎng)絡(luò)地址轉(zhuǎn)換,NAT不僅能解決IP地址不足的問(wèn)題,還能有效地避免來(lái)自網(wǎng)絡(luò)外部的攻擊,隱藏并保護(hù)網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)[1]。NAPT中文含義是網(wǎng)絡(luò)地址端口轉(zhuǎn)換,能完成<內(nèi)部地址+內(nèi)部端口>和<外部地址+外部端口>之間的轉(zhuǎn)換,被稱為“多對(duì)一”的NAT,目前大多數(shù)中等及大型局域網(wǎng)中路由設(shè)備主要都采用NAPT。

1.2? P2P技術(shù)

P2P點(diǎn)對(duì)點(diǎn)技術(shù)又稱對(duì)等互聯(lián)網(wǎng)絡(luò)技術(shù),可以使得不同局域網(wǎng)的內(nèi)網(wǎng)設(shè)備實(shí)現(xiàn)直連。它的重要能力就是內(nèi)網(wǎng)穿透,檔案分享類軟件如電騾等就使用了P2P技術(shù)。P2P傳輸?shù)姆椒ㄖ饕兄欣^、逆向連接、打洞(UDP或TCP方式)等技術(shù)。需要注意,針對(duì)雙方都是對(duì)稱NAT網(wǎng)絡(luò)進(jìn)行UDP打洞則不可行,而目前國(guó)內(nèi)幾個(gè)主要4G網(wǎng)絡(luò)提供商的局域網(wǎng)大都是對(duì)稱NAT類型,使用常見(jiàn)內(nèi)網(wǎng)穿透方式通常會(huì)失敗。

1.3? 實(shí)用內(nèi)網(wǎng)穿透方案

商用內(nèi)網(wǎng)穿透方案主要有花生殼、NAT123、蒲公英等。開(kāi)源方案有frp、NPS、ngrok、ZeroTier、n2n、Tinc等。ZeroTier是一款適用于全球互聯(lián)網(wǎng)的智能以太網(wǎng)軟交換技術(shù)。它是建立在加密安全的全球點(diǎn)對(duì)點(diǎn)對(duì)等網(wǎng)絡(luò)(P2P)之上的分布式網(wǎng)絡(luò)管理程序。它提供了先進(jìn)的網(wǎng)絡(luò)虛擬化和管理功能,與企業(yè)SDN交換機(jī)不相上下,能同時(shí)跨局域網(wǎng)和廣域網(wǎng),幾乎可以連接任何類型的應(yīng)用程序或設(shè)備。[2]

ZeroTier協(xié)議是原始的,在OSI模型意義上,它有兩個(gè)概念上獨(dú)立但緊密耦合的層:VL1和VL2。VL1是底層的點(diǎn)對(duì)點(diǎn)傳輸層,即“虛擬線”,而VL2是一個(gè)模擬的以太網(wǎng)層,它為操作系統(tǒng)和應(yīng)用程序提供友好常見(jiàn)的通信介質(zhì)。[2]

P2P連接過(guò)程為[2]:(1)A想發(fā)送一個(gè)包到B,但由于它沒(méi)有直接路徑,所以它將包發(fā)送到上級(jí)R(根節(jié)點(diǎn));(2)如果R有一個(gè)直接鏈接到B,R會(huì)將包轉(zhuǎn)發(fā)到B那里。否則,R會(huì)繼續(xù)向上級(jí)根節(jié)點(diǎn)發(fā)送數(shù)據(jù)包,直到到達(dá)行星根節(jié)點(diǎn)群為止。行星根節(jié)點(diǎn)群知道所有的節(jié)點(diǎn),所以如果B在線,包最終會(huì)到達(dá)B;(3)R還向A發(fā)送一個(gè)路由消息,其中包含關(guān)于R如何到達(dá)B的提示。同時(shí),轉(zhuǎn)發(fā)包到B的根節(jié)點(diǎn)R也發(fā)送路由消息,通知B根節(jié)點(diǎn)R如何到達(dá)A;(4)A和B獲取它們的路由會(huì)合消息,并嘗試向彼此發(fā)送測(cè)試消息,可能會(huì)完成對(duì)任何阻擋的NAT或有狀態(tài)防火墻的穿孔。如果建立起了直接的鏈接,則包不再走先前的轉(zhuǎn)發(fā)路線。

2? 系統(tǒng)架構(gòu)設(shè)計(jì)

手機(jī)通過(guò)4G/5G或局域網(wǎng)連接入公網(wǎng)Internet,家庭局域網(wǎng)路由器(OpenWrt系統(tǒng))通過(guò)光貓接入公網(wǎng)。手機(jī)和路由器中均安裝有ZeroTier客戶端,前期通過(guò)ZeroTier的根服務(wù)器完成打洞,之后手機(jī)和路由器之間可建立起直連通道。路由器的OpenWrt系統(tǒng)上安裝有MQTT服務(wù)器(SSL版)[3],轉(zhuǎn)發(fā)MQTT消息給局域網(wǎng)中的所有NodeMCU控制模塊。本文采用了有較強(qiáng)內(nèi)網(wǎng)穿透能力的ZeroTier技術(shù),設(shè)計(jì)的系統(tǒng)架構(gòu)如圖1所示。

3? 系統(tǒng)架構(gòu)搭建及網(wǎng)絡(luò)連通測(cè)試

按照?qǐng)D1架構(gòu)方式,首先使用ZeroTier搭建內(nèi)網(wǎng)穿透環(huán)境,分為五個(gè)步驟:(1)在ZeroTier官網(wǎng)先注冊(cè)賬號(hào);(2)再根據(jù)使用的場(chǎng)景下載不同版本的ZeroTier客戶端軟件(有Linux,Windows,Android,OpenWRT環(huán)境);(3)網(wǎng)頁(yè)登錄個(gè)人賬號(hào)工作面板,創(chuàng)建網(wǎng)絡(luò)ID;(4)在使用環(huán)境中運(yùn)行ZeroTierOne軟件,加入創(chuàng)建好的網(wǎng)絡(luò)ID;(5)在工作面板上授權(quán)各客戶端的連接,分配虛擬局域網(wǎng)IP,如圖2的192.168.191.39和192.168.191.16所示,其中39為手機(jī)IPv4地址,16為路由器(OpenWrt系統(tǒng))分得地址。網(wǎng)絡(luò)連通測(cè)試只需由路由器向手機(jī)IPv4地址發(fā)送PING包,若建立起了P2P通道,則可PING通。

4? 手機(jī)APP與NodeMCU控制模塊通信設(shè)計(jì)及編碼實(shí)現(xiàn)

本文采用的物聯(lián)網(wǎng)通信協(xié)議是MQTT,該協(xié)議適合智能家居設(shè)備,有各種語(yǔ)言版本的實(shí)現(xiàn)。MQTT服務(wù)器采用開(kāi)源Mosquitto(支持MQTT V3.1.1協(xié)議)[4],支持WebSocket通信方式。在手機(jī)APP中采用了開(kāi)源mqtt.js[5],以網(wǎng)頁(yè)WebSocket進(jìn)行通信。NodeMCU控制模塊的SDK[6]實(shí)現(xiàn)了MQTT的通信模塊,編程時(shí)只需調(diào)用編程接口即可。

Web頁(yè)關(guān)鍵代碼為:

手機(jī)APP調(diào)用Web頁(yè),其中IP為由ZeroTier技術(shù)分配的虛擬局域網(wǎng)IP地址。

NodeMCU控制模塊進(jìn)行MQTT通信關(guān)鍵Lua代碼為(其中IP為路由器IP地址):

function go()

m = mqtt.Client("NodeMCU", 120)

m:on("message", function(client, topic, data)

print(topic .. ":" )

if data ~= nil then

print(data) --根據(jù)mqtt消息進(jìn)行設(shè)備控制,如關(guān)燈

end

end)

m:connect("192.168.2.1",

function(m)print("已連接")

m:subscribe("mqtt/d", 0, function(client) print("訂閱成功") end)

m:publish("mqtt/d", " NodeMCU", 0, 0, function(client) print("發(fā)送") end)

end,

function(client, reason) print("失敗原因" .. reason) end

end

當(dāng)系統(tǒng)網(wǎng)絡(luò)連通后,從手機(jī)APP發(fā)布的MQTT消息內(nèi)網(wǎng)穿透后,直接以P2P方式傳到家庭路由器(OpenWrt系統(tǒng))上,該路由器上MQTT服務(wù)器收到這個(gè)消息后,轉(zhuǎn)發(fā)給NodeMCU控制模塊從而控制家居設(shè)備,比如開(kāi)關(guān)空調(diào)、調(diào)節(jié)空調(diào)等。我院計(jì)算機(jī)科學(xué)系多個(gè)實(shí)驗(yàn)室機(jī)房采用這種方案實(shí)現(xiàn)了對(duì)機(jī)房?jī)?nèi)空調(diào)和燈的遠(yuǎn)程控制,完成的空調(diào)控制端模塊和手機(jī)端APP界面如圖3和圖4所示。實(shí)際運(yùn)用的網(wǎng)絡(luò)環(huán)境為移動(dòng)4G通信網(wǎng)絡(luò)(對(duì)稱NAT)和電信寬帶網(wǎng)絡(luò)(端口限制NAT),通信過(guò)程表明采用ZeroTier技術(shù)和這種架構(gòu),網(wǎng)絡(luò)響應(yīng)迅速,是一種實(shí)際可用且可靠的方案。

5? 結(jié)? 論

本文構(gòu)建了一種可內(nèi)網(wǎng)穿透家庭局域網(wǎng)進(jìn)行網(wǎng)絡(luò)直連,進(jìn)而控制智能家居設(shè)備的方案。該方案硬件方面由手機(jī)/平板,廣域網(wǎng)(4G/5G通信網(wǎng)絡(luò)),VPS(ZeroTier根服務(wù)器),家庭光貓,路由器(OpenWrt系統(tǒng)),多個(gè)NodeMCU控制模塊和多臺(tái)受控設(shè)備(燈、電視、空調(diào)等)構(gòu)成;軟件方面有手機(jī)/平板APP(ZeroTier客戶端、遠(yuǎn)程家居設(shè)備控制程序),路由器OpenWrt系統(tǒng)運(yùn)行的ZeroTier客戶端、MQTT服務(wù)器(Mosquitto)軟件,NodeMCU控制模塊程序,結(jié)合MQTT協(xié)議進(jìn)行信息交互。采用了ZeroTier的P2P技術(shù)能在除兩方局域網(wǎng)都是對(duì)稱NAT網(wǎng)關(guān)設(shè)備之外的多種情景下進(jìn)行內(nèi)網(wǎng)穿透。實(shí)際場(chǎng)景應(yīng)用表明這是一種穩(wěn)定可靠且快速的遠(yuǎn)程控制家居設(shè)備的方案。

參考文獻(xiàn):

[1] FALL K R,STEVENS W R.TCP/IP詳解 卷1:協(xié)議:第2版 [M].吳英,張玉,許昱瑋,譯.北京:機(jī)械工業(yè)出版社,2016:212.

[2] ZeroTier.MANUAL [EB/OL].[2020-05-20].https://zerotier.com/manual/.

[3] OpenWRT. package:mosquitto-ssl [DB/OL].[2020-05-20].https://openwrt.org/packages/pkgdata/mosquitto-ssl.

[4] Eclipse. An open source MQTT broker [EB/OL].[2020-05-20].http://mosquitto.org/.

[5] MQTT.js.The MQTT client for Node.js and the browser [EB/OL].[2020-05-19]https://github.com/mqttjs/MQTT.js

[6] ROBINSON S,TUAN PM.MQTT Module [EB/OL].(2015-01-23).https://nodemcu.readthedocs.io/en/release/modules/mqtt/.

作者簡(jiǎn)介:錢立(1978—),男,漢族,四川遂寧人,碩士,副教授,研究方向:軟件專業(yè)Java/Web開(kāi)發(fā)前端技術(shù)、物聯(lián)網(wǎng)嵌入式軟件技術(shù)等。