ESP8266-ны портты қайта бағыттаусыз басқару: MQTT-нің сыртқа шығатын жолы
Интернеттен қолжетімді broker үй құрылғысын өзі ашқан қосылым арқылы басқаруға мүмкіндік береді. Бұл TLS жадына, тақырыптарға және қайталауға не өзгертеді.
Құрылғы үй роутерінің артында, портты қайта бағыттау да, жария мекенжай да жоқ, бірақ ол конфигурацияны бірнеше секунд ішінде алуы керек. Айла firewall-дағы тесік емес. Бұл құрылғының сыртқа, өзі жете алатын brokerге ашатын қосылымы, ал broker хабарламаларды сол қалыптасқан жолмен қайта жібереді. Бұл дизайнда адамдарға ұнайтын әр қасиет те, ондағы әр тұзақ та осы кері айналудан шығады.
NAT арқылы шын мәнінде не өтеді
Құрылғы brokerге TCP қосылымын ашқанда, үй роутері салыстыру жасайды және оны ағынның өмірі бойы тірі ұстайды. Сол ағындағы жауаптар құрылғыға қайтады, себебі салыстыру бұрыннан бар. Broker үйге қарай ешқашан ештеңе бастамайды, сондықтан роутерге қабылдамайтын сұралмаған кіріс пакеті жоқ. Бұл — бүкіл желілік дәйек, сондықтан бұл тәсіл сіз бақыламайтын желілерде жұмыс істейді.
Құрылғы қосылымды тірі ұстауы немесе оны қайта орнатуы керек, ал архитектура бекітілген соң бұл сенімділік мәселесіне айналады.
Broker тақырыптарды маршруттайды, ол HTTP проксиі емес
MQTT жариялау мен жазылу алмасуларын анықтайды: құрылғы өзіне оқуға рұқсат етілген тақырып сүзгісіне жазылады, ал уәкілетті контроллер сәйкес тақырыпқа жариялайды. Broker жарияланымдарды жазылымдармен сәйкестендіреді және көшірмелерді жеткізеді. Ол браузер сұранысының не екенін білмейді және HTTP GET-ті құрылғының веб-серверіне жібермейді. Егер қолданыстағы firmware тек HTTP білсе, broker дизайны қолданбаны өзгертуді немесе әдейі жасалған аударма компонентін қажет етеді.
Тақырып атаулары да авторизация емес. Көптеген brokerлер әр клиент үшін қатынауды бақылау тізімдерін қолдайды, ал құрылғыларды бір ғаламдық атаулар кеңістігін бөлісуге емес, өздерінің жариялау және жазылу ағаштарымен шектеу керек.
Құрылғы ресурстары TLS пішінін анықтайды
ESP8266-ның RAM-ы шектеулі, ал TLS қол алысуы — оның ең қымбат әрекеті. Arduino ядросы BearSSL-ді дәл осы шектеу үшін жеткізеді, ал CA-ны тексеру мен саусақ ізін бекіту арасындағы таңдау жады ізін де, басқа атауға жарамды сертификаты бар шабуылдаушының не істей алатынын да өзгертеді. Үйінді рұқсат еткенде brokerдің CA-сын тексеру күштірек нұсқа. Пайдалы жүктеме мөлшері де маңызды: MQTT клиенті буфер ұстайды, одан үлкен хабарламалар буфер әдейі ұлғайтылмаса, үнсіз кесіледі.
Keepalive және socket тайм-ауттары сол бюджеттің бөлігі, өйткені өлі қосылымды ешқашан байқамайтын клиент қатені хабарламай-ақ бұйрықтарды қабылдауды тоқтатады.
Тістеп алатын хабарлама семантикасы
Сақталған хабарламаны broker сақтайды және кейінгі сәйкес жазылушыларға жеткізеді, бұл ағымдағы күй үшін тамаша, ал бір реттік бұйрықтар үшін қауіпті: қайта қосылған құрылғы кешегі бұйрықты жаңадай қабылдауы мүмкін. QoS 1 кемінде бір рет жеткізуге кепілдік береді, сондықтан көшірмелер қалыпты және қолданба қайталауға төзімді болуы керек, мұратта ол қабылдамай алатын идентификатор немесе уақыт белгісімен. Соңғы өсиет құрылғы құлағанда күй сигналын береді, бірақ тек қосылым ілініп қалмай, шынымен сәтсіз болса ғана.
Таза сессия мінез-құлқы broker сіз жоқ кезде жазылымдарыңызды сақтай ма, соны шешеді, және осында қателесу — кейбір құрылғылардың әр қайта қосылудан кейін бірінші хабарламаны жіберіп алуының себебі.
TLS brokerге дейінгі бөлікті қорғайды. Бұл broker операторына қарсы пайдалы жүктеменің ұшынан ұшына шифрлауы емес, ол сіздің ол арқылы жариялағаныңыздың бәрін оқи алады.
Өмірлік циклді шектеп, оны зиянсыз деректермен сынаңыз
Қайта қосылуды тығыз қайталау циклінің орнына кейін шегінумен жоспарлаңыз, сессия тұрақты болмаса анық қайта жазылыңыз және қосылу нәтижесін жазып отырыңыз, сонда үнсіз офлайн құрылғы дәлел қалдырады. Қайта қосылу жолын ештеңе істемейтін үлгі жүктемелермен сынаңыз, өйткені бұйрық арнасының алғашқы өндірістік сынағы нақты бұйрық болмауы керек. Сосын ескірген сақталған хабарламаның қайта қосылуда не істейтінін растап, бұл мінез-құлық әр тақырып үшін қолайлы ма, соны шешіңіз.
Осылай жасалса, дизайн бір кіріс желілік талапты алып тастап, құрылғы бағдарламасын, broker саясатын және хабарлама семантикасын жасырын болжамдар емес, көрінетін жұмыс ретінде қалдырады.