ESP8266 kontrolatzea portu-birbidalketa gabe: irteerako MQTT bidea
Internetetik eskuragarri dagoen broker batek etxeko gailua kontrolatzeko aukera ematen du berak irekitako konexio baten bidez. Zer aldatzen duen horrek TLS memoriarako, gaiekin eta errepikapenarekin.
Gailua etxeko router baten atzean dago, portu-birbidalketarik eta helbide publikorik gabe, eta hala ere konfigurazioa segundo batzuetan jaso behar du. Trikimailua ez da suebakian zulo bat. Gailuak kanpora irekitzen duen konexioa da, irits dezakeen broker baterantz, eta hark mezuak bide beretik itzultzen ditu. Diseinu honek gustatzen zaion ezaugarri bakoitza, eta barnean duen tranpa bakoitza, inbertsio horretatik dator.
Zer igarotzen da benetan NAT bidez
Gailuak brokerrarekin TCP konexio bat irekitzen duenean, etxeko routerrak mapaketa bat sortzen du eta fluxuaren bizitza osoan bizirik mantentzen du. Fluxu horretako erantzunak gailura itzultzen dira mapaketa jada badagoelako. Brokerrak ez du inoiz ezer hasten etxerantz, beraz ez dago routerrak baztertu beharreko sarrerako pakete eskatu gabekorik. Hori da sare-argudio osoa, eta horregatik funtzionatzen du planteamenduak kontrolatzen ez dituzun sareetan.
Gailuak konexioa bizirik mantendu edo berriro ezarri behar du, eta hori fidagarritasun-kontu bihurtzen da arkitektura finkatu ondoren.
Brokerrak gaiak bideratzen ditu, ez du HTTP proxy egiten
MQTTk argitaratze- eta harpidetza-trukeak definitzen ditu: gailuak irakurtzeko baimena duen gai-iragazki batera harpidetzen da, eta baimendutako kontrolagailu batek bat datorren gaira argitaratzen du. Brokerrak argitalpenak harpidetzekin parekatzen ditu eta kopiak banatzen ditu. Ez daki zer den nabigatzaile-eskaera bat, eta ez dio HTTP GET bat gailuaren web zerbitzariari birbidaliko. Lehendik dagoen firmwareak HTTP bakarrik hitz egiten badu, broker diseinuak aplikazio-aldaketa bat edo itzulpen-konponente deliberatu bat behar du.
Gaien izenak ere ez dira autorizazioa. Broker gehienek bezero bakoitzeko sarbide-kontrol zerrendak onartzen dituzte, eta gailuak beren argitaratze- eta harpidetza-zuhaitzetara mugatu beharko lirateke, izen-espazio global bakarra partekatu beharrean.
Gailuaren baliabideek erabakitzen dute TLSaren forma
ESP8266k RAM mugatua du, eta TLS eskuko heltzea da egiten duen gauzarik garestiena. Arduino nukleoak BearSSL dakar muga horregatik zehazki, eta CA bat egiaztatzearen eta hatz-marka bat finkatzearen arteko aukerak memoria-arrastoa eta beste izen baterako ziurtagiri balioduna duen erasotzaile batek egin dezakeena aldatzen ditu. Brokerraren CA egiaztatzea da aukera sendoena heapak uzten duenean. Karga erabilgarriaren tamainak ere badu garrantzia: MQTT bezeroak buffer bat gordetzen du, eta hura baino handiagoak diren mezuak isilean mozten dira bufferra nahita handitzen ez bada.
Keepalive eta socket denbora-mugak aurrekontu beraren parte dira, konexio hil bat inoiz nabaritzen ez duen bezeroak errore bat jakinarazi gabe aginduak jasotzeari uzten diolako.
Hozk egiten duen mezu-semantika
Atxikitako mezu bat brokerrak gordetzen du eta geroagoko harpidetu egokiei ematen die, eta hori ezin hobea da uneko egoerarako eta arriskutsua erabilera bakarreko aginduetarako: berriro konektatzen den gailu batek atzoko agindua jaso dezake berria balitz bezala. QoS 1ek gutxienez behin entregatzea bermatzen du, beraz bikoiztuak normalak dira eta aplikazioak errepikapenarekiko segurua izan behar du, hobe identifikagailu edo denbora-marka batekin, baztertu ahal izan dezan. Azken borondateak egoera-seinale bat ematen dizu gailua erortzen denean, baina konexioak benetan huts egiten badu eta ez badago zintzilik.
Saio garbiaren portaerak erabakitzen du brokerrak zure harpidetzak gordetzen dituen kanpoan zauden bitartean, eta hori gaizki egitea da gailu batzuek berriro konektatu ondorengo lehen mezua galtzeko arrazoia.
TLSk brokerra arteko tartea babesten du. Ez da karga erabilgarriaren muturretik muturrerako zifratzea brokerraren operadorearekiko, hark zuk haren bidez argitaratzen duzun guztia irakur baitezake.
Mugatu bizi-zikloa eta probatu kalte-gabeko datuekin
Planifikatu berriro konektatzea atzerapenarekin, saiakera berrien begizta estuaren ordez, harpidetu berriro esplizituki saioa iraunkorra ez bada, eta erregistratu konexioaren emaitza, offline dagoen gailu isil batek froga utz dezan. Probatu berriz konektatzeko bidea ezer egiten ez duten lagin-kargekin, agindu-kanal baten lehen ekoizpen-proba ez baita benetako agindu bat izan behar. Ondoren egiaztatu atxikitako mezu zaharkitu batek berriro konektatzean zer egiten duen, eta erabaki portaera hori onargarria den gai bakoitzerako.
Horrela eginda, diseinuak sarrerako sare-baldintza bat kentzen du eta gailuaren softwarea, brokerraren politika eta mezu-semantika lan ikusgai gisa uzten ditu, ezkutuko suposizioen ordez.