Микроконтролер со UART Wi-Fi модул не мора да имплементира VPN за да стигне до услуга зад него. Модулот веќе извршува TCP/IP стек и изложува сокети преку серискиот порт, а портал во истиот локален мрежен простор може да го пренесе тој сообраќај низ тунелот. Дизајнот функционира само ако можете да одговорите на четири прашања по ред, затоа третирајте го како контролна листа: адреса, сокет, рута, граница. Запрете на првата порта што паѓа, бидејќи подоцнежните не можат да ја компензираат.

Дајте по една задача на секој слој

UART врската пренесува AT команди и полезен товар помеѓу микроконтролерот и модулот. Модулот се приклучува на Wi-Fi мрежата и ја поседува IP врската, вклучително нејзината изворна адреса. Порталот го поседува тунелот, пристапните податоци и политиката за проследување. Токму разделувањето на овие задачи го прави дизајнот податлив за отстранување грешки во секоја фаза.

Разделувањето го менува и начинот на кој ја пишувате политиката на порталот. Изворното правило треба да ја именува LAN адресата на модулот, а не измислена адреса за микроконтролерот зад сериската врска. Микроконтролерот во овој дизајн нема сопствен IP идентитет, а преправањето дека има создава правило што никогаш не се совпаѓа.

Дајте му на модулот стабилна адреса преку кој било механизам за резервација што го поддржува мрежата, или ставете ги уредите на нивни сопствен сегмент и оставете порталот да ги совпаѓа по интерфејс. Адреса од базен што се менува по рестарт на крајот ќе ја скрши политиката што била точна кога сте ја пишувале.

Може ли порталот да ја именува адресата на модулот?

Пред да се отвори кој било сокет, потврдете дека модулот е поврзан, има адреса и дека порталот го гледа на очекуваниот интерфејс. Ова е портата што најчесто паѓа тивко, бидејќи модулот со задоволство ќе пријави обид за поврзување што никогаш не излегол од локалната мрежа.

AT+CWMODE=1
AT+CWJAP="lab-wifi","passphrase"
AT+CIPSTA?
AT+CIPMUX=0

Режимот со една врска ја одржува низата команди едноставна и е вистинската почетна точка за еден сензор што разговара со една услуга. Режимот со повеќе врски ја менува синтаксата на секоја следна команда, затоа одлучете во кој сте пред да копирате пример од друга верзија на фирмверот.

Отворете го сокетот од модулот

Кога адресата и режимот се утврдени, модулот може да отвори TCP врска до приватната услуга. Адресата подолу е пример од документациски опсег; заменете ја со вашата и задржете ја истата форма.

AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}

Таа AT команда отвора обичен TCP сокет, а сокетот не е тунел: ништо во него не создава VPN и ништо не го шифрира полезниот товар. TLS режимот на фирмверот е одделна функција со сопствена команда и сопствено ракување со сертификати, а произволен UART модул може да не поддржува ниту едно. Проверете ја референцата за AT команди на TCP/IP за вашиот фирмвер наместо да претпоставите дека горната синтакса важи за него.

Должината на полезниот товар во AT+CIPSEND мора да одговара на она што навистина го праќате, инаку модулот ќе чека бајти што никогаш не пристигнуваат и врската ќе изгледа заглавена. Тој дефект изгледа како мрежен проблем и речиси секогаш е грешка за еден во должината.

Насочете ја врската низ порталот

На порталот му треба рута до приватната дестинација, дозвола за проследување од мрежата на уредите во тунелот и повратен пат што стигнува до модулот. Ако оддалечената страна не рутира назад во подмрежата на уредите, дизајнот бара намерно правило за превод, а тоа правило го менува изворниот идентитет што го гледа услугата.

ip route get 10.90.0.20
sudo tcpdump -ni wg0 'host 10.90.0.20 and port 9000'
sudo conntrack -L | grep 9000

Прво внимавајте на повратниот пат. Проследен пакет што стигнува до услугата и никогаш не се враќа предизвикува тајмаут кај модулот без никаква грешка на порталот, што ги тера луѓето со часови да гледаат во Wi-Fi врската. Записот во conntrack ви кажува дали порталот воопшто го видел одговорот.

Одлучете каде тунелот навистина завршува

Тунелот започнува на порталот. Тој не ја шифрира UART врската и не го претвора LAN сегментот помеѓу модулот и порталот во дел од тунелот. Сето она што на тој сегмент бара заштита бара сопствен механизам, а обичниот TCP во овој пример не е TLS.

Одлучете и што се случува кога тунелот ќе падне. Ако доставата мора да оди само преку VPN, политиката за проследување не смее да ја дозволи истата дестинација по алтернативен пат, бидејќи резервната рута тивко го поништува барањето. Ограничете го однесувањето при повторно поврзување за да не го поплави исклучениот модул сериската врска или оддалечената услуга со повторни обиди.

Запишете ги четирите одговори заедно: адресата на модулот, целта на сокетот, рутата на порталот и каде почнува шифрирањето. На следниот човек што ќе го отстранува дефектот на овој уред ќе му требаат сите четири, и ниту еден не може да се изведе само од фирмверот.

Поврзани статии