Sett VPN-en bak en UART Wi-Fi-modul, ikke inni den
En UART Wi-Fi-modul trenger en TCP-socket, og gatewayen eier tunnelen. Nevn adressen dens, hold returveien åpen og vit hvor krypteringen begynner.
En mikrokontroller med en UART Wi-Fi-modul trenger ikke å implementere en VPN for å nå en tjeneste bak en. Modulen kjører allerede en TCP/IP-stack og eksponerer sockets over seriellporten, og en gateway på samme LAN kan føre den trafikken gjennom tunnelen. Designet virker bare hvis du kan svare på fire spørsmål i rekkefølge, så behandle det som en sjekkliste: adresse, socket, rute, grense. Stopp ved den første porten som feiler, for de senere kan ikke kompensere for den.
Gi hvert lag én oppgave
UART-forbindelsen bærer AT-kommandoer og nyttelast mellom mikrokontrolleren og modulen. Modulen kobler seg til Wi-Fi-nettet og eier IP-forbindelsen, inkludert kildeadressen sin. Gatewayen eier tunnelen, påloggingsinformasjonen og videresendingspolicyen. Det er å holde disse oppgavene atskilt som gjør designet feilsøkbart på hvert trinn.
Atskillelsen endrer også hvordan du skriver gatewaypolicyen. En kilderegel skal navngi modulens LAN-adresse, ikke en tenkt adresse for mikrokontrolleren bak seriellforbindelsen. Mikrokontrolleren har ingen egen IP-identitet i dette designet, og å late som den har det gir en regel som aldri matcher.
Gi modulen en stabil adresse gjennom den reservasjonsmekanismen nettet støtter, eller sett enhetene på sitt eget segment og la gatewayen matche etter grensesnitt. En pooladresse som endres etter en omstart vil før eller siden bryte en policy som var riktig da du skrev den.
Kan gatewayen navngi modulens adresse?
Før noen socket åpnes, bekreft at modulen er tilkoblet, har en adresse og at gatewayen ser den på det forventede grensesnittet. Dette er porten som oftest feiler lydløst, fordi modulen gjerne rapporterer et tilkoblingsforsøk som aldri forlot LAN-et.
AT+CWMODE=1 AT+CWJAP="lab-wifi","passphrase" AT+CIPSTA? AT+CIPMUX=0
Modusen med én tilkobling holder kommandosekvensen enkel, og det er riktig utgangspunkt for én sensor som snakker med én tjeneste. Modusen med flere tilkoblinger endrer syntaksen til hver senere kommando, så avgjør hvilken du er i før du kopierer et eksempel fra en annen fastvareversjon.
Åpne socketen fra modulen
Når adresse og modus er fastsatt, kan modulen åpne en TCP-forbindelse til den private tjenesten. Adressen nedenfor er et eksempel fra et dokumentasjonsområde; bytt den ut med din egen og behold samme form.
AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}
Den AT-kommandoen åpner en vanlig TCP-socket, og en socket er ikke en tunnel: ingenting i den lager en VPN og ingenting i den krypterer nyttelasten. Fastvarens TLS-modus er en egen funksjon med sin egen kommando og sin egen sertifikathåndtering, og en vilkårlig UART-modul støtter kanskje ingen av dem. Slå opp i TCP/IP AT-kommandoreferansen for fastvaren din i stedet for å anta at syntaksen ovenfor gjelder for den.
Nyttelastlengden i AT+CIPSEND må stemme med det du faktisk sender, ellers venter modulen på byte som aldri kommer, og forbindelsen vil se ut som den henger. Den feilen ser ut som et nettverksproblem og er nesten alltid en off-by-one i lengden.
Rut forbindelsen gjennom gatewayen
Gatewayen trenger en rute til den private destinasjonen, tillatelse til å videresende fra enhetsnettet inn i tunnelen og en returvei som når modulen. Hvis fjernsiden ikke ruter tilbake til enhetssubnettet, trenger designet en bevisst oversettelsesregel, og den regelen endrer kildeidentiteten tjenesten ser.
ip route get 10.90.0.20 sudo tcpdump -ni wg0 'host 10.90.0.20 and port 9000' sudo conntrack -L | grep 9000
Følg med på returveien først. En videresendt pakke som når tjenesten og aldri kommer tilbake gir en tidsavbrudd ved modulen uten noen feil på gatewayen, noe som får folk til å stirre på Wi-Fi-forbindelsen i timevis. conntrack-oppføringen forteller deg om gatewayen så svaret i det hele tatt.
Avgjør hvor tunnelen faktisk slutter
Tunnelen starter ved gatewayen. Den krypterer ikke UART-forbindelsen, og den gjør ikke LAN-segmentet mellom modul og gateway til en del av tunnelen. Alt som trenger beskyttelse på det segmentet trenger sin egen mekanisme, og vanlig TCP i dette eksemplet er ikke TLS.
Avgjør også hva som skjer når tunnelen faller. Hvis levering må skje bare over VPN, må videresendingspolicyen ikke tillate samme destinasjon via en alternativ vei, fordi en reservevei stille undergraver kravet. Begrens gjentilkoblingsatferden slik at en frakoblet modul ikke oversvømmer seriellforbindelsen eller den eksterne tjenesten med forsøk.
Skriv ned de fire svarene sammen: modulens adresse, socketens mål, gatewayens rute og hvor krypteringen begynner. Den neste som feilsøker denne enheten trenger alle fire, og ingen av dem kan utledes bare fra fastvaren.