ESP8266 vadība bez porta pāradresācijas: izejošs MQTT ceļš
No interneta sasniedzams broker ļauj vadīt mājas ierīci pa savienojumu, ko tā pati atvēra. Ko tas maina TLS atmiņai, tematiem un atkārtošanai.
Ierīce atrodas aiz mājas maršrutētāja bez porta pāradresācijas un bez publiskas adreses, un tai tomēr jāsaņem konfigurācija dažu sekunžu laikā. Triks nav caurums ugunsmūrī. Tas ir savienojums, ko ierīce atver uz āru pret broker, kuru tā var sasniegt, un tas pēc tam nosūta ziņojumus atpakaļ pa to pašu jau izveidoto ceļu. Katra īpašība, kas šajā dizainā patīk, un katra lamatas tajā nāk no šīs apgriešanas.
Kas īsti iziet caur NAT
Kad ierīce atver TCP savienojumu ar broker, mājas maršrutētājs izveido kartējumu un uztur to dzīvu visu plūsmas laiku. Atbildes šajā plūsmā atgriežas pie ierīces, jo kartējums jau pastāv. Broker nekad neko neuzsāk pret māju, tāpēc nav nepieprasīta ienākoša paketes, ko maršrutētājam būtu jānoraida. Tas ir viss tīkla arguments, un tāpēc šī pieeja darbojas tīklos, ko jūs nevadāt.
Ierīcei savienojums jāuztur dzīvs vai jāatjauno, un tas kļūst par uzticamības jautājumu, kad arhitektūra ir nostiprināta.
Broker maršrutē tematus, tas neveic HTTP starpniekservisu
MQTT definē publicēšanas un abonēšanas apmaiņas: ierīce abonē temata filtru, kuru tai atļauts lasīt, un pilnvarots kontrolieris publicē atbilstošā tematā. Broker saskaņo publikācijas ar abonementiem un piegādā kopijas. Tas nezina, kas ir pārlūka pieprasījums, un nepārsūtīs HTTP GET uz ierīces tīmekļa serveri. Ja esošā programmaparatūra runā tikai HTTP, brokera dizainam vajadzīga lietojumprogrammas izmaiņa vai apzināta tulkošanas komponente.
Arī tematu nosaukumi nav autorizācija. Lielākā daļa broker atbalsta piekļuves kontroles sarakstus katram klientam, un ierīces jāierobežo ar to pašu publicēšanas un abonēšanas kokiem, nevis jādala viena globāla nosaukumu telpa.
Ierīces resursi nosaka TLS formu
ESP8266 ir ierobežota RAM, un TLS roku saspiediens ir visdārgākais, ko tas dara. Arduino kodols piegādā BearSSL tieši šī ierobežojuma dēļ, un izvēle starp CA pārbaudi un pirksta nospieduma piespraušanu maina gan atmiņas nospiedumu, gan to, ko var izdarīt uzbrucējs ar derīgu sertifikātu citam nosaukumam. Brokera CA pārbaude ir spēcīgāka iespēja, kad kaudze to atļauj. Svarīgs ir arī lietderīgās kravas lielums: MQTT klients tur buferi, un lielāki ziņojumi tiek klusi apcirsti, ja vien buferis nav apzināti palielināts.
Keepalive un ligzdas taimauti ir daļa no tā paša budžeta, jo klients, kas nekad nepamana mirušu savienojumu, pārstāj saņemt komandas, neziņojot par kļūdu.
Ziņojumu semantika, kas kož
Saglabātu ziņojumu broker glabā un piegādā vēlākiem atbilstošiem abonentiem, kas ir lieliski pašreizējam stāvoklim un bīstami vienreizējām komandām: ierīce, kas atkārtoti pieslēdzas, var saņemt vakardienas komandu tā, it kā tā būtu jauna. QoS 1 garantē piegādi vismaz vienu reizi, tāpēc dublikāti ir normāli un lietojumprogrammai jābūt drošai pret atkārtošanu, ideālā gadījumā ar identifikatoru vai laika zīmi, ko tā var noraidīt. Pēdējā griba dod statusa signālu, kad ierīce nokrīt, bet tikai tad, ja savienojums tiešām neizdodas, nevis karājas.
Tīras sesijas uzvedība nosaka, vai broker patur jūsu abonementus, kamēr esat prom, un kļūdīšanās tajā ir iemesls, kāpēc dažas ierīces pēc katras atkārtotas pieslēgšanās palaiž garām pirmo ziņojumu.
TLS aizsargā posmu līdz broker. Tā nav lietderīgās kravas šifrēšana no gala līdz galam pret brokera operatoru, kurš var lasīt visu, ko jūs caur to publicējat.
Ierobežojiet dzīves ciklu un pārbaudiet to ar nekaitīgiem datiem
Plānojiet atkārtotu pieslēgšanos ar atkāpšanos, nevis blīvu atkārtošanas cilpu, skaidri abonējiet vēlreiz, ja sesija nav pastāvīga, un reģistrējiet savienojuma rezultātu, lai klusa bezsaistes ierīce atstātu pierādījumus. Pārbaudiet atkārtotas pieslēgšanās ceļu ar parauga lietderīgajām kravām, kas neko nedara, jo komandu kanāla pirmajam ražošanas testam nevajadzētu būt īstai komandai. Pēc tam apstipriniet, ko novecojis saglabāts ziņojums dara atkārtotas pieslēgšanās laikā, un izlemiet, vai šāda uzvedība ir pieņemama katram tematam.
Šādi veidots, dizains noņem vienu ienākošo tīkla prasību un atstāj ierīces programmatūru, brokera politiku un ziņojumu semantiku kā redzamu darbu, nevis slēptus pieņēmumus.