Мікракантролер з Wi-Fi-модулем UART не павінен рэалізоўваць VPN, каб дасягнуць сэрвісу за ім. Модуль ужо выконвае стэк TCP/IP і прадстаўляе сокеты праз паслядоўны порт, а шлюз у той жа лакальнай сетцы можа правесці гэты трафік праз тунель. Праект працуе толькі тады, калі вы можаце адказаць на чатыры пытанні па парадку, таму стаўцеся да гэтага як да кантрольнага спісу: адрас, сокет, маршрут, мяжа. Спыніцеся на першай браме, якая не прайшла, бо наступныя не могуць яе кампенсаваць.

Дайце кожнаму ўзроўню адну задачу

Канал UART пераносіць каманды AT і карысную нагрузку паміж мікракантролерам і модулем. Модуль далучаецца да Wi-Fi-сеткі і валодае злучэннем IP, уключаючы свой адрас крыніцы. Шлюз валодае тунелем, уліковымі данымі і палітыкай перасылкі. Менавіта раздзяленне гэтых задач робіць праект наладжвальным на кожным этапе.

Гэта раздзяленне змяняе і тое, як вы пішаце палітыку шлюза. Правіла крыніцы павінна называць адрас модуля ў лакальнай сетцы, а не выдуманы адрас мікракантролера за паслядоўным каналам. Мікракантролер не мае ўласнай ідэнтычнасці 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 і не ператварае лакальны сегмент паміж модулем і шлюзам у частку тунеля. Усё, што патрабуе абароны ў гэтым сегменце, патрабуе ўласнага механізму, а звычайны TCP у гэтым прыкладзе — не TLS.

Вызначце таксама, што адбываецца, калі тунель падае. Калі дастаўка павінна ісці толькі праз VPN, палітыка перасылкі не павінна дазваляць тое ж прызначэнне праз альтэрнатыўны шлях, бо рэзервовы маршрут ціха знішчае патрабаванне. Абмяжуйце паводзіны перападключэння, каб адключаны модуль не затапіў паслядоўны канал ці аддалены сэрвіс паўторамі.

Запішыце чатыры адказы разам: адрас модуля, мэту сокета, маршрут шлюза і месца, дзе пачынаецца шыфраванне. Наступнаму чалавеку, які будзе наладжваць гэтую прыладу, спатрэбяцца ўсе чатыры, і ніводзін з іх нельга вывесці з прашыўкі.

Падобныя артыкулы