ESP8266 steieren ouni Port Forwarding: en auswäertege MQTT-Wee
En Broker, deen aus dem Internet erreechbar ass, erlaabt et, en Heemgeraet iwwer eng Verbindung ze steieren, déi et selwer opgemaach huet. Wat dat fir TLS-Speicher, Themen a Widderhuelung ännert.
D'Geraet steet hannert engem Heemrouter ouni Port Forwarding an ouni ëffentlech Adress, an et muss trotzdem d'Konfiguratioun a Sekonne kréien. Den Trick ass keen Lach an der Firewall. Et ass eng Verbindung, déi d'Geraet no baussen zu engem Broker opmécht, deen et erreeche kann, an deen dann d'Messagen iwwer dee selwechten etabléierte Wee zréckschéckt. All Eegenschaft, déi d'Leit un dësem Design gefällt, an all Falle dran, kënnt aus dëser Ëmkéier.
Wat tatsächlech duerch den NAT kënnt
Wann d'Geraet eng TCP-Verbindung zum Broker opmécht, erstellt den Heemrouter eng Map an hält se lieweg wärend dem ganze Floss. Äntwerten op deem Floss kommen zréck zum Geraet, well d'Map schonn existéiert. De Broker fänkt ni eppes a Richtung Haus un, dofir gëtt et keen ongefrote agaende Pak, deen den Router misst refuséieren. Dat ass de ganzen Netzwierk-Argument, an dofir funktionéiert den Usaz an Netzwierker, déi dir net kontrolléiert.
D'Geraet muss d'Verbindung lieweg halen oder se nei opbauen, wat d'Zouverlässegkeetsfro gëtt, wann d'Architektur feststeet.
De Broker leet Themen ëm, hie mécht keen HTTP-Proxy
MQTT definéiert Verëffentlechungs- a Abonnement-Austausch: d'Geraet abonnéiert e Themefilter, deen et liesen däerf, an e berechtegte Controller verëffentlecht op en entspriechend Theema. De Broker gläicht Verëffentlechungen mat Abonnementen of an liwwert Kopien. Hie weess net, wat eng Browserufro ass, an hie leet keen HTTP GET un de Webserver vum Geraet weider. Wann déi existent Firmware nëmmen HTTP schwätzt, brauch den Broker-Design eng Ännerung un der Applikatioun oder eng bewosst Iwwersetzungskomponent.
Themenummen sinn och net Autorisatioun. Déi meeschte Brokeren ënnerstëtzen Zougrëffskontrolllëschten pro Client, an d'Geraer sollte op hir eege Verëffentlechungs- an Abonnementbeem beschränkt ginn, amplaz ee globale Nummraum ze deelen.
D'Ressourcen vum Geraet entscheeden d'Form vun TLS
En ESP8266 huet begrenzte RAM, an en TLS-Handshake ass dat deierste, wat en mécht. Den Arduino-Kär liwwert BearSSL just wéinst dëser Aschränkung, an d'Wiel tëscht dem Verifizéiere vun enger CA an dem Pinnen engem Fangerofdrock ännert souwuel de Speicherofdrock wéi och wat en Ugräifer mat engem gültege Zertifikat fir en aneren Numm ka maachen. D'CA vum Broker ze verifizéieren ass déi méi staark Optioun, wann den Heap et erlaabt. D'Gréisst vun der Notzlaascht zielt och: de MQTT-Client hält e Puffer, an Noriichten, déi méi grouss sinn, ginn diskret ofgeschnidden, ausser de Puffer gëtt bewosst erhéicht.
Keepalive a Socket-Timeoute sinn Deel vum selwechte Budget, well en Client, deen eng doudeg Verbindung ni bemierkt, opgeet mat Kommandoen ze kréien, ouni e Feeler ze mellen.
D'Messagsemantik, déi bäisst
Eng gehal Noriicht gëtt vum Broker gespäichert a spéideren entspriechende Abonnenten geliwwert, wat exzellent fir den aktuelle Staat an geféierlech fir eemoleg Kommandoen ass: en Geraet, dat sech nei verbënnt, kann de Kommando vun gëschter kréien, wéi wann en nei wier. QoS 1 garantéiert d'Liwwerung op d'mannst eemol, dofir sinn Duplikater normal an d'Applikatioun muss widderhuelungssécher sinn, am beschten mat engem Identifiant oder engem Zäitstempel, deen se refuséiere kann. De leschte Wëllen gëtt dir e Statussignal, wann d'Geraet fält, awer nëmmen, wann d'Verbindung wierklech feelt amplaz ze hänken.
D'Verhalen vun enger propperer Sessioun entscheet, ob de Broker deng Abonnementen hält, während s du fort bass, an dat falsch ze maachen ass de Grond, firwat e puer Geraer déi éischt Noriicht no all Widderverbindung verpassen.
TLS schützt de Strack bis zum Broker. Et ass keng End-zu-End-Verschlësselung vun der Notzlaascht géint de Brokerbedreiwer, deen alles liese kann, wat s du duerch hie verëffentlechst.
Begrenz de Liewenszyklus a test en mat harmlosen Donnéeën
Plang d'Widderverbindung mat Zréckzuch amplaz enger enker Widderhuelungsschleef, abonnéier dech ausdrécklech nei, wann d'Sessioun net persistent ass, a log d'Resultat vun der Verbindung, sou datt en stille Offline-Geraet Beweiser hannerléisst. Test de Widderverbindungswee mat Beispillnotzlaaschten, déi näischt maachen, well den éischten Produktiounstest vun engem Kommandokanal sollt kee richtege Kommando sinn. Bestäteg duerno, wat eng al gehal Noriicht bei der Widderverbindung mécht, a entscheed, ob dëst Verhalen fir all Theema akzeptabel ass.
Esou gemaach, hëlt den Design eng agaend Netzwierkufuerderung ewech a léisst d'Geraetesoftware, d'Brokerpolitik an d'Messagsemantik als sichtbar Aarbecht amplaz verstoppte Viraussetzungen.