Įdėkite VPN už UART Wi-Fi modulio, o ne į jo vidų
UART Wi-Fi moduliui reikia TCP lizdo, o tunelis priklauso tinklų sietuvui. Įvardykite jo adresą, palikite atvirą grįžimo kelią ir žinokite, kur prasideda šifravimas.
Mikrovaldikliui su UART Wi-Fi moduliu nereikia įgyvendinti VPN, kad pasiektų už jo esančią paslaugą. Modulis jau vykdo TCP/IP steką ir teikia lizdus per nuosekliąjį prievadą, o tame pačiame vietiniame tinkle esanti tinklų sietuva gali perduoti tą srautą tuneliu. Projektas veikia tik tada, kai galite iš eilės atsakyti į keturis klausimus, todėl traktuokite jį kaip kontrolinį sąrašą: adresas, lizdas, maršrutas, riba. Sustokite ties pirmaisiais vartais, kurie nepavyksta, nes vėlesni jų neatsvers.
Kiekvienam sluoksniui skirkite vieną užduotį
UART jungtis perduoda AT komandas ir naudingąją apkrovą tarp mikrovaldiklio ir modulio. Modulis prisijungia prie Wi-Fi tinklo ir valdo IP ryšį, įskaitant savo šaltinio adresą. Tinklų sietuva valdo tunelį, prisijungimo duomenis ir perdavimo politiką. Būtent šių užduočių atskyrimas leidžia derinti projektą kiekviename etape.
Atskyrimas keičia ir tai, kaip rašote tinklų sietuvos politiką. Šaltinio taisyklė turėtų įvardyti modulio vietinio tinklo adresą, o ne išgalvotą adresą mikrovaldikliui už nuosekliosios jungties. Šiame projekte mikrovaldiklis neturi savo IP tapatybės, o apsimetimas, kad turi, sukuria taisyklę, kuri niekada nesutampa.
Suteikite moduliui stabilų adresą bet kokiu tinklo palaikomu rezervavimo mechanizmu arba sudėkite įrenginius į atskirą segmentą ir leiskite tinklų sietuvai sutapatinti pagal sąsają. Adresas iš telkinio, kuris pasikeičia po perkrovimo, galiausiai sugriaus politiką, kuri buvo teisinga, kai ją rašėte.
Ar tinklų sietuva gali įvardyti modulio adresą?
Prieš atidarant bet kurį lizdą, patvirtinkite, kad modulis prisijungęs, turi adresą ir kad tinklų sietuva mato jį laukiamoje sąsajoje. Tai vartai, kurie dažniausiai nepavyksta tyliai, nes modulis mielai praneš apie ryšio bandymą, kuris niekada neišėjo iš vietinio tinklo.
AT+CWMODE=1 AT+CWJAP="lab-wifi","passphrase" AT+CIPSTA? AT+CIPMUX=0
Vieno ryšio režimas palieka paprastą komandų seką ir yra tinkamas atspirties taškas vienam jutikliui, kalbančiam su viena paslauga. Kelių ryšių režimas keičia kiekvienos vėlesnės komandos sintaksę, todėl nuspręskite, kuriame esate, prieš kopijuodami pavyzdį iš kitos programinės aparatinės įrangos versijos.
Atidarykite lizdą iš modulio
Kai adresas ir režimas nustatyti, modulis gali atidaryti TCP ryšį su privačia paslauga. Toliau pateiktas adresas yra pavyzdys iš dokumentacijos intervalo; pakeiskite jį savuoju ir išlaikykite tą pačią formą.
AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}
Ta AT komanda atidaro paprastą TCP lizdą, o lizdas nėra tunelis: niekas jame nesukuria VPN ir niekas nešifruoja naudingosios apkrovos. Programinės aparatinės įrangos TLS režimas yra atskira funkcija su savo komanda ir savo sertifikatų tvarkymu, o savavališkas UART modulis gali nepalaikyti nė vieno. Pasitikrinkite savo programinės aparatinės įrangos TCP/IP AT komandų žinyną, o ne manykite, kad aukščiau pateikta sintaksė jam tinka.
Naudingosios apkrovos ilgis AT+CIPSEND turi atitikti tai, ką tikrai siunčiate, kitaip modulis lauks baitų, kurie niekada neatvyks, ir ryšys atrodys pakibęs. Ši klaida atrodo kaip tinklo problema ir beveik visada yra vieneto nuokrypis ilgyje.
Nukreipkite ryšį per tinklų sietuvą
Tinklų sietuvai reikia maršruto į privatų tikslą, leidimo persiųsti iš įrenginių tinklo į tunelį ir grįžimo kelio, kuris pasiekia modulį. Jei nuotolinė pusė nemaršrutizuoja atgal į įrenginių potinklį, projektui reikia sąmoningos vertimo taisyklės, o ta taisyklė keičia šaltinio tapatybę, kurią mato paslauga.
ip route get 10.90.0.20 sudo tcpdump -ni wg0 'host 10.90.0.20 and port 9000' sudo conntrack -L | grep 9000
Pirmiausia stebėkite grįžimo kelią. Persiųstas paketas, kuris pasiekia paslaugą ir niekada negrįžta, modulyje sukelia laiko limitą be jokios klaidos tinklų sietuvoje, todėl žmonės valandų valandas žiūri į Wi-Fi jungtį. conntrack įrašas pasako, ar tinklų sietuva apskritai matė atsakymą.
Nuspręskite, kur tunelis iš tikrųjų baigiasi
Tunelis prasideda tinklų sietuvoje. Jis nešifruoja UART jungties ir nepaverčia vietinio tinklo segmento tarp modulio ir sietuvos tunelio dalimi. Viskam, kam tame segmente reikia apsaugos, reikia savo mechanizmo, o paprastas TCP šiame pavyzdyje nėra TLS.
Nuspręskite ir, kas nutinka tuneliui nukritus. Jei pristatymas turi vykti tik per VPN, perdavimo politika neturi leisti to paties tikslo alternatyviu keliu, nes atsarginis maršrutas tyliai panaikina reikalavimą. Apribokite prisijungimo iš naujo elgseną, kad atjungtas modulis neužtvindytų nuosekliosios jungties ar nuotolinės paslaugos pakartotiniais bandymais.
Užrašykite keturis atsakymus kartu: modulio adresą, lizdo tikslą, tinklų sietuvos maršrutą ir kur prasideda šifravimas. Kitam žmogui, kuris šį įrenginį derins, reikės visų keturių, ir nė vieno negalima išvesti vien iš programinės aparatinės įrangos.