Postavite VPN iza UART Wi-Fi modula, a ne unutar njega
UART Wi-Fi modul treba TCP socket, a tunel pripada gateway-u. Imenujte njegovu adresu, držite povratni put otvorenim i znajte gdje počinje šifriranje.
Mikrokontroler sa UART Wi-Fi modulom ne mora implementirati VPN da bi dosegao servis iza njega. Modul već pokreće TCP/IP stek i izlaže sockete preko serijskog porta, a gateway na istoj lokalnoj mreži može prenijeti taj saobraćaj kroz tunel. Dizajn funkcioniše samo ako na četiri pitanja možete odgovoriti po redu, zato ga tretirajte kao kontrolnu listu: adresa, socket, ruta, granica. Zaustavite se na prvoj kapiji koja padne, jer kasnije ne mogu to nadoknaditi.
Dodijelite jedan posao svakom sloju
UART veza prenosi AT komande i korisni teret između mikrokontrolera i modula. Modul se pridružuje Wi-Fi mreži i posjeduje IP vezu, uključujući svoju izvornu adresu. Gateway posjeduje tunel, pristupne podatke i politiku prosljeđivanja. Upravo razdvajanje tih poslova čini dizajn popravljivim u svakoj fazi.
Razdvajanje mijenja i način na koji pišete politiku gateway-a. Izvorno pravilo treba imenovati LAN adresu modula, a ne izmišljenu adresu mikrokontrolera iza serijske veze. Mikrokontroler u ovom dizajnu nema vlastiti IP identitet, a pretvaranje da ga ima stvara pravilo koje se nikada ne poklapa.
Dajte modulu stabilnu adresu kroz bilo koji mehanizam rezervacije koji mreža podržava, ili stavite uređaje na vlastiti segment i pustite gateway da ih uparuje po interfejsu. Adresa iz bazena koja se promijeni nakon restarta na kraju će pokvariti politiku koja je bila ispravna kada ste je pisali.
Može li gateway imenovati adresu modula?
Prije nego što se otvori bilo koji socket, potvrdite da je modul povezan, da ima adresu i da ga gateway vidi na očekivanom interfejsu. To su najčešće nijemo padajuća vrata, jer će modul rado prijaviti pokušaj veze koji nikada nije napustio lokalnu mrežu.
AT+CWMODE=1 AT+CWJAP="lab-wifi","passphrase" AT+CIPSTA? AT+CIPMUX=0
Režim jedne veze drži redoslijed komandi jednostavnim i pravo je polazište za jedan senzor koji razgovara s jednim servisom. Režim više veza mijenja sintaksu svake kasnije komande, zato odlučite u kojem ste režimu prije nego što kopirate primjer iz druge verzije firmvera.
Otvorite socket sa modula
Kada su adresa i režim utvrđeni, modul može otvoriti TCP vezu prema privatnom servisu. Adresa ispod je primjer iz dokumentacionog opsega; zamijenite je svojom i zadržite isti oblik.
AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}
Ta AT komanda otvara običan TCP socket, a socket nije tunel: ništa u njemu ne stvara VPN i ništa ne šifrira korisni teret. TLS režim firmvera je odvojena funkcija s vlastitom komandom i vlastitim rukovanjem certifikatima, a proizvoljan UART modul možda ne podržava ni jedno ni drugo. Provjerite referencu AT komandi za TCP/IP za svoj firmver, umjesto da pretpostavite da sintaksa iznad važi za njega.
Dužina korisnog tereta u AT+CIPSEND mora odgovarati onome što zaista šaljete, inače će modul čekati bajtove koji nikada ne stižu i veza će izgledati zaglavljena. Taj kvar izgleda kao mrežni problem i gotovo uvijek je greška za jedan u dužini.
Provedite vezu kroz gateway
Gateway treba rutu do privatnog odredišta, dozvolu za prosljeđivanje iz mreže uređaja u tunel i povratni put koji stiže do modula. Ako udaljena strana ne usmjerava natrag u podmrežu uređaja, dizajnu treba namjerno pravilo prevođenja, a to pravilo mijenja izvorni identitet koji servis vidi.
ip route get 10.90.0.20 sudo tcpdump -ni wg0 'host 10.90.0.20 and port 9000' sudo conntrack -L | grep 9000
Prvo gledajte povratni put. Proslijeđeni paket koji stigne do servisa i nikada se ne vrati daje tajmaut na modulu bez ikakve greške na gateway-u, što ljude šalje da satima gledaju u Wi-Fi vezu. Zapis u conntrack-u kaže vam da li je gateway uopće vidio odgovor.
Odredite gdje tunel zaista završava
Tunel počinje na gateway-u. On ne šifrira UART vezu, i ne pretvara LAN segment između modula i gateway-a u dio tunela. Sve što na tom segmentu treba zaštitu treba i vlastiti mehanizam, a obični TCP u ovom primjeru nije TLS.
Odredite i šta se dešava kada tunel padne. Ako dostava mora ići samo kroz VPN, politika prosljeđivanja ne smije dozvoliti isto odredište alternativnim putem, jer rezervna ruta tiho poništava zahtjev. Ograničite ponašanje pri ponovnom povezivanju da isključeni modul ne preplavi serijsku vezu ili udaljeni servis ponavljanjima.
Zapišite četiri odgovora zajedno: adresu modula, cilj socketa, rutu gateway-a i mjesto gdje počinje šifriranje. Sljedećoj osobi koja bude otklanjala kvarove na ovom uređaju trebat će sva četiri, a nijedan se ne može izvesti samo iz firmvera.