Umiestnite VPN za modul Wi-Fi UART, nie do jeho vnútra
Modul Wi-Fi UART potrebuje TCP socket a tunel patrí bráne. Pomenujte jeho adresu, držte návratovú cestu otvorenú a vedzte, kde sa začína šifrovanie.
Mikrokontrolér s modulom Wi-Fi UART nemusí implementovať VPN, aby sa dostal k službe za ním. Modul už beží na zásobníku TCP/IP a sprístupňuje sockety cez sériový port a brána v tej istej lokálnej sieti môže tento prenos viesť tunelom. Návrh funguje len vtedy, keď dokážete po poradí odpovedať na štyri otázky, takže k nemu pristupujte ako ku kontrolnému zoznamu: adresa, socket, trasa, hranica. Zastavte sa pri prvej bráne, ktorá zlyhá, pretože ďalšie to nemôžu nahradiť.
Priraďte každej vrstve jednu úlohu
Spojenie UART prenáša príkazy AT a užitočné zaťaženie medzi mikrokontrolérom a modulom. Modul sa pripája k sieti Wi-Fi a vlastní IP spojenie vrátane svojej zdrojovej adresy. Brána vlastní tunel, prihlasovacie údaje a politiku preposielania. Práve oddelenie týchto úloh robí návrh ladeným v každej fáze.
Oddelenie mení aj to, ako píšete politiku brány. Zdrojové pravidlo má pomenovať adresu modulu v lokálnej sieti, nie vymyslenú adresu mikrokontroléra za sériovým spojením. Mikrokontrolér v tomto návrhu nemá vlastnú IP identitu a predstieranie, že ju má, vytvára pravidlo, ktoré nikdy nesedí.
Dajte modulu stabilnú adresu cez akýkoľvek rezervačný mechanizmus, ktorý sieť podporuje, alebo umiestnite zariadenia do vlastného segmentu a nechajte bránu párovať podľa rozhrania. Adresa z fondu, ktorá sa po reštarte zmení, nakoniec rozbije politiku, ktorá bola správna, keď ste ju písali.
Môže brána pomenovať adresu modulu?
Pred otvorením akéhokoľvek socketu potvrďte, že modul je pripojený, má adresu a že ho brána vidí na očakávanom rozhraní. Toto je brána, ktorá najčastejšie zlyháva potichu, pretože modul ochotne nahlási pokus o pripojenie, ktorý lokálnu sieť nikdy neopustil.
AT+CWMODE=1 AT+CWJAP="lab-wifi","passphrase" AT+CIPSTA? AT+CIPMUX=0
Režim jedného spojenia udržiava postupnosť príkazov jednoduchú a je správnym východiskom pre jeden senzor, ktorý hovorí s jednou službou. Režim viacerých spojení mení syntax každého ďalšieho príkazu, preto sa rozhodnite, v ktorom ste, skôr než skopírujete príklad z inej verzie firmvéru.
Otvorte socket z modulu
Keď sú adresa a režim určené, modul môže otvoriť TCP spojenie k súkromnej službe. Adresa nižšie je príklad z dokumentačného rozsahu; nahraďte ju vlastnou a zachovajte rovnaký tvar.
AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}
Ten príkaz AT otvára obyčajný TCP socket a socket nie je tunel: nič v ňom nevytvára VPN a nič v ňom nešifruje užitočné zaťaženie. Režim TLS firmvéru je samostatná funkcia s vlastným príkazom a vlastnou správou certifikátov a ľubovoľný modul UART nemusí podporovať ani jedno. Pozrite si referenciu príkazov AT pre TCP/IP svojho firmvéru, namiesto toho, aby ste predpokladali, že sa naň vzťahuje vyššie uvedená syntax.
Dĺžka užitočného zaťaženia v AT+CIPSEND musí zodpovedať tomu, čo skutočne odosielate, inak bude modul čakať na bajty, ktoré nikdy neprídu, a spojenie bude vyzerať zaseknuté. Taká závada vyzerá ako sieťový problém a takmer vždy ide o chybu o jednotku v dĺžke.
Veďte spojenie cez bránu
Brána potrebuje trasu k súkromnému cieľu, povolenie preposielať zo siete zariadení do tunela a návratovú cestu, ktorá sa dostane k modulu. Ak vzdialená strana nesmeruje späť do podsiete zariadení, návrh potrebuje zámerné pravidlo prekladu a toto pravidlo mení zdrojovú identitu, ktorú služba vidí.
ip route get 10.90.0.20 sudo tcpdump -ni wg0 'host 10.90.0.20 and port 9000' sudo conntrack -L | grep 9000
Sledujte najprv návratovú cestu. Preposlaný paket, ktorý dosiahne službu a nikdy sa nevráti, spôsobí v module časový limit bez akejkoľvek chyby na bráne, čo ľudí pošle na hodiny skúmať Wi-Fi spojenie. Záznam v conntracku vám povie, či brána odpoveď vôbec videla.
Rozhodnite, kde tunel skutočne končí
Tunel začína na bráne. Nešifruje spojenie UART a nerobí zo segmentu lokálnej siete medzi modulom a bránou súčasť tunela. Všetko, čo na tomto segmente potrebuje ochranu, potrebuje vlastný mechanizmus, a obyčajné TCP v tomto príklade nie je TLS.
Rozhodnite aj to, čo sa stane, keď tunel padne. Ak doručenie musí ísť len cez VPN, politika preposielania nesmie povoliť ten istý cieľ cez alternatívnu cestu, pretože záložná trasa požiadavku potichu ruší. Obmedzte správanie pri opätovnom pripojení, aby odpojený modul nezaplavil sériové spojenie ani vzdialenú službu opakovanými pokusmi.
Zapíšte štyri odpovede spolu: adresu modulu, cieľ socketu, trasu brány a miesto, kde sa začína šifrovanie. Ďalší človek, ktorý bude toto zariadenie ladiť, bude potrebovať všetky štyri, a žiadnu z nich nemožno odvodiť len z firmvéru.