Микроконтролер са 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, политика прослеђивања не сме да дозволи исто одредиште алтернативним путем, јер резервна рута тихо поништава захтев. Ограничите понашање при поновном повезивању да искључен модул не преплави серијску везу или удаљену услугу поновљеним покушајима.

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

Повезани чланци